Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-05-2019
river_1 river_1 is offline
Miembro
 
Registrado: may 2010
Posts: 55
Poder: 14
river_1 Va por buen camino
No funciona la consulta de la fecha

Buenas a todos, aqui con un problema con respecto a una query donde involucra un campo fecha.
Les explico:
Estoy ejecutando un query donde deseo traerme las facturas vencidas a cierto dia de corte, este dia esta en un DatetimeEdit.
El codigo para traer las facturas vencidas por ejemplo al dia de hoy 21 de Mayo si funciona aqui esta como lo tengo:

Código Delphi [-]
 consulta:='SELECT  admDocumentos.CIDDOCUMENTODE, admDocumentos.CSERIEDOCUMENTO,admDocumentos.CFOLIO, admDocumentos.CFECHA, admDocumentos.CRAZONSOCIAL, admDocumentos.CFECHAVENCIMIENTO, admDocumentos.CIDMONEDA, admDocumentos.CCANCELADO,'+
            ' admDocumentos.CTOTAL, admDocumentos.CPENDIENTE, admDocumentos.CIDCONCEPTODOCUMENTO,admDocumentos.CIDDOCUMENTOORIGEN,admDocumentos.CIDDOCUMENTO';
 consulta:=consulta+' FROM admDocumentos';
 Consulta:=Consulta +' WHERE     (admDocumentos.CIDCONCEPTODOCUMENTO = 21)';
 Consulta:=Consulta +' AND (';
 Consulta:=Consulta +' CCANCELADO=0';
 consulta:=consulta+')';
 Consulta:=Consulta +' and (CFECHAVENCIMIENTO>=';
 consulta:=consulta + FormatDateTime('YYYY-MM-DD',FechaIni.Date);
 consulta:=consulta+')';
 Consulta:=Consulta +' AND (';
 Consulta:=Consulta +' CPENDIENTE<>0';
 consulta:=consulta+')';
 Consulta:=Consulta +' AND (';
 Consulta:=Consulta +' admDocumentos.CIDMONEDA=1';
 consulta:=consulta+')';
todo muy bien ya que me trae todas las facturas vencidas hasta el dia de hoy. Por ejemplo tengo una factura que se vencio el 02-Mayo-19 y la trae.

Pero alli mismo deseo traerme las facturas que no se han vencido , es decir, la contraparte del codigo de arriba.
Por ejemplo tengo una factura que se vence el 25 de Mayo y no la trae se la brinca la consulta, va el codigo.
Código Delphi [-]
 consulta:='SELECT  admDocumentos.CIDDOCUMENTODE, admDocumentos.CSERIEDOCUMENTO,admDocumentos.CFOLIO, admDocumentos.CFECHA, admDocumentos.CRAZONSOCIAL, admDocumentos.CFECHAVENCIMIENTO, admDocumentos.CIDMONEDA, admDocumentos.CCANCELADO,'+
            ' admDocumentos.CTOTAL, admDocumentos.CPENDIENTE, admDocumentos.CIDCONCEPTODOCUMENTO,admDocumentos.CIDDOCUMENTOORIGEN,admDocumentos.CIDDOCUMENTO';
 consulta:=consulta+' FROM admDocumentos';
 Consulta:=Consulta +' WHERE     (admDocumentos.CIDCONCEPTODOCUMENTO = 21)';
 Consulta:=Consulta +' AND (';
 Consulta:=Consulta +' CCANCELADO=0';
 consulta:=consulta+')';
 Consulta:=Consulta +' and (admDocumentos.CFECHAVENCIMIENTO<';
 consulta:=consulta + FormatDateTime('YYYY-MM-DD',FechaIni.Date);
 consulta:=consulta+')';
 Consulta:=Consulta +' AND (';
 Consulta:=Consulta +' CPENDIENTE<>0';
 consulta:=consulta+')';
 Consulta:=Consulta +' AND (';
 Consulta:=Consulta +' admDocumentos.CIDMONEDA=1';
 consulta:=consulta+')';
El truco esta en el campo CFECHAVENCIMIENTO donde si arriba me funciona para las vencidas pues entonces invierto el sigo de "<".
Pero no funciona.
Alguna recomendacion??
Delphi 7 y BD SQL.
Gracias.
Responder Con Cita
  #2  
Antiguo 22-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿De qué tipo es el campo en la tabla de la base de datos?
Responder Con Cita
  #3  
Antiguo 22-05-2019
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
No uso Deplhi, pero es muy similar a Builder. ¿Por qué no usas parámetros en el query? Creo que sería más fácil y no tendrías que hacer conversiones sobre la marcha. En Builder yo construiría así el query:
Código SQL [-]
Query1->Close();
Query1->SQL->Text = "SELECT admDocumentos.CIDDOCUMENTODE, admDocumentos.CSERIEDOCUMENTO, admDocumentos.CFOLIO, admDocumentos.CFECHA,";
Query1->SQL->Add("admDocumentos.CRAZONSOCIAL, admDocumentos.CFECHAVENCIMIENTO, admDocumentos.CIDMONEDA, admDocumentos.CCANCELADO, admDocumentos.CTOTAL,");
Query1->SQL->Add("admDocumentos.CPENDIENTE, admDocumentos.CIDCONCEPTODOCUMENTO, admDocumentos.CIDDOCUMENTOORIGEN, admDocumentos.CIDDOCUMENTO");
Query1->SQL->Add("FROM admDocumentos");
Query1->SQL->Add("WHERE admDocumentos.CIDCONCEPTODOCUMENTO = 21");
Query1->SQL->Add("AND CCANCELADO = 0");
Query1->SQL->Add("AND admDocumentos.CFECHAVENCIMIENTO < :Fecha");
Query1->SQL->Add("AND CPENDIENTE <> 0");
Query1->SQL->Add("AND admDocumentos.CIDMONEDA = 1");
Query1->ParamByName("Fecha")->AsDateTime = FechaIni;
Query1->Open();
Imagino que la forma de hacerlo en Delphi será similar.
Responder Con Cita
  #4  
Antiguo 22-05-2019
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Como te indican usar parámetros, mas alla de la seguridad, simplifica la situación. Podrías hacerte una función que indique si deseas o no traer las factura vencidas, por ejemplo:
Código Delphi [-]
// Por defecto filtra la consulta por NO vencidas. "Vencidas" es False si se omite
procedure MakeQuery(Qy: TADOQuery; FechVenc: string; const Vencidas: Boolean = False);
begin
  Qy.Close;
  Qy.SQL.Clear;
  Qy.SQL.Add('SELECT ADM.CIDDOCUMENTODE, ADM.CSERIEDOCUMENTO,');
  Qy.SQL.Add('ADM.CFOLIO, ADM.CFECHA, ADM.CRAZONSOCIAL, ADM.CFECHAVENCIMIENTO,');
  Qy.SQL.Add('ADM.CIDMONEDA, ADM.CCANCELADO, ADM.CTOTAL, ADM.CPENDIENTE,');
  Qy.SQL.Add('ADM.CIDCONCEPTODOCUMENTO, ADM.CIDDOCUMENTOORIGEN, ADM.CIDDOCUMENTO');
  Qy.SQL.Add('FROM ADMDOCUMENTOS ADM');
  Qy.SQL.Add('WHERE (ADM.CIDCONCEPTODOCUMENTO = 21) AND (CCANCELADO = 0)');
  Qy.SQL.Add('AND (CPENDIENTE <> 0) AND (ADM.CIDMONEDA = 1)');
  if Vencidas then
    Qy.SQL.Add('AND (CFECHAVENCIMIENTO < :FVENC)')
  else
    Qy.SQL.Add('AND (CFECHAVENCIMIENTO >= :FVENC)');
  Qy.Parameters.ParamByName('FVENC').Value := FechVenc;
  Qy.Open;
end;

// Ejemplo del uso
procedure TForm1.Button1Click(Sender: TObject);
begin
  MakeQuery(ADOQuery1, DateToStr(DateTimePicker1.Date), CheckBox1.Checked);
end;
Aunque no especificaste que gestor de base de datos y componentes usas, fijándome en tus mensajes anteriores y ví que usaste ADO alguna vez.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
No funciona consulta agrupada MartinS Firebird e Interbase 2 26-01-2012 16:50:53
Consulta sql solo funciona una vez webmasterplc SQL 2 16-02-2011 17:40:41
Esta consulta no me funciona brandolin Firebird e Interbase 1 12-02-2007 18:29:08
Cambio de Formato de Fecha no funciona DJ VMan Varios 1 01-08-2003 13:28:27
Consulta Interbase con CGI No Funciona ASAPLTDA Internet 2 27-06-2003 00:15:42


La franja horaria es GMT +2. Ahora son las 17:14:59.


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