Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-03-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
TADOQuery, ClientDataSet y edición de campo NO persistente

Hola amigos...
Uso Delphi 6, un TAdoQuery, un TDataSetProvider y un TClientDataSet.
Esta es mi consulta SQL :

Código SQL [-]
sQuery := 'SELECT ' +
               QuotedStr('.') + ' as TAG,' +
               'st384.id384,' +                
               'st384.CCY384,'+
               'st384.NCY384,'+
               'st384.RES384,'+
               'st384.UFA384 '+
               'FROM st384';

Esto pasa a un ClientDataSet por medio de su provider y se muestra en un DbGrid sin problema.
Lo que me está pasando es que, estando en la grilla y apretando en la tecla espaciadora, el campo TAG debe cambiar de '.' a '' o viceversa.
El problema está que al intentar hacerlo, me sale un mensaje diciendo que el campo TAG no es editable.
Esto mismo lo tengo implementado en otro sistema, con la diferencia que en vez de ADOQuery utilizo tablas DBF (sin Provider), donde previamente copio la estructura de la tabla DBF en en ClientDataSet, alli le creo el campo TAG y después recorro la tabla DBF pasandole los datos al ClientDataSet.

Ya probé de cambiarle los valores de Providerflag al campo TAG, cosa de no tener alcance en el update de la query, pero tampoco funcionó (de este último "truco" no estoy muy convencido, pero quería probarlo).

Desde ya, agradezco toda ayuda, pista, truco o brujería que me pueda ayudas.

Saludos.

Última edición por Casimiro Notevi fecha: 19-03-2012 a las 15:05:54.
Responder Con Cita
  #2  
Antiguo 19-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No entiendo la sentencia, ¿ese sql de qué BD es?, nunca había visto el 'select .' (punto) en una sql de esa forma.
Responder Con Cita
  #3  
Antiguo 19-03-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
TADOQuery, ClientDataSet y edición de campo NO persistente

Hola Casimiro....
La BD es MySQL y el campo '.' As Tag es un campo que creo en la consulta (no es un campo persistente de la tabla de la BD) que me muestra en la grilla una columna con el dato '.'
Lo que necesito es que al presionar la barra espaciadora, el valor '.' pase a '' (vacio) o viceversa.Este dato lo necesito para mostrar como un registro "seleccionado" por el usuario, dependiendo del valor que tenga almacenado este campo('.'=Seleccionado, ''=NoSeleccionado).Como comenté antes, éste método lo utilizo con dbf y clientdataset sin provider y me funciona a la perfección.
De todas formas, estoy abierto a todas sugerencias de cómo hacer que desde la grilla de datos, el usuario "seleccione" un/unos registros para su posterior tratamiento, que es ese el propósito del tan mencionado campo.

Nuevamente, muchas gracias.
Responder Con Cita
  #4  
Antiguo 19-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Yo suelo usar 1 y 0 (cero), y saco un checkbox en el grid: 1 es marcado y 0 es desmarcado.
También puedes usar la opción múltiple selección de los grids para hacer eso.
Responder Con Cita
  #5  
Antiguo 20-03-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
TADOQuery, ClientDataSet y edición de campo NO persistente

Hola Casimiro...
Es justamente lo que necesito hacer, el tema es donde almacenar esos valores de 1 y 0 (tambien muestro un checkbox en el grid).Si al apretar la barra espaciadora, anteriormente cambiaba el valor del campo con "." o " " (mostrando el checkbox según corresponda), ahora obtengo el mensaje de que dicha columna no se puede editar.
Como te contaba anteriormente, ese valor (1 o 0) lo almacenaba en un campo creado en tiempo de ejecución del clientdataset cuando usaba tablas dbf, pero como ahora uso un TADOQuery mediante un DataSetProvider conectado al clientdataset, creo el campo desde la query con el famoso '.' (que seria un cero, "0").Lo del multiselect no lo probé, pero una vez me pasó con otro desarrollo que seleccionaba los registros usando multiselect, pero en cuanto movía la grilla hacia abajo o hacia arriba, se perdía esa selección (cosa muy rara).

Gracias nuevamente y saludos.
Responder Con Cita
  #6  
Antiguo 20-03-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Conozco poco los componentes ADO y me parece que nunca he usado un datasetprovider, así que por ahí no puede ayudar mucho.
Responder Con Cita
  #7  
Antiguo 21-03-2012
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Hola Walterio.

En un caso como el tuyo, se acostumbra crear el campo adicional necesario sólo en la memoria del TClientDataSet. Eso lo consigues dando doble clic sobre el componente y eligiendo la opción "New field...", de la misma manera en que se crea un campo calculado común y corriente, pero con la diferencia de que en lugar de marcar la opción Calculated marques la opción InternalCalc.

Los campos InternalCalc se parecen a los campos calculados en que sólo existen en la memoria del conjunto de datos, sólo que, al igual que un campo de datos normal, el usuario puede editarlos. Vaya, podemos decir que son "campos de memoria capturables", como lo que precisamente buscabas inicialmente.

Espero te sirva.

Al González.
Responder Con Cita
  #8  
Antiguo 20-04-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
Hola Al González...
Muchas gracias por tu respuesta y mis disculpas por la tardanza en la mía, estaba trabajando con otra cosa y no quería responderte sin antes haber probado tu sugerencia.
Estuve haciendo unas pruebas muy grotescas y a grandes razgos, tu sugerencia sería la solución, pero ahora tengo otro problema.
Sé que en el foro encontré una vez la respuesta a lo que voy a preguntar ahora, pero sinceramente, no la puedo hubicar.
Antes aclaro lo que estoy usando :
Delphi 6, MySQL, ADOQuery, DataSetProvider y ClientDataset, conectados entre si.
El tema ahora es el siguiente:
Al agregar las columnas del tipo InternalCalc, desaparecen las columnas que habia creado anteriormente con el Query :

Código Delphi [-]sQuery := 'SELECT '+ 'id385, '+ 'CMC385,'+ 'DES385,'+ 'RES385,'+ 'UFA385 '+ 'FROM cc385'; TDBO.buscoReg(sQuery, qryMaster); with cdsMaster do begin Open; for i := 0 to Fields.Count - 1 do SetField(Fields[i], 'CC534'); // <-- aqui les doy formato a los campos de la query... First; End;


Y en el BeforeOpen del ClientDataSet agrego los campos InternalCalc :

Código Delphi [-]procedure TFrmGenericGrid.cdsMasterBeforeOpen(DataSet: TDataSet); var xSelected: TStringField; begin xSelected := TStringField.Create(Self); xSelected.Name := 'MasterTag'; xSelected.FieldKind := fkInternalCalc; xSelected.FieldName := 'Tag'; xSelected.Size := 2 ; xSelected.DataSet := cdsMaster; End;


Y cuando ejecuto el programa, sólo me aparece el campo TAG creado ultimamente.
Vuelvo a repetir, he visto por ahi que habia un pequeño truco para "revivir" los campos que agrega la Query y que aparezcan junto a mi campo calculado, pero no encuentro la forma.

Desde ya, agradezco infinitamente las ayudas, sugerencias y consejos recibidos.

Saludos.
Responder Con Cita
  #9  
Antiguo 20-04-2012
Walterio Walterio is offline
Miembro
 
Registrado: nov 2006
Posts: 46
Poder: 0
Walterio Va por buen camino
Copio aqui nuevamente el mensaje anterior porque veo que salió mal formateado :
Hola Al González...
Muchas gracias por tu respuesta y mis disculpas por la tardanza en la mía, estaba trabajando con otra cosa y no quería responderte sin antes haber probado tu sugerencia.
Estuve haciendo unas pruebas muy grotescas y a grandes razgos, tu sugerencia sería la solución, pero ahora tengo otro problema.
Sé que en el foro encontré una vez la respuesta a lo que voy a preguntar ahora, pero sinceramente, no la puedo hubicar.
Antes aclaro lo que estoy usando :
Delphi 6, MySQL, ADOQuery, DataSetProvider y ClientDataset, conectados entre si.
El tema ahora es el siguiente:
Al agregar las columnas del tipo InternalCalc, desaparecen las columnas que habia creado anteriormente con el Query :

Código Delphi [-]
sQuery := 'SELECT '+                 
                'id385, '+                 
                'CMC385,'+                 
                'DES385,'+                 
                'RES385,'+                 
                'UFA385 '+               
              'FROM cc385';      
TDBO.buscoReg(sQuery, qryMaster);      
with cdsMaster do     
begin        
  Open;       
  for i := 0 to Fields.Count - 1 do SetField(Fields[i], 'CC534'); //  <-- aqui les doy formato a los campos de la query...         
  First;
End;

Y en el BeforeOpen del ClientDataSet agrego los campos InternalCalc :

Código Delphi [-]
procedure TFrmGenericGrid.cdsMasterBeforeOpen(DataSet: TDataSet); 
var xSelected: TStringField; 
begin   
  xSelected := TStringField.Create(Self);    
  xSelected.Name      := 'MasterTag';   
  xSelected.FieldKind := fkInternalCalc;   
  xSelected.FieldName := 'Tag';   
  xSelected.Size      := 2 ;   
  xSelected.DataSet   := cdsMaster; 
End;

Y cuando ejecuto el programa, sólo me aparece el campo TAG creado ultimamente.
Vuelvo a repetir, he visto por ahi que habia un pequeño truco para "revivir" los campos que agrega la Query y que aparezcan junto a mi campo calculado, pero no encuentro la forma.

Desde ya, agradezco infinitamente las ayudas, sugerencias y consejos recibidos.

Saludos.
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
Conexión persistente o por demanda? diegofhernando Conexión con bases de datos 3 30-09-2011 16:52:04
Edición campo Fecha-hora fjcg02 Conexión con bases de datos 3 16-05-2008 14:40:08
Edición Campo Memo MySql ekstase SQL 0 03-09-2007 02:44:33
Como puedo cambiar la propiedad de edicion y no edicion a un StringGrid1 ctronx Varios 2 25-06-2004 23:10:19
DBGRID detectar fin de edicion de campo andrestsas Tablas planas 2 12-08-2003 17:11:02


La franja horaria es GMT +2. Ahora son las 13:26:43.


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