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 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Problema con consulta (Extraño)

Hola a todos y gracias de antemano por su ayuda.
Tengo esta consulta:

Código Delphi [-]
procedure TFReporteDiario.DTP1Change(Sender: TObject);
begin
  ShortDateFormat := 'dd/mm/yyyy';
  ADOQuery1.Active:= False;
  ADOQuery1.SQL.Text:= 'SELECT DISTINCTROW Factura.Fecha, Factura.Terminos, Sum(Factura.MntTotal) AS SumaDeMntTotal '+
  ' FROM Factura '+
  ' WHERE Factura.Fecha = #'+DateToStr(DTP1.DateTime)+'# AND Factura.Terminos = "Contado" '+
  ' GROUP BY Factura.Fecha, Factura.Terminos ';
  ADOQuery1.Active:= True;

  ADOQuery2.Active:= False;
  ADOQuery2.SQL.Text:= 'SELECT DISTINCTROW Factura.Fecha, Factura.Terminos, Sum(Factura.MntTotal) AS SumaDeMntTotal '+
  ' FROM Factura '+
  ' WHERE Factura.Fecha = #'+DateToStr(DTP1.DateTime)+'# AND Factura.Terminos = "Credito" '+
  ' GROUP BY Factura.Fecha, Factura.Terminos ';
  ADOQuery2.Active:= True;

  ADOQuery3.Active:= False;
  ADOQuery3.SQL.Text:= 'SELECT DISTINCTROW PagosAdelanto.FechaTransac, Sum(PagosAdelanto.MontoCompra) AS [Suma De MontoCompra], Sum(PagosAdelanto.Abono) AS [Suma De Abono] '+
  ' FROM PagosAdelanto'+
  ' WHERE PagosAdelanto.FechaTransac = #'+DateToStr(DTP1.DateTime)+'#'+
  ' GROUP BY PagosAdelanto.FechaTransac ';
  ADOQuery3.Active:= True;

  ADOQuery4.Active:= False;
  ADOQuery4.SQL.Text:= 'SELECT DISTINCTROW BancoNac.FechaTransac, Sum(BancoNac.Retiros) AS [Suma De Retiros], Sum(BancoNac.Depositos) AS [Suma De Depositos] '+
  ' FROM BancoNac'+
  ' WHERE BancoNac.FechaTransac = #'+DateToStr(DTP1.DateTime)+'#'+
  ' GROUP BY BancoNac.FechaTransac ';
  ADOQuery4.Active:= True;

  ADOQuery5.Active:= False;
  ADOQuery5.SQL.Text:= 'SELECT DISTINCTROW BancoSanJoseco.FechaTransac, Sum(BancoSanJoseco.Retiros) AS [Suma De Retiros], Sum(BancoSanJoseco.Depositos) AS [Suma De Depositos] '+
  'FROM BancoSanJoseco'+
  ' WHERE BancoSanJoseco.FechaTransac = #'+DateToStr(DTP1.DateTime)+'#'+
  ' GROUP BY BancoSanJoseco.FechaTransac ';
  ADOQuery5.Active:= True;

  ADOQuery6.Active:= False;
  ADOQuery6.SQL.Text:= 'SELECT DISTINCTROW BancoSanJosedol.FechaTransac, Sum(BancoSanJosedol.Retiros) AS [Suma De Retiros], Sum(BancoSanJosedol.Depositos) AS [Suma De Depositos] '+
  ' FROM BancoSanJosedol'+
  ' WHERE BancoSanJosedol.FechaTransac = #'+DateToStr(DTP1.DateTime)+'#'+
  ' GROUP BY BancoSanJosedol.FechaTransac ';
  ADOQuery6.Active:= True;

  ADOQuery7.Active:= False;
  ADOQuery7.SQL.Text:= 'SELECT DISTINCTROW CxPDetalle.FechaPago, CxPDetalle.TipoTransac, Sum(CxPDetalle.Monto) AS [Suma De Monto] '+
  ' FROM CxPDetalle'+
  ' WHERE CxPDetalle.FechaPago = #'+DateToStr(DTP1.DateTime)+'# AND CxPDetalle.TipoTransac ="PA" '+
  ' GROUP BY CxPDetalle.FechaPago, CxPDetalle.TipoTransac';
  ADOQuery7.Active:= True;

  ADOQuery8.Active:= False;
  ADOQuery8.SQL.Text:= 'SELECT DISTINCTROW CxCDetalle.FechaCobro, CxCDetalle.TipoTransac, Sum(CxCDetalle.Monto) AS [Suma De Monto] '+
  ' FROM CxCDetalle'+
  ' WHERE CxCDetalle.FechaCobro = #'+DateToStr(DTP1.DateTime)+'# AND CxCDetalle.TipoTransac ="PA" '+
  ' GROUP BY CxCDetalle.FechaCobro, CxCDetalle.TipoTransac';
  ADOQuery8.Active:= True;
end;



Lo extraño es que funciona y da bien los datos en algunas fechas en otras los datos los da incompletos, he revisado las tablas y los datos estan y correctos.
Por que sera que funciona a veces.?
Gracias por su ayuda.

Edito: No hay forma que me quede bien presentado con las etiquetas delphi.
Saludos

Última edición por roman fecha: 02-03-2007 a las 21:15:58. Razón: Corregir la etiqueta [delphi]
Responder Con Cita
  #2  
Antiguo 02-03-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
¿de que base de datos estamos hablando?

Yo te podría recomendar dos cosas:

1. Dale nombre a tus componentes, es más fácil saber que qryBancos es la consulta de bancos y es más dificil recordar para que srive ADOQuery7.

2. En lugar de utilizar SQL.Text yo te recomendaría utilizar SQL.Add(''). Esto porque al utilizar .Text toda tu consulta se presentará en una sola línea, a diferencia de utilizar .Add() en donde la consulta se presenta según el número de líneas que utilizes. Esto tiene su principal ventaja en que si tienes algún error en tu consulta, la excepción te regresará el número de línea donde tienes el error. En cambio si utilizas .Text la excepción siempre te dirá que el error esta en la línea 1.
__________________

Responder Con Cita
  #3  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Gracias ContraVeneno
La base de datos es access.
Tienes razon con lo de los nombres, casi siempre lo hago, solo cuando tengo prisa,no.
Curioso:
Cuando hago la consulta con add, me manda un error se sintaxis, en text, no.
Lo curioso es que funciona bien con todas las fechas que no sean hoy ni aller, osea da correcta la consulta en fechas menores del dia 28/02/2007, mayores a esta no.
Seguro no quiere trabajar mas, se canso.
Saludos
Responder Con Cita
  #4  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Yo no entiendo, dices, "tengo esta consulta", pero en realidad ¡tienes ocho! ¿Fallan todas? ¿No podríamos concentrarnos en una sóla?

// Saludos
Responder Con Cita
  #5  
Antiguo 02-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Nunca en mi vida he trabajado con Acces pero quizá sea porque el formato de la fecha debe ser mm/dd/yyyy, si fuese eso tendrías que hacer:

Código Delphi [-]
FormatDate('mm/dd/yyyy', DTP1.DateTime);

en lugar de

Código Delphi [-]
 
DateToStr(DTP1.DateTime);

Cita:
Empezado por roman
Yo no entiendo, dices, "tengo esta consulta", pero en realidad ¡tienes ocho!
jejeje, lo mismo se me paso por la cabeza cuando comence a leer jejeje
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #6  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Lo de la fecha lo está solventando con:

Código Delphi [-]
ShortDateFormat := 'dd/mm/yyyy';

De cualquier forma, es cierto que lo mejor es usar parámetros en lugar de pasar la fecha mezclada con la consulta.

// Saludos
Responder Con Cita
  #7  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Gracias Roman y jhonny
Son varias consultas pero si la fecha es menor que 01/03/2007, funciona bien.
Lo que me extraña es eso, por que en alguna fechas si y en otras no.
La base de datos esta actualizada y contiene la informacion.
Saludos
Responder Con Cita
  #8  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Ok, pero, vuelvo a preguntar, ¿fallan todas las consultas?

// Saludos
Responder Con Cita
  #9  
Antiguo 02-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Cita:
Empezado por roman
Lo de la fecha lo está solventando
Tienes razon...

En cuanto al problema, ¿Estas totalmente seguro de que estas conectado a la BD que tiene los datos reales y actualizados?
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #10  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Exacto Roman, fallan todas, si la fecha es menor a hoy.
De lo contrario todas funciona bien.
Saludos
Responder Con Cita
  #11  
Antiguo 02-03-2007
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 27
delphi.com.ar Va por buen camino
Cita:
Empezado por roman
Yo no entiendo, dices, "tengo esta consulta", pero en realidad ¡tienes ocho! ¿Fallan todas? ¿No podríamos concentrarnos en una sóla?
Por eso mismo me abstuve de responder..

Hay algo a tener en cuenta, en Access es algo riesgoso trabajar con fechas con el formato #fecha#, porque Access se encarga de convertir el formato automáticamente, y para el motor: #1/31/2007# = #31/1/2007# porque se encarga automáticamente de convalidar el formato. Prueba:
Código SQL [-]
SELECT #1/31/2007#, #31/1/2007#
Entonces si trabajamos con ese formato, no será seguro que hará con fechas donde el día sea menor a 12. (Esto lo resuelve según la configuración regional)

Entonces las opciones mas seguras son utilizar bind parameters, o utilizar alguna función como DateSerial, donde el orden de los parámetros no cambia:
Código SQL [-]
SELECT ..
WHERE FECHA = DateSerial(2007,1,31)

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #12  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Correcto jhonny
La con la fecha lo soluciono como dice Roman.
Los datos estan actualizados y me conecto bien.
El problema esta en que no quiere trabajar mas osea hoy, sera por que es viernes y hace calor y necesito una cerveza y salir del trabajo.
Saludos
Responder Con Cita
  #13  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¡Válgame! ¿Hay algo en lo que access sea estándar? Tiene total lógica lo que dices, el 1 de marzo daría problemas y no así el 28 de febrero. Ahora pregunto, si pasas las fechas con parámetros, ¿si funciona?

// Saludos
Responder Con Cita
  #14  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
No se Roman, Como lo hago?
Me das un ejemplo en un caso.
Por otro lado, cambie la sintaxis y sigue, asi:
Código Delphi [-]
ShortDateFormat := '#dd/mm/yyyy#';
   ADOQuery1.Active:= False;
   ADOQuery1.SQL.Text:= 'SELECT DISTINCTROW Factura.Fecha, Factura.Terminos, Sum(Factura.MntTotal) AS SumaDeMntTotal '+
                        ' FROM Factura '+
                        ' WHERE Factura.Fecha = '+DateToStr(DTP1.DateTime)+' AND Factura.Terminos = "Contado" '+
                        ' GROUP BY Factura.Fecha, Factura.Terminos ';
    ADOQuery1.Active:= True;
Saludos
Responder Con Cita
  #15  
Antiguo 02-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Caramba¡¡¡, ya recuerdo porque acces nunca me a llamado la atención.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #16  
Antiguo 02-03-2007
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 30
jhonny Va camino a la famajhonny Va camino a la fama
Supongo que deberia ser algo como:

Código Delphi [-]
   ShortDateFormat := 'dd/mm/yyyy';
   ADOQuery1.Active:= False;
   ADOQuery1.SQL.Clear;   
   ADOQuery1.SQL.Add := 'SELECT DISTINCTROW Factura.Fecha, Factura.Terminos,';
   ADOQuery1.SQL.Add := 'Sum(Factura.MntTotal) AS SumaDeMntTotal ';
   ADOQuery1.SQL.Add := 'FROM Factura ';
   ADOQuery1.SQL.Add := 'WHERE Factura.Fecha = :fecha AND Factura.Terminos = "Contado" ';
   ADOQuery1.SQL.Add := 'GROUP BY Factura.Fecha, Factura.Terminos ';
   ADOQuery1.ParamByName('fecha').AsDateTime := DateTimePicker1.Date; //Donde DateTimePicker1. 
                                                      //es un ejemplo de un componente que asumo se llame asi
   ADOQuery1.Active:= True;

Edite: para organizar un poco a ver si se ve mejor.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/

Última edición por jhonny fecha: 02-03-2007 a las 22:22:29.
Responder Con Cita
  #17  
Antiguo 02-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
No, no. Pensé lo mismo. Pero ADO maneja distinto los parámetros. Deja reviso.

// Saludos
Responder Con Cita
  #18  
Antiguo 02-03-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

Solo cambiar y agregar algo:
Código Delphi [-]
ADOQuery1.Parameter.ParamByName('fecha').value := DateTimePicker1.Date; //Donde DateTimePicker1. 
ADOQuery1.Parameter.ParamByName('fecha').DataType:=ftDate
Ado muchas veces no convierte el parametro al tipo de dato que deberia ser.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!

Última edición por vtdeleon fecha: 02-03-2007 a las 22:45:09.
Responder Con Cita
  #19  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Asi:
Código Delphi [-]
ShortDateFormat := 'dd/mm/yyyy';
   ADOQuery1.Active:= False;
   ADOQuery1.SQL.Text:= 'SELECT DISTINCTROW Factura.Fecha, Factura.Terminos, Sum(Factura.MntTotal) AS SumaDeMntTotal '+
                        ' FROM Factura '+
                        ' WHERE Factura.Fecha = :Fecha AND Factura.Terminos = "Contado" '+
                        ' GROUP BY Factura.Fecha, Factura.Terminos ';
    ADOQuery1.Active:= True;
    ADOQuery1.Parameters[0].Value:= StrToDate(DateToStr(DTP1.Date));
Me funciono en este primero.
Curioso me ve el dia 2, no el dia 1
Saludos
Responder Con Cita
  #20  
Antiguo 02-03-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Tanto la opcion de jhonny como la de vtdeleon funcionan solo hay que cambiar una pequeña cosa, aun asi sigue con el problema, no ve el 1,
ve el 2, y del 28 para atras, es extraño.
saludos
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
problema extraño con ciclo for Johnny Q OOP 4 18-11-2006 21:27:46
Problema extraño con showmodal =S Ken_Masters Varios 3 15-11-2006 01:57:11
Problema extraño en FireBird Sick boy Firebird e Interbase 4 20-10-2006 12:39:54
Problema extraño con imagen en PDF (Rave) RaulRuiz Impresión 0 12-05-2006 21:20:53
Extraño problema con Quick Report cone220 Impresión 3 13-05-2004 16:29:11


La franja horaria es GMT +2. Ahora son las 00:41:01.


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