Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con monthcalendar y sql server (https://www.clubdelphi.com/foros/showthread.php?t=77657)

krewer 16-02-2012 11:20:59

Ayuda con monthcalendar y sql server
 
Hola amigos, tengo una gran duda, estoy intentando hacer que cuando seleccione una fecha en mi monthcalendar aparezcan los datos de esa fecha en una grilla, hasta el momento iba bien hasta que me di cuenta que no aparecian los datos, en la base de datos la fecha se guardo de esta manera 2012-02-16 y el monthcalendar la muestra asi 16-02-2012 supongo que ese es el problema, la fecha (que en la base de datos es datetime) la ingrese mediante getdate().

Espero su pronta ayuda para que me guien en este problema gracias.

Caro 16-02-2012 13:59:12

Hola krewer, tienes que darle formato a tu fecha en la consulta que haces, puedes utilizar FormatDateTime.

Código Delphi [-]
FormatDateTime('yyyy-mm-dd', MonthCalendar1.Date)

Saluditos

krewer 17-02-2012 03:53:51

Hola, gracias por el codigo, me ayudo mucho... ahora el drama es que me aparece el siguiente error:

Error 'Operand type clash: int is incompatible with date

Al menos yo creo que no he hecho nada malo, aqui dejo mi codigo

procedure Tfregistro1.fechaClick(Sender: TObject);
var sql:string;
var date:string;
begin

FormatDateTime('yyyy-mm-dd', fecha.Date);
sql:='select * from BITACORA where NICK='+quotedstr(Uvariables.nombre)+' and FECHA='+datetostr(fecha.Date)+'';
fdata.consulta5.Close;
fdata.consulta5.SQL.Clear;
fdata.consulta5.SQL.Add(sql);
fdata.consulta5.Open;
end;


Gracias

krewer 17-02-2012 08:42:10

Muchas gracias de todas maneras lo acabo de solucionar :D hasta la próxima.

ecfisa 17-02-2012 13:50:18

Hola krewer.

Me alegra mucho que hayas solucionado tu problema y estaría buenísimo que compartieras con nosotros la solución que encontraste.;)

Por favor, cuando incluyas código en tu mensaje usa las etiquetas para darle mayor legibilidad al mismo, su uso es:



Saludos y gracias por tu colaboración.:)

krewer 18-02-2012 04:04:35

Hola asi lo hice

Código Delphi [-]
FormatDateTime('YYYY/MM/DD', fecha.Date);
  sql:='select NICK,HORA,MENSAJE,ESTADO from BITACORA where nick='+quotedstr(date)+' and FECHA=:fecha order by hora desc';
  fdata.consulta5.Close;
  fdata.consulta5.SQL.Clear;
  fdata.consulta5.SQL.Add(sql);
  fdata.consulta5.ParamByName('fecha').AsDate:=fecha.Date;
  fdata.consulta5.Open;

krewer 22-02-2012 11:27:31

Lo mejore de esta manera

Código Delphi [-]
sql:='select NICK,HORA,MENSAJE,ESTADO from BITACORA where nick='+quotedstr(nombre)+' and FECHA='+quotedstr(FormatDateTime('YYYY/MM/DD', fecha.Date))+' order by hora desc';
fdata.consulta7.Close;
fdata.consulta7.SQL.Clear;
fdata.consulta7.SQL.Add(sql);
fdata.consulta7.Open;

Así no paso ningún dato por parámetro

ecfisa 22-02-2012 19:38:31

Hola krewer.

Primero que nada agradezco que hayas compartido tu solución. :)

Aunque el último código es mas compacto, es vulnerable a la inyección SQL. El uso de parámetros evita totalmente esa posibilidad.

Usándo parámetros:
Código Delphi [-]
  with fdata do
  begin
    Close;
    SQL.Clear;
    SQL.Add('select NICK, HORA, MENSAJE, ESTADO ');
    SQL.Add('from BITACORA ');
    SQL.Add('where nick = :PNOMBRE and FECHA = :PFECHA');
    ParamByName('PNOMBRE').AsString:= nombre;
    ParamByName('PFECHA').AsString:= FormatDateTime('YYYY/MM/DD', fecha.Date);
    Open;
  end;
Generámos un código un poco más extenso, pero mucho más seguro.

También hay que destacar que si el valor de 'nombre' es tomado internamente por la aplicación y no ingresado por el usuario, no hay posibilidad de inyección SQL. De todos modos, el uso de parámetros es una buena costumbre.

Un saludo.


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

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