Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con CampoCalculado (https://www.clubdelphi.com/foros/showthread.php?t=50902)

MaMu 01-12-2007 09:06:45

Problema con CampoCalculado
 
Tengo un campo calculado de tipo booleano, simplemente para usarlo como selector de registros, tipo una casilla de correo, en donde seleccionamos los mensajes a borrar por ejemplo.
Estoy usando Delphi 7, y las JVCL, las cuales traen un DBGrid que dibuja directamente un checkbox en el campo boleano.
Pero resulta que al hacer clic en el DBGrid (seleccion fila completa)
cuando intento modificar el checkbox, me tira el siguiente error:

"Cannot update a complex query with more then one table"

Código Delphi [-]
procedure TForma.JvDBGrid1CellClick(Column: TColumn);
begin
 Query.Edit;
 QuerySeleccionado.Value:=True;
 Query.Post;
end;

Porque no se puede actualizar una consulta compleja con mas de una tabla?
Tengo un Query (de Zeos, conectandose a mySQL) donde consulto 3 tablas a la vez, ya que es necesario.
El campo es calculado, hay alguna posibilidad de cambiarle el estado?
O alguna otra idea de como hacer un selector de registros.

PD: el selector de registros es aquel CheckBox que se encuentra al inicio de la fila de un registro, no se si lo expreso bien o se entiende.

Saludos y gracias

courtois 01-12-2007 09:44:24

por que no usas la opcion de seleción multiple del dbgrid en lugar de añadir un capo?

Lepe 01-12-2007 10:48:37

No se puede hacer y punto.

Supongo tendrás que usar un UpdateSql unido al query original. Ahora cuando modifiques el valor, se ejecutará el query correspondiente (normalmente el updateSql), tú código no varía, solo añade dicho objeto y configura sus propiedades.

Saludos

MaMu 01-12-2007 16:45:36

Cita:

Empezado por courtois (Mensaje 249757)
por que no usas la opcion de seleción multiple del dbgrid en lugar de añadir un capo?

Porque resulta poco practico e incomodo cuando tenes que seleccionar de un grupo de mas de 1000 registros, y ademas, resulta mucho más facil y sencillo para filtrar luego por registros seleccionados, y ni hablar de la interface visual, queda más profesional, digamos que son gustos.

Saludos

MaMu 01-12-2007 16:49:36

Cita:

Empezado por Lepe (Mensaje 249767)
No se puede hacer y punto.

Supongo tendrás que usar un UpdateSql unido al query original. Ahora cuando modifiques el valor, se ejecutará el query correspondiente (normalmente el updateSql), tú código no varía, solo añade dicho objeto y configura sus propiedades.

Saludos

Bueno, voy a intentar la sugerencia usando un UpdateSql. Ahora bien, de todas maneras me resulta curioso e interesante el porque realmente no se puede, ya que si analizo la consulta, es una sola global que apunta a la condicion anidada de otras dos tablas, anidadas entre si, lo que tendria una integridad referencial en cascada, asumo el impedimento como que el requicito deberia ser la edicion simultanea de toda la linea en cascada de tablas.

Saludos

MaMu 02-12-2007 21:39:10

Cita:

Empezado por Lepe (Mensaje 249767)
No se puede hacer y punto.

Supongo tendrás que usar un UpdateSql unido al query original. Ahora cuando modifiques el valor, se ejecutará el query correspondiente (normalmente el updateSql), tú código no varía, solo añade dicho objeto y configura sus propiedades.

Saludos

La verdad es que lo intente, pero no se como configurar el UpdateSql ni como unirlo al query. Como tendria que hacer? no encuentro nada de eso en las propiedades.

Saludos

MaMu 02-12-2007 21:56:55

Logre configurarlo en el DataSource, y haciendo doble clic aparece el editor. Pero alli mismo, no me figura el campo calculado. Genere el comando modify con otro campo, y luego lo edite manualmente al campo calculado. Pero cuando o en que momento se ejecuta esto?

Saludos

Lepe 02-12-2007 22:23:06

Cuando editas un registro y le das a guardar (en un dbnavigator, o con la sentencia Dataset.Post), se ejecutará el UpdateSql.

Lo mismo ocurrirá al insertar, borrar etc. Cada sql se ejecutará con su opción correspondiente del DBNavigator.

Supongo que en dichas sqls del UpdateSql solo tendrías que hacer referencia a la tabla que quieres modificar. En principio, y dado que es un campo calculado no te hace falta grabar nada, pero el "Grid debe creer" que sí se puede guardar el registro.

Saludos

MaMu 03-12-2007 23:49:39

Cita:

Empezado por Lepe (Mensaje 249897)
Cuando editas un registro y le das a guardar (en un dbnavigator, o con la sentencia Dataset.Post), se ejecutará el UpdateSql.

Lo mismo ocurrirá al insertar, borrar etc. Cada sql se ejecutará con su opción correspondiente del DBNavigator.

Supongo que en dichas sqls del UpdateSql solo tendrías que hacer referencia a la tabla que quieres modificar. En principio, y dado que es un campo calculado no te hace falta grabar nada, pero el "Grid debe creer" que sí se puede guardar el registro.

Saludos

En realidad no se como engañar al Grid, porque el post no me lo deja hacer, y en realidad lo que quiero es modificar solamente el campo calculado (un checkbox) de False a True y viceversa, para luego operar solamente con los seleccionados.

Saludos

Lepe 04-12-2007 01:19:29

Existen Grids en Torry.net que hacen lo que pides, por ejemplo el SelectDbGrid v.1 (free con fuentes)

Por mi parte, siempre he usado la forma Standard o el VirtualStringTree (pero no es un control db-aware).

De todas formas, si te empeñas, seguro que lo consigues.

Saludos


La franja horaria es GMT +2. Ahora son las 15:31:19.

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