Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Firebird, DBX, CommandText (https://www.clubdelphi.com/foros/showthread.php?t=81780)

pablonill 17-12-2012 14:03:39

Firebird, DBX, CommandText
 
Hola como estan?, tengo el siguiente codigo.

Código Delphi [-]
  CL.TQuery.Close;
  CL.TQuery.CommandText := 'SELECT (SUM(CTA.DEBE)-SUM(CTA.HABER)) AS SALDO FROM TCTACTE CTA ' +
  'WHERE TIPO_OPERACION <> ''X'' AND ID_VENTA IN (SELECT ID_VENTA FROM TVENTA WHERE ID_CLIENTE = :ID_CLIENTE)';
  CL.TQuery.Params.ParamByName('ID_CLIENTE').AsInteger := CL.TLCtaCteID_CLIENTE.AsInteger;
  CL.TQuery.Open;

El tema es el siguiente, tengo dos clientes cargados uno con id_cliente = 1 y otro con id_cliente = 2, bueno el tema es que la consulta funciona perfecto para el primer caso, para el segundo, no funciona. Las pruebas que hice fue, agregar un break point para ver el valor que se pasa por parametro, y el valor es el correcto, puse un sqlmonitor para ver la consulta generada, y el valor es ? asi que no se que puede estar sucediendo. Alguien puede darme una idea de que puede estar sucediendo. Como les digo, con el primer caso o sea con el id_cliente = 1 anda perfecto. Gracias.

Casimiro Notevi 17-12-2012 15:29:39

Con los datos que das es imposible poder ayudarte, salvo alguien que le haya ocurrido exactamente lo mismo y recuerde qué era.

Delphius 17-12-2012 16:01:05

Cita:

Empezado por pablonill (Mensaje 451961)
Hola como estan?, tengo el siguiente codigo.
puse un sqlmonitor para ver la consulta generada, y el valor es ? asi que no se que puede estar sucediendo

Cuando uno arma una consulta y se la pasa al componente dataset tiene lugar un método llamado ParseSQL que lo que hace es determinar si hay parámetros. En caso de encontrarlos los reemplaza por ? e inmediatamente crea un TParam o TParamater (sólo lo usa ADO).
Es posible que en algún momento el componente no limpie bien los parámetros al momento de cerrar, o que a lo mejor en algún punto del programa estás liberando o cambiando algo en el parámetro sin darte cuenta antes (o al momento) de volver a ejecutar la consulta por segunda vez.

Sin más datos la tienes difícil. Por otro lado, ¿porqué CommandText? Hay otras formas de hacerlo.

Saludos,


La franja horaria es GMT +2. Ahora son las 13:05:49.

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