Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   ADOQuerys con campos "If(..." no se actualiza en un DbGrid (https://www.clubdelphi.com/foros/showthread.php?t=78322)

Walterio 09-04-2012 15:33:21

ADOQuerys con campos "If(..." no se actualiza en un DbGrid
 
Hola a todos...
Mi escenario :
- Delphi 6
- MySQL
- ADO para la conexión
- TADOQuery, DataSetProvider yTClientDataSet.

Tengo varias consultas en donde la sentencia Select tiene un campo con la función IF().
Ej.:
Código SQL [-]
SELECT
    cc202.CMOVBCO202,
    cc202.TMOVBCO202,
    IF(cc202.TMOVBCO202 = 1, ' + QuotedStr('Débito') + ', ' + QuotedStr('Crédito') + ') AS DTMOVBCO202,
    cc202.NIV202
FROM
    cc202

Hasta aquí, todo bien, el tema es que estos datos los muestro en una DbGrid, si hago una modificación o un insert (uso otro form para los ABM, no edito en la grilla directamente), al volver del ABM, los campos con "IF" no se actualizan, mientras que los otros campos si, incluso campos de la consulta que tengo mediante JOINS.Tengo que cerrar el form que contiene la grilla y al volver a abrirla, allí si se muestran los cambios...el tema es que necesito que los cambios se vean reflejados en la grilla al volver del form del ABM...¿alguna sugerencia....?.

Desde ya, muchas gracias

Casimiro Notevi 09-04-2012 15:48:11

En lugar de cerrar el form, haz un .refresh del dataset

Walterio 10-04-2012 23:05:55

Hola Casimiro...
Gracias por tu respuesta.Estuve probando lo que me sugeriste con los siguientes resultados :
En mi código, delpues del ClientDataSet.DataSet.Post, hago un ClientDataSet.DataSet.Refresh, pero recibo un mensaje de error como el siguiente : " EDatabaseError - Must apply updates before refreshing data", entonces, antes del .refresh, supongo, deberia hacer un ClientDataSet.ApplyUpdates(-1)...el tema es que desde la ayuda de Delphi (Delphi 6 en mi caso), explica el uso del ApplyUpdates en el ClientDataSet, pero....sorpresa!!!, al compilar, recibo este mensaje : "Error] TForm1.pas(437): Undeclared identifier: 'ApplyUpdates'".
Se supone que si vengo usando los ClientDataSet en este form, y tal como dice la ayuda de Delphi, el ApplyUpdates deberia funcionar...¿o mi Delphi está rebelde...?.

Saludos y gracias por la paciencia y la ayuda.

Casimiro Notevi 10-04-2012 23:15:16

No conozco apenas los componentes ADO y no suelo usar los TClientDataSet :(
Pero mientras alguien responde, puedes echar un vistazo al libro de Marteens, creo recordar que trae un apartado sobre los mismos. A ver si hay suerte :)

Walterio 14-04-2012 18:05:59

Muchas gracias Casimiro por tu atención.
Ya estoy leyendo el artículo que me pasaste.Al final, le encontré una pseudo-solución al tema hasta que lo pueda resolver mas "elegantemente", uso el método del TField, OnGetTex, al menos, visualmente para el usuario, es una solución.La ayuda de Delphi explica muy bien este método, pero si hace falta el detalle, lo publico para compartirlo con todos.(No estoy en la oficina, por lo cual no tengo el código a mano para publicarlo).

Nuevamente, mil gracias.

Saludos.

@-Soft 14-04-2012 23:18:11

hola


creo que MySQL soporta la condicional
Código SQL [-]
CASE WHEN  x THEN y END
, revisa esa estructura en la ayuda de mysql a ver si desde el query la traes ensablanda y solo tienes que mostrarla en tu front end


La franja horaria es GMT +2. Ahora son las 00:41:33.

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