Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   AdoQuery no hace Post correctamente (https://www.clubdelphi.com/foros/showthread.php?t=76367)

joni88 26-10-2011 17:31:55

AdoQuery no hace Post correctamente
 
Buenas! Mi primer consulta en el foro, espero que me puedan ayudar. Les comento:
Tengo un AdoQuery al cual lo lleno con los datos de una consulta SQL, ese AdoQuery tiene un TFieldBoolean y esta conectado a una grilla, la grilla tiene una columna de tipo check en la cual debería poder editar el valor de la FieldBoolean... la consulta se realiza correctamente y hasta me deja hacer click y cambiar el valor en la grilla, pero cuando cambio de registro este valor vuelve al que estaba anteriormente...

Para probar, a demás agregué la siguiente función que la llamo desde un botón:

Código Delphi [-]
function ChangeCorregir: Boolean;
 begin   
if aqErrores.State <> dsEdit then
     aqErrores.Edit;   
aqErroresCORREGIR.Value := not aqErroresCORREGIR.Value;
 //aqErroresCORREGIR es la TFieldBoolean   aqErrores.Post; 
  Result := aqErroresCorregir.Value; end;
y sigue sucediendo lo mismo... Si por ejemplo el valor estaba en false, cuando hago aqErroresCORREGIR.Value := not aqErroresCORREGIR.Value pasa a true; pero al hacer el post, el valor vuelve a falso...

Que puede estar pasando?

olbeup 27-10-2011 09:00:30

Es posible que lo esté grabando, haz una prueba, cierra la DB y la abres de nuevo, comprueba el valor, si ha cambiado, tienes que refrescar el DBGrid, cerrando y abriendo de nuevo.

Un saludo.

Neftali [Germán.Estévez] 27-10-2011 11:34:26

Por los datos que das no parece tener lógica, el problema es que es difícil saber qué puede estar pasando.
Supongo que ninguno de los componentes implicados estará en sólo lectura y que no utilizas transacciones.

Si no puedes dar más datos, lo más sencillo ta vez sería que prepararas un pequeño proyecto con un único formulario y lo subieras.
¿Qué base de Datos utilizas? No lo comentas.

Otra cosa que se me ocurre es que estés utilizando una consulta SQL "no-actualizable" (por ejemplo si tiene JOIN's)
¿Puedes poner la consulta?

P.D: Bienvenido a los foros.

joni88 27-10-2011 14:32:02

La base de datos que utilizo es SQLServer 2008.
A demás, la consulta tiene JOINs; explico un poco más detallado el flujo del programa, creo una tabla temporal y la lleno con ciertos datos (estos datos salen de un archivo de texto, y los cargo en la tabla con la instrucción BULK INSERT), luego hago la consulta:

Código SQL [-]
SELECT
    CAST(0 AS BIT) AS CORREGIR, 
    SOCIO.cod_socio,
    SOCIO.nro_socio,
    SOCIO.nombre + ' ' + SOCIO.apellido AS [nombre],
    #ERRORES.NRO_DOCUMENTO,
    #ERRORES.COD_MOV, 
    #ERRORES.COD_ERROR,
    ERRORES_SUPER.CAMPO_VALIDACION,
    ERRORES_SUPER.DESCRIP_ERROR,
    ERRORES_SUPER.ACCION
FROM #ERRORES
    INNER JOIN TIPO_DTO ON TIPO_DTO.equiv_super = #ERRORES.TIPO_DOCUMENTO COLLATE Modern_Spanish_CI_AI
    INNER JOIN SOCIO ON SOCIO.nro_dto = #ERRORES.NRO_DOCUMENTO AND
                              SOCIO.cod_tipdoc = TIPO_DTO.cod_tipdoc
    INNER JOIN ERRORES_SUPER ON ERRORES_SUPER.CODIGO_ERROR = #ERRORES.COD_ERROR
GROUP BY
    SOCIO.cod_socio,
    SOCIO.nro_socio,
    SOCIO.nombre + ' ' + SOCIO.apellido,
    TIPO_DTO.des_tipdoc,
    #ERRORES.NRO_DOCUMENTO,
    #ERRORES.COD_MOV,
    #ERRORES.COD_ERROR,
    ERRORES_SUPER.CAMPO_VALIDACION,
    ERRORES_SUPER.DESCRIP_ERROR,
    ERRORES_SUPER.ACCION,
    #ERRORES.COD_MOV,
    SOCIO.nro_dto

CAST(0 AS BIT) AS [CORREGIR] es el campo que esta asociado a la columna tipo check de la grilla... yo no quiero actualizar nada en la base de datos, lo que quiero es que el usuario seleccione algunos registros de la grilla, para luego trabajar con ellos...
Otra cosa, la grilla es uns TdxDBGrid; de todas formas por lo que me comentan y por lo que probé no debe ser un problema de la grilla.
Con respecto a que los componentes esten en solo lectura, ninguno esta en esta condición... como expliqué en el mensaje anterior, me deja cambiar el valor en la grilla o en el AdoQuery, pero cuando cambio de registro o hago AdoQuery.Post vuelve al valor original.

Desde ya muchas gracias a ambos por las respuestas!!!!

Neftali [Germán.Estévez] 27-10-2011 15:40:35

El problema es que no puedes hacer un POST sobre esa consulta no-actualizable.
Cuando tú marcas el check del Grid, que está "ligado" esa consulta,, el intenta actualizar el campo con el nuevo valor y eso es lo que no puede hacer.

Hay que decir, que hasta que no haces el Post no estás cambiando el valor en ningún sitio. Sí que ves el cambio en el Grid, pero no es un cambio real, simplemente es temporal hasta que se hace el POst; Cuando haces el POst y no se puede cambiar, te lo devuelve al valor anterior.

Tal vez no te estoy entendiendo.

joni88 27-10-2011 16:16:05

Ok! Entonces mi duda ahora es si hay alguna forma de poder modificar esos datos que traigo en la consulta... teniendo en cuenta que esta actualización no tiene que ser a nivel de la base de datos; ya que lo único que necesito es que el usuario checkee en la grilla los registros que le interesan (en esta columna de tipo check que tiene asociada al campo que en la consulta viene: "CAST(0 AS BIT) AS CORREGIR"), para que después el programa pueda recorrer esos datos y ver cuales estan checkeados (mirando el campo aqErroresCORREGIR.Value)

Neftali [Germán.Estévez] 27-10-2011 16:45:14

Lo primero que se me ocurre es utilizar un TClientDataSet.
Otra opción (que es la misma idea) es utilizar una tabla temporal, o incluso algún componente de tablas en memoria (pero para este último mejor el TCllientDataset).

Si estás utilizando DevExpress, esos mismos componentes traen un MemDataSet (no recuerdo el nombre).

joni88 27-10-2011 17:43:05

Use un TClientDataSet y me funciona perfecto, permitiendome modificar los datos en memoria como quería!

Te agradezco muchísimo la ayuda!


La franja horaria es GMT +2. Ahora son las 02:19:58.

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