FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 :
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. |
#2
|
||||
|
||||
No entiendo la sentencia, ¿ese sql de qué BD es?, nunca había visto el 'select .' (punto) en una sql de esa forma.
|
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
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. |
#5
|
|||
|
|||
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. |
#6
|
||||
|
||||
Conozco poco los componentes ADO y me parece que nunca he usado un datasetprovider, así que por ahí no puede ayudar mucho.
|
#7
|
||||
|
||||
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. |
#8
|
|||
|
|||
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. |
#9
|
|||
|
|||
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 :
Y en el BeforeOpen del ClientDataSet agrego los campos InternalCalc :
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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|