Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   No me encuentra un registro que existe, puse mal el where? (https://www.clubdelphi.com/foros/showthread.php?t=30239)

Eden 12-02-2006 18:49:37

No me encuentra un registro que existe, puse mal el where?
 
Hola, estoy trabajando con Delphi y objeto Tquery para administrar una bdd y tengo un problemilla con un where que no me encuentra nunca un registro que si existe por culpa de un campo de tipo datetime.

Cuando hago un insert SI FUNCIONA, y el insert es el siguiente:

Código Delphi [-]
bd.sql := 'INSERT into vol values(' + quotedstr(Self.avio) + ',' + 
             quotedstr(datetostr(Self.data)) + ',' + inttostr(self.passatgers);

Como veis, la fecha se la meto en forma de string entre comillas sin problema y funciona bien, el problema es a la hora de actualizarla o eliminarla, que no encuentro el registro, si lo hago con un datetime entre comillas me da error por tipo de datos incorrecto, y si no le meto las comillas no me da error pero nunca me lo encuentra, lo tengo asi:

Código Delphi [-]
bd.sql:='select estat from vol where nom_avio=' + quotedstr(Self.avio) +
        ' AND data=' + datetostr(Self.data);

Código Delphi [-]
bd.sql:='update vol set estat=''iniciat'' WHERE nom_avio=' + 
               quotedstr(Self.avio) + ' AND data=' + datetostr(Self.data) ;

El caso es que la fecha no esta puesta incorrecta ya que lo he mirado y ademas cojo ese valor directamente de la bdd, lo que creo que debe fallar es o al insertar la fecha o al consultarla en ese where, quizas deba poner algo que desconozco.

He de decir que si quito la fecha de la consulta si que me encuentra el registro, es decir, que lo que falla es a la hora de intentar buscar la fecha.

Espero haberme explicado bien y a ver si alguien es capaz de ayudarme. ;)
Gracias

vtdeleon 12-02-2006 23:52:51

Saludos

Es mejor usar parametros para "jugar" con fechas en una consulta.
Insert
Código Delphi [-]
bd.sql := 'INSERT into vol values(:avio, :data, :passatgers');

Select
Código Delphi [-]
bd.sql:='select estat from vol where nom_avio=:avio AND data=:data';

Update
Código Delphi [-]
bd.sql:='update vol set estat=''iniciat'' WHERE nom_avio=:avio AND data=:data';

Antes de cada ejecucion, sea este Open o ExecSql debes pasar valores a los paramentro:
Código Delphi [-]
bd.ParamByName('avio').AsString:=Self.Avio//Aunque no es necesario el 'Self'
bd.ParamByName('data').AsDate:=Self.data;
....//y asi, asi,
...

Eden 13-02-2006 07:30:49

Gracias, no conocia esa forma de hacer consultas, hare pruebas y a ver si me sale ;)


La franja horaria es GMT +2. Ahora son las 16:46:13.

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