Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-10-2011
joni88 joni88 is offline
Registrado
NULL
 
Registrado: oct 2011
Posts: 7
Poder: 0
joni88 Va por buen camino
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?

Última edición por marcoszorrilla fecha: 26-10-2011 a las 17:43:57.
Responder Con Cita
  #2  
Antiguo 27-10-2011
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 19
olbeup Va camino a la fama
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.
Responder Con Cita
  #3  
Antiguo 27-10-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 27-10-2011
joni88 joni88 is offline
Registrado
NULL
 
Registrado: oct 2011
Posts: 7
Poder: 0
joni88 Va por buen camino
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!!!!
Responder Con Cita
  #5  
Antiguo 27-10-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 27-10-2011
joni88 joni88 is offline
Registrado
NULL
 
Registrado: oct 2011
Posts: 7
Poder: 0
joni88 Va por buen camino
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)
Responder Con Cita
  #7  
Antiguo 27-10-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.285
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 27-10-2011
joni88 joni88 is offline
Registrado
NULL
 
Registrado: oct 2011
Posts: 7
Poder: 0
joni88 Va por buen camino
Use un TClientDataSet y me funciona perfecto, permitiendome modificar los datos en memoria como quería!

Te agradezco muchísimo la ayuda!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Maximizar correctamente piccolo2101 Varios 4 22-03-2014 13:35:59
No se imprime correctamente un doc PDF xio Impresión 1 07-02-2008 17:38:38
zquery hace un auto-post (el muy cabron) source_code Conexión con bases de datos 9 07-03-2007 21:32:29
El Adoquery No Me Hace Una Subconsulta chetos7 SQL 1 15-01-2007 23:45:08
IBDatase Insert Post Edit Post ariefez Firebird e Interbase 4 12-10-2005 01:53:04


La franja horaria es GMT +2. Ahora son las 11:06:15.


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
Copyright 1996-2007 Club Delphi