Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Necesito ayuda con consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=10422)

Vicsan 19-05-2004 11:41:45

Necesito ayuda con consulta SQL
 
Hola a todos, tengo que hacer una consulta SQL y me da un error en tiempo de ejecucion, el error es:

Capability not supported

y el codigo el siguiente:

procedure TfmBuscarCita.BtBuscarClick(Sender: TObject);
begin
with SBuscarCitas do begin
Close;
with SQL do begin
Clear;
Add('SELECT c.fecha as Fecha,c.hora as Hora,u.nombre as Fisioterapeuta ,c.nombre as Paciente');
Add('FROM "Citas.db" c, "usuarios.db" u');
Add(' WHERE fecha >= "'+ DateToStr(DTPInicio.date)+'" AND strtodate(fecha) <="'+DateToStr(DTPFin.Date)+'"');
Add(' AND "'+EditId_Usuario.text+'"=id_Usuario');
if(editNombrePaciente.Text<>'*') then Add(' AND Nombre = "'+editNombrePaciente.Text+'"');
Add(' AND c.id_Usuario=u.Id_Usuario');
Add(' ORDER BY c.fecha,c.hora');
end;//SQL
ExecSQL;
Open;
end;//Query
end;

El problema me lo da al añadir la linea subrayada. Creo q es por culpa de los formatos de la fecha, pero no lo se fijo. El formato tanto de fecha (que es un campo de la BD) como del del DTPInicio.date y DTPFin.date (son datetimepicker) es de tipo datetime.
Muchas gracias por vuestra ayuda.

__cadetill 19-05-2004 12:41:53

Hola Vicsan

Ante todo darte la bienvenida a los foros y recomendarte la lectura de la Guía de Estilo (ver firma o enlace en la parte superior de la página) y la utilización de las etiquetas (ver primer mensaje de cualquier foro)

Una vez dada la bienvenida, vamos al tema

Puedes solucionar tu problema de varias maneras. Una de ellas es usando parámetros en la consulta

Código Delphi [-]
  Clear;
  Add('SELECT c.fecha as Fecha,c.hora as Hora,u.nombre as Fisioterapeuta ,c.nombre as Paciente');
  Add('FROM "Citas.db" c, "usuarios.db" u');
  Add(' WHERE fecha between :FIni AND :FFin ');
  Add(' AND id_Usuario = :user');
  if (editNombrePaciente.Text<>'*') then 
    Add(' AND Nombre = :Paciente ');
  Add(' AND c.id_Usuario = u.Id_Usuario');
  Add(' ORDER BY c.fecha,c.hora');
end;//SQL

ParamByName('FIni').AsDateTime := DTPInicio.date;
ParamByName('FFin').AsDateTime := DTPFin.date;
ParamByName('User').AsString := EditId_Usuario.text;
ParamByName('Paciente').AsString := editNombrePaciente.Text;

O bien dándole el formato que necesita usando la función FormatDateTime

Código Delphi [-]
Add(' WHERE fecha between '+ QuotedStr(FormatDateTime('mm/dd/yyyy', DTPInicio.date)) + 
   ' AND '+ QuotedStr(FormatDateTime('mm/dd/yyyy', DateToStr(DTPFin.Date)) );

Espero te sirva

PD: ves la diferencia entre usar las etiquetas y no usarlas? ;)

Vicsan 19-05-2004 17:11:33

Muchas Gracias, me leere lo de la Guia de estilo. La verdad es q no sabia nada. Ciao.


La franja horaria es GMT +2. Ahora son las 11:14:50.

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