Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   LoadFromFile (https://www.clubdelphi.com/foros/showthread.php?t=96774)

Eduard23 05-07-2024 18:26:06

LoadFromFile
 
Buenas amigos del foro necesitando de su valiosa ayuda.
tengo una aplicacion contable con sus informes funcionando perfectamente, el tema es que quiero pasar los informes que los tengo programados directamente en el codigo delphi a un archivo txt. Uso MySql.

Archivo Txt

Código SQL [-]
Select Codigo,Nombre,Nivel,Length(Trim(NxCtacon.Codigo)) as Longitud,Detalle,
Sum(If(NxRenCon.Fecha_Asi Between :cFechad and :cFechah,NxRenCon.Debe,0)) as Debe,
Sum(If(NxRenCon.Fecha_Asi Between :cFechad and :cFechah,NxRenCon.Haber,0)) as Haber
From NxCtaCon Left Join NxRenCon On NxCtaCon.Codigo=NxRenCon.Codmov
Where Debe-Haber<>0 and Nxctacon.Detalle="S" and NxCtacon.Nivel<=:Niv
Group By NxCtaCon.Codigo Order By NxCtaCon.Codigo

codigo que esta en la fuente para ejecutar el txt

Código Delphi [-]
With QryLibroDiario do
  Begin
   Sql.Clear;
   Sql.LoadFromFile(Path);
   QryLibroDiario.Parameters.ParamByName('cFechad').Value := cFechad;
   QryLibroDiario.Parameters.ParamByName('cFechah').Value := cFechah;
   QryLibroDiario.Parameters.ParamByName('Niv').Value := Niv;
   Open;
  End;

la variable path contiene la ruta y el nombre del archivo txt que coloque arriba.
cFechad: contiene la fecha desde donde quiro la consulta asi vienen los valores por ejemplo 2024-06-01
cFechah: contiene la fecha hasta donde quiero la consulta. 2024-06-30
niv : contiene el nivel maximo a mostrar. 6
los tres parametros son caracter.

ahora les explico cual es el problema.

en la tabla hay tanto valores para la columna del debe como la del haber, el detalle esta que cuando ejecuto la consulta incluida en el txt la columna del debe trae los valores correctos, pero la del haber solo trae Cero.

esto me trae de cabezas ya no se que hacer porque si se fijan en el txt las dos colun=mnas las trato de la misma forma

agradeciendo de su valioza ayuda

delphi.com.ar 05-07-2024 18:41:18

Yo probaría hacer una consulta mas simple para ver si no te están mareando los datos, algo como:
Código SQL [-]
      SELECT NxCtaCon.Codigo, SUM(NxRenCon.Debe) as Debe, SUM(NxRenCon.Fecha_Asi) as Haber
        FROM NxCtaCon 
   LEFT JOIN NxRenCon ON NxCtaCon.Codigo=NxRenCon.Codmov AND NxRenCon.Fecha_Asi Between :cFechad and :cFechah
       WHERE Debe-Haber <> 0 
         AND Nxctacon.Detalle = "S" 
         AND NxCtacon.Nivel <= :Niv
    GROUP BY NxCtaCon.Codigo 
    ORDER BY NxCtaCon.Codigo
Si eso te da en cero, entonces la consulta anteiror es correcta, y posiblemente alguno de los filtros te está limitando los registros con datos en el haber.

Ojo que estas incluyendo campos que no pertenecen al grupo, eso no fuciona en todos los motores ni en todas las versiones de MySql.

PD: ¿Qué tiene que ver el título "LoadFromFile"?

Eduard23 05-07-2024 20:32:46

gracias Federico Firenze por tu rapida respuesta pero ya consegui el problema mas no la solucion un gran amigo me ayudo con una rutina y con esto detecte el problema.
te cuento. que la rutina que mi amigo manel me envio es para saber el nombre del parametro que envio a la consulta y su valor.
funciona muy bien pero en la segunda vuelta me da el nombre del parametro bien pero al tratar de dame el valor del segundomparametro veo que se hace null y no entendo porque.

voy a tratar de explicarme mejor

For i := 0 to QryLibroDiario.Parameters.Count-1 do
ShowMessage('Parametro: '+QryLibroDiario.Parameters[i].Name+' Valor: '+QryLibroDiario.Parameters[i].Value);

esta rutina va diciendo el nombre del parametro y su valor, en elgun monento de la ejecucion el valor del primer parametro es decir
cFechad camvbia a null, lo cual no se porque ocurre porque el valor de ,los parametros no debe cambiar

le puse como titulo LoadFromFlile porque esto me funciona perfeectamente cuando lo hago en la programacion de delphi pero cuando intento hacerlo funckonar desde el txt me pasa este error

Saudos y sigo a la espera de una posible solucion

delphi.com.ar 05-07-2024 20:51:53

Según tu propio código la estas asignando al ejecutar la consulta
Cita:

Código Delphi [-]
With QryLibroDiario do
  Begin
   Sql.Clear;
   Sql.LoadFromFile(Path);
   QryLibroDiario.Parameters.ParamByName('cFechad').Value := cFechad;
   QryLibroDiario.Parameters.ParamByName('cFechah').Value := cFechah;
   QryLibroDiario.Parameters.ParamByName('Niv').Value := Niv;
   Open;
  End;


Si es null, es proque la variable llegó en null, y el problema está en el código previo a eso, no en la consulta.

PD: No se ve en el código que el Sql que cargaste desde el archivo, se asigne a QryLibroDiario.

Saludos.

Casimiro Notevi 05-07-2024 20:59:27

Por favor, para otras ocasiones procura poner títulos descriptivos a tus preguntas. Gracias.

Eduard23 05-07-2024 21:38:35

No se si es esto Federico Firenze

Fd := DatetoStr(Primer); Primer dia de mes 01/06/2024
Fh := DatetoStr(Ultimo); Ultimo dia Del mes 30/06/2024
Niv:= 6 en este caso
cFechad := Copy(Fd,7,4)+'-'+Copy(Fd,4,2)+'-'+Copy(Fd,1,2); con esto quedaria asi 2024-06-01
cFechah := Copy(Fh,7,4)+'-'+Copy(Fh,4,2)+'-'+Copy(Fh,1,2); 2024-06-30

Me imagino debe haber algo mas elegante pero tengo poco tiempo en el mundo del delphi

Casimiro Notevi 06-07-2024 10:49:41

Por favor, recuerda usar las etiquetas cuando pongas código. Gracias.



Eduard23 07-07-2024 20:14:57

Cita:

Empezado por Casimiro Notevi (Mensaje 556594)
Por favor, recuerda usar las etiquetas cuando pongas código. Gracias.



disculpen asi lo hare

delphi.com.ar 07-07-2024 20:48:10

Cita:

Empezado por Eduard23 (Mensaje 556588)
No se si es esto Federico Firenze

Fd := DatetoStr(Primer); Primer dia de mes 01/06/2024
Fh := DatetoStr(Ultimo); Ultimo dia Del mes 30/06/2024
Niv:= 6 en este caso
cFechad := Copy(Fd,7,4)+'-'+Copy(Fd,4,2)+'-'+Copy(Fd,1,2); con esto quedaria asi 2024-06-01
cFechah := Copy(Fh,7,4)+'-'+Copy(Fh,4,2)+'-'+Copy(Fh,1,2); 2024-06-30

Me imagino debe haber algo mas elegante pero tengo poco tiempo en el mundo del delphi

No te conviene hacer eso, no tiene sentido parsear la fecha, cuando es mucho mas performante e independiente de problemas de regionalización, que envíes la fecha como fecha, o sea que envíes la variable Pimero y Último.

Eduard23 07-07-2024 21:20:30

Muchas Gracias Federico Firenze , Seguire tu consejo

Eduard23 07-07-2024 22:15:08

Código SQL [-]
 With QryLibroDiario do
  Begin
   Sql.Clear;
   Sql.LoadFromFile(Path);
   QryLibroDiario.Parameters.ParamByName('Primer').Value := Primer;
   QryLibroDiario.Parameters.ParamByName('Ultimo').Value := Ultimo;
   QryLibroDiario.Parameters.ParamByName('cNiv').Value := cNiv;
   Open;
  End;

Cita:

Lo Puse segun tu sugerencia pero ahora primero y ultimo me toman valores enteros, convierte las fecha que le envio en valores enteros ???

aledieb 07-07-2024 23:33:11

Hola proba con:
Código Delphi [-]
   QryLibroDiario.Parameters.ParamByName('Primer').AsDate := Primer;  //Tipo variable TDate
   QryLibroDiario.Parameters.ParamByName('Ultimo').AsDate := Ultimo;  //Tipo variable TDate


La franja horaria es GMT +2. Ahora son las 13:08:02.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi