FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
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. |
#4
|
||||
|
||||
Conozco poco los componentes ADO y me parece que nunca he usado un datasetprovider, así que por ahí no puede ayudar mucho.
|
#5
|
||||
|
||||
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. |
#6
|
|||
|
|||
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. |
#7
|
|||
|
|||
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. |
|
|
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 |
|