Delphi - Consulta SQL

 
Vista:

Consulta SQL

Publicado por Victor (4 intervenciones) el 12/05/2004 19:36:49
Hola a todos, necesito hacer una consulta SQL pero al ejecutar me da una excepcion, creo q es por culpa de la linea en donde tengo puesta la fecha y la hora que no son los tipos compatibles de la base de datos con los del delphi, el codigo es 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(' WHERE "'+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');

//if(editHoraInicio.Text<>'*') then Add(' AND Hora >= "'+editHoraInicio.Text+'"');
//if(editHoraFin.Text<>'*') then Add(' AND Hora <= "'+StrToTime(editHoraFin.Text)+'"');

end;//SQL
ExecSQL;
Open;
end;//Query
end;

El codigo comentado es el que me da el error al ejecutar. Si lo ejecuto tal como está ahora funciona bien. Que puedo hacer? Muchas gracias por todo.

VICTOR
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Consulta SQL

Publicado por Victor (4 intervenciones) el 12/05/2004 19:40:17
Se me olvido comentaros una cosa, en la base de datos, las fechas son de tipo fecha y la hora de tipo hora.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta SQL

Publicado por jack (8 intervenciones) el 12/05/2004 19:51:02
Con respecto al código que anexastes y que está comentado tengo una observación, en el caso de la validación del editHoraInicio, al momento de agredar la sentencia SQL no haces un StrtoTime, mientras que con el edit HoraFin si haces esta conversion... no se si en algún otro lugar estas haciendo la conversion... la excepcion que te esta creando puede ser precisamente por el cambio de formato Time que estes manejando

Cuando tengas validado que los datos contenidos en los edits son correctos, te recomiento que en lugar de usar los operadores <= y >= utilizes la sentencia SQL BETWEEN, pues con el manejo de fechas me ha resultado mas conveniente. Espero que te sirva de algo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Consulta SQL

Publicado por Virum (484 intervenciones) el 13/05/2004 17:03:18
Hola:

No indicas que tipo de tabla es ni que componentes usas. Puede ser que por el tipo de tabla o componentes necesites cambiar el formato de la fecha a MM DD AAAA (mes dia año). Prueba a ver.

Suerte. Virum.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

¡Cómo se complican la vida !!

Publicado por Ing Francisco Arena (140 intervenciones) el 13/05/2004 23:16:54
No utilices DateToStr, usa PARAMETROS.

Ahi te va un ejemplo:

Armas la consulta SQL, por ej:

SELECT * FROM Clientes WHERE fec_nac>= :FEC_INICIO AND
fec_nac <= :FEC_FIN

Los parametros se insertan en la consulta como variables precedidas de dos puntos (:)

Luego en el código fuente (en Delphi), antes de abrir o ejecutar la consulta, se asignan los valores a los parametros (tambien se puede hacer en tiempo de diseño).

...
Query1.Close;
Query1.ParamByName('FEC_INICIO').AsString:= Edit1.Text;
Query1.ParamByName('FEC_FIN').AsString:= Edit2.Text;
Query1.Open;
...

No hagas trabajo que Delphi puede realizar internamente por vos.
Las consultas de seleccion (SELECT) se abren, no se ejecutan.
Las consultas de acción (UPDATE, DELETE, INSERT, etc) se ejecutan, no se abren.

Para capturar las fechas podrías usar un DateTimePicker que está en la solapa WIn32 (si no recuerdo mal) o Additional. Te recomiendo que lo uses para capturar fechas.
En este caso el código anterior quedaría asi:

...
Query1.Close;
Query1.ParamByName('FEC_INICIO').AsDateTime := DateTimePicker1.Date;
Query1.ParamByName('FEC_FIN').AsDateTime:= DateTimePicker2.Date;
Query1.Open;
...

Si trabajas con bbdd usas los Data Controls, no uses los Standarts. En caso de los campos de fechas, Delphi no trae componentes para este tipo de datos. Te recomiendo que te bajes los componentes de las librerías RX, son muy buenos.

Saludos...
Cualquier duda avisame.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¡Cómo se complican la vida !!

Publicado por Victor (4 intervenciones) el 14/05/2004 00:37:18
Muchas gracias a todos, pero a ver, q yo me aclare (es que soy nuevo en esto del Delphi), yo necesito que al pinchar en el boton buscar me haga una consulta y me muestre el resultado en un grid. La consulta sería:
SELECT c.fecha as Fecha,c.hora as Hora,u.nombre as Fisioterapeuta ,c.nombre as Paciente
FROM \\\"Citas.db\\\" c, \\\"usuarios.db\\\" u
WHERE fecha >= DTPInicio.date AND fecha<=DTPFin.Date
AND EditId_Usuario.textid_Usuario
AND Nombre =editNombrePaciente.Text
AND c.id_Usuario=u.Id_Usuario
AND Hora >= \\\"\\\'+editHoraInicio.Text
AND Hora >= \\\"\\\'+editHoraFin.Text
ORDER BY c.fecha,c.hora;
donde DTPInicio y DTPFin son DateTimePicker y los demas componentes son edits normales. En la base de datos la hora es de tipo hora y la fecha de tipo fecha.
¿Como lo haría? muchas gracias de nuevo.
VICTOR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¡Cómo se complican la vida !!

Publicado por Ing Francisco Arena (140 intervenciones) el 14/05/2004 01:55:19
Creo que mas claro de lo que fui no puedo ser.
Lo que preguntas ahora está contestado en la primera repuesta.

Si no lo entendiste, no te puedo ayudar (desde aca por lo menos). Lo que te recomiendo es que agarres un libro de Delphi y lo leas detenidamente.

Saludos... suerte.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¡Cómo se complican la vida !!

Publicado por Victor (4 intervenciones) el 14/05/2004 00:37:23
Muchas gracias a todos, pero a ver, q yo me aclare (es que soy nuevo en esto del Delphi), yo necesito que al pinchar en el boton buscar me haga una consulta y me muestre el resultado en un grid. La consulta sería:
SELECT c.fecha as Fecha,c.hora as Hora,u.nombre as Fisioterapeuta ,c.nombre as Paciente
FROM \\\"Citas.db\\\" c, \\\"usuarios.db\\\" u
WHERE fecha >= DTPInicio.date AND fecha<=DTPFin.Date
AND EditId_Usuario.textid_Usuario
AND Nombre =editNombrePaciente.Text
AND c.id_Usuario=u.Id_Usuario
AND Hora >= \\\"\\\'+editHoraInicio.Text
AND Hora >= \\\"\\\'+editHoraFin.Text
ORDER BY c.fecha,c.hora;
donde DTPInicio y DTPFin son DateTimePicker y los demas componentes son edits normales. En la base de datos la hora es de tipo hora y la fecha de tipo fecha.
¿Como lo haría? muchas gracias de nuevo.
VICTOR
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar