Ir al contenido


Foto

Hacer consulta por una fecha con un datetimepicker o por un edit


  • Por favor identifícate para responder
6 respuestas en este tema

#1 rrosariom

rrosariom

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 26 julio 2012 - 09:02

Hola que tal a todos? espero que se encuentren muy bien.

Estoy tratando de hacer un consulta por fecha, utilizando adoquery con delphi 7 y Oracle Express 11g.

La consulta debe ser dinamica, utilizando los componentes datetimepicker o edit, dbgrid, adoquery.

He intentado varias formas y no logro traer los datos, espero que alguien me pueda ayudar. Gracias...

Las formas que he intentado son las siguientes:



delphi
  1. Datetimepicker1.Date:=now;
  2. ADOQuery1.Close;
  3. adoquery1.SQL.Text:= 'select * from perfiles where fecha_creacion = :fecha' ;
  4. ADOQuery1.Parameters.ParamByName('fecha').DataType := ftDate;
  5. ADOQuery1.Parameters.ParamByName('fecha').value := DateTimePicker1.Date;
  6. ADOQuery1.Open;





delphi
  1. frmperfil.ADOQuery1.SQL.Clear;
  2. frmperfil.ADOQuery1.Close;
  3. frmperfil.ADOQuery1.SQL.Text := 'SELECT * from perfiles where fecha_creacion like ' +
  4. QuotedStr('%' + Edit3.text + '%');
  5. frmperfil.ADOQuery1.Open;



  • 0

#2 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 27 julio 2012 - 07:40

El problema seguramente estará por los minutos y segundos que se generan en campos DATE en oracle...

Prueba de la siguiente manera:



delphi
  1. Datetimepicker1.Date:=now;
  2. ADOQuery1.Close;3.adoquery1.SQL.Text:=
  3.         'select * from perfiles where To_Char(fecha_creacion,''DD.MM.YYYY'') = :fecha';         
  4. ADOQuery1.Parameters.ParamByName('fecha').value :=  FormatDatetime('DD.MM.YYYY',DateTimePicker1.Date);
  5. ADOQuery1.Open;




A mi me ha sucedido muy a  menudo este problema en oracle con las fechas... Saludox
  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 27 julio 2012 - 07:42

Por cierto te recomiendo que aproveches Oracle al máximo usando procedimientos almacenados en lugar de consultas... Saludox
  • 0

#4 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 27 julio 2012 - 07:45

En Oracle debes usar la función TO_DATE(), y si en dado caso el campo contiene horas pues utilizas truncate().

Saludos.


  • 0

#5 rrosariom

rrosariom

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 01 agosto 2012 - 08:17

Buenos Día,

Gracias a todos por la ayuda, pero de la forma que me indicaron no pude resolver el problema. La forma en la que solucioné fue que hice dos triggers en la base de datos, uno que cambia el formato de fecha a nivel de base de datos, y otro a nivel de tabla como se muestra a continuación:

CREATE OR REPLACE TRIGGER ADMIN.CAMBIA_FORMATO_FECHA
AFTER LOGON
ON DATABASE
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYYMMDD''';
END cambia_formato_fecha;
/




CREATE OR REPLACE TRIGGER ADMIN."CAMBIA_FORM_FECHA_PERFILES" BEFORE INSERT
ON ADMIN.PERFILES
REFERENCING NEW AS NEW OLD AS OLD
BEGIN
EXECUTE IMMEDIATE 'ALTER SESSION SET NLS_DATE_FORMAT=''YYYYMMDD''';
END CAMBIA_FORM_FECHA;
/


y asi debo hacerlo para cada tabla.

Y el codigo delphi esta como sigue:



delphi
  1.   frmperfil.ADOQuery1.Close;
  2.   frmperfil.ADOQuery1.SQL.Clear;
  3.   frmperfil.ADOQuery1.SQL.Add ('SELECT * FROM perfiles');
  4.   frmperfil.ADOQuery1.sql.add('where fecha_creacion =' + QuotedStr(FormatDateTime('yyyymmdd',DateTimePicker1.Date) + ''));
  5.   frmperfil.ADOQuery1.Open;
  6.   if frmperfil.ADOQuery1.recordcount > 0 then
  7.     frmConsultaPerfil.showmodal
  8.   else
  9.     showmessage('No existen registros en la fecha especificada');



Haciéndolo asi, fue de la forma que pude solucionarlo y me funciona excelentemente.

  • 0

#6 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 01 agosto 2012 - 08:18

Gracias por compartirnos las solución...

Saludox
  • 0

#7 rrosariom

rrosariom

    Newbie

  • Miembros
  • Pip
  • 4 mensajes

Escrito 01 agosto 2012 - 03:16

Hola que tal,

Gracias a ti y a todos por este foro; pues de eso se trata que entre todos intercambiemos conocimiento y así poder lograr nuestros objetivos...

Un Saludo,
Rolando Del Rosario
  • 0




IP.Board spam blocked by CleanTalk.