PDA

Ver la Versión Completa : ADOQuerys con campos "If(..." no se actualiza en un DbGrid


Walterio
09-04-2012, 15:33:21
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.:

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 (http://terawiki.clubdelphi.com/Delphi/Manuales/?download=La_Cara_Oculta_De_Delphi_4.pdf.zip), 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 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