Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2009
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Question Bloquear celdas en DBGid

Hola a todos:
Me encuentro haciendo una BD (Uso delphi 7, componentes ADO, y SQL Server). En el servidor SQL tengo la BD y esta contiene una tabla llamada Estimulacion. En esta tabla hay muchos campos que el usuario no tiene que llenar ya que funcionan a traves de formulas.
Ej: Introdusco: Campo1=2 Campo2=3 y automaticamente Campo3=Campo1+Campo2.
Ahora bien, resulta que yo tengo un DBGRID que esta vinculado a esa tabla y poe DBGrid introdusco los datos.
Como puedo bloquear esas celdas para que el usuario no pueda escribir en ellas?
Como hago para que cuando yo escriba en el campo 1 y 2 automaticamnte el campo3 realice la formula pertinente?
Espero me ayuden en esta tarea. Por ahora es todo.
Gracias por adelantado.
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #2  
Antiguo 18-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Puedes poner de solo lectura bien sea los campos que quieres o las columnas en el dbgrid. Para lo primero debes agregar los campos persistentes mediante el editor de campos del dataset asociado (accedes desde el menú contextual del componente). Para las columnas, también debes agregarlas explícitamente (doble click sobre el dbgrid). En ambos casos, campos o columnas, tienes la propiedad ReadOnly que evitará que se puedan modificar esos datos.

// Saludos
Responder Con Cita
  #3  
Antiguo 18-02-2009
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Hola roman:
Gracias por contestar, ya hice lo que me dijiste con respecto a bloquear las celdas. Ahora, como hago para que segun voy introduciendo datos los campos bloqueados realicen su formula?
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #4  
Antiguo 18-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Aquí yo primero me cuestionaría el porqué guardar un campo calculado en la base de datos. Es decir, si el valor de un campo puede ser calculado a partir de otros campos, entonces ¿para qué guardarlo si siempre se puede recalcular?

Delphi ofrece soporte para campos calculados que puedes añadir a un dataset y en los cuales haces el cálculo correspondiente, mismo que se muestra como cualquier otro campo aunque realmente no exista en la tabla física.

Vamos a ejemplificar suponiendo que tienes campos campo1 y campo2 de tipo entero en tu tabla y que quieres mostrar un campo resultado con la suma de ambos campos, pero que tal campo no existe en tu tabla.

En el editor de campos del dataset añades todos los campos y luego escoges la opción New field:





En las propiedades del nuevo campo escribes el nombre que desees darle y dejas seleccionada la opción Calculated:





Finalmente, en el evento OnCalcFields del dataset pones:


Código Delphi [-]
procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
  DataSet.FieldByName('Resultado').AsInteger :=
    DataSet.FieldByName('campo1').AsInteger +
    DataSet.FieldByName('campo2').AsInteger;
end;

Con esto, tu dbgrid mostrará el campo Resultado como si fuera otro campo de tu tabla y su valor se calculará en automático conforme coloques valores a los otros dos campos.

-----------------------------------

Ahora bien; si por cualquier razón debes guardar el campo como parte de tu tabla, entonces tienes que hacer los cálculos tú mismo.

Para empezar, no pongas el campo Resultado como ReadOnly porque entonces no te dejará modificarlo de ninguna manera. Usa mejor la columna del dbgrid para hacerlo de sólo lectura.

Asigna un mismo evento OnChange a los otros campos y coloca ahí el código
de la fórmula (suma en este ejemplo):

Código Delphi [-]
procedure TForm1.CampoChanged(Sender: TField);
begin
  Table1.FieldByName('resultado').AsInteger :=
    Table1.FieldByName('campo1').AsInteger +
    Table1.FieldByName('campo2').AsInteger;
end;

// Saludos
Responder Con Cita
  #5  
Antiguo 19-02-2009
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Smile

Gracias, ya me resultó.
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
  #6  
Antiguo 19-02-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
O sea, me lanzo toda una explicación y no me dices siquiera cuál fue la opción que tomaste.

Na, es broma.

// Saludos
Responder Con Cita
  #7  
Antiguo 19-02-2009
Avatar de Alexandro
Alexandro Alexandro is offline
Miembro
 
Registrado: mar 2008
Ubicación: Mayarí Holguín Cuba
Posts: 127
Poder: 17
Alexandro Va por buen camino
Ja, ja, ja. Disculpame. Utilicé la 2 opcion ya que es necesario que guarde los datos en la tabla. Por cierto sabes como puedo crear una tabla en una BD en un servidor SQL?

10000000 de gracias por todo
__________________
Cuando las cosas van mal, recuerda que aún pueden ir peor
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Celdas de un DBgrid jzk OOP 6 14-12-2004 14:13:31
Stringrid y sus celdas .... elbilla Varios 0 04-10-2004 18:40:15
Celdas en DBGrids karocs Conexión con bases de datos 1 31-08-2004 13:24:13
bloquear celdas en un stringgrid ciscu Gráficos 1 18-12-2003 18:34:50
bloquear celdas en un stringgrid ciscu Varios 1 13-12-2003 04:41:54


La franja horaria es GMT +2. Ahora son las 20:57:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi