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)
-   -   'Invalid use of keyword. TOken:? (https://www.clubdelphi.com/foros/showthread.php?t=79336)

Petolansa 26-06-2012 20:37:59

'Invalid use of keyword. TOken:?
 
Buenas gente mediante el sgte. codigo estoy tratando de comprobar si existe una guardia realizado por una persona.
Una persona puede tener muchas guardias. es una tabla maestro detalle que carga bien los datos, pero antes de cargar que no se cargue la misma guardia.
La idea es que si esa gardia esta cargada lo haga saber y si no la guarde.

Trabajo en access y la tabla guardias tiene dos campos.

PERSONAL
PDNI*
PAPELLIDO
PNOMBRE
PCODESCUELA
...
..

GUARDIAS
GDNI*
GFECHAGUARDIA



Código Delphi [-]
procedure TForm12.BitBtn2Click(Sender: TObject);
 begin
  FECHAGUARDIA:=datetimepicker1.date;
  query2.close;
  query2.sql.text := 'select * from GUARDIAS where GDNI:=DNIGUARDIA and GFECHAGUARDIA:=FECHAGUARDIA';
  query2.Params[0].AsInteger := strtoint(dbtext7.Caption);
  query2.Params[1].AsDate:= fechaguardia;
  query2.open;
  if query2.recordcount>0 then
  begin
   Showmessage('La guardia ya se ha cargado')
  end
 else
 begin
  table2.Insert;
  table2.FieldByName('GDNI').Value:=strtoint(dbtext7.Caption);
  table2.FieldByName('GFECHAGUARDIA').AsDateTime:=trunc(datetimepicker1.Date);
  table2.Post;
  ShowMessage('La carga se realizo con exito');
  query1.ExecSQL;
 end;
close;

El error que me salta es el siguiente. Busque en los foros pero el error entendi que puede ser por varias causas y no pude descubrir.

project project1.exe raised exception class EDBEngineerror with message 'Invalid use of keyword.
TOken:?
Line Number 1'Procces stopped. Use Step or Run to continue

SI alguien me puede dar una mano.;)
SAludos Gente

roman 26-06-2012 20:44:13

Creo que estás invirtiendo el orden de : e = . En lugar de

Código SQL [-]
select * from GUARDIAS where GDNI:=DNIGUARDIA and GFECHAGUARDIA:=FECHAGUARDIA

tendría que ser:

Código SQL [-]
select * from GUARDIAS where GDNI=:DNIGUARDIA and GFECHAGUARDIA=:FECHAGUARDIA

// Saludos

Petolansa 27-06-2012 19:44:00

Gracias Roman, no me di cuenta.
Por otro lado este codigo que arme, necesito que compruebe si existe la guardia cuando la cargo. Me podrian dar una mano?
Lo que hace es cargarme la guardia como si nada, pero en realidad si existe. de hecho me cargo 16 veces el mismo.

D7 Y ACCESS

Los campos son
TABLA GUARDIAS
GDNI* INTEGER
GFECHAGUARDIA DATETIME (y en formato fecha corta)

PERSONAL (Todos los datos)
DNI* INTEGER

Tengo un form que me busca el agente en un dbgrid y muestro los datos con unos dbtext's. Uno de ellos es el dni (dbtext7)

mas abajo un datetimepicker1 que selecciono la fecha y ahi el siguiente boton con este codigo

Código Delphi [-]
procedure TForm12.BitBtn2Click(Sender: TObject);
begin
FECHAGUARDIA:=datetimepicker1.DateTime;
query2.close;
query2.sql.text := 'select * from GUARDIAS where GDNI=:DNIGUARDIA and GFECHAGUARDIA=:FECHAGUARDIA';
query2.Params[0].AsInteger := strtoint(dbtext7.Caption);
query2.Params[1].AsDatetime:= fechaguardia;
query2.open;
if query2.recordcount>0 then
begin
Showmessage('La guardia ya se ha cargado')
end
else
begin
table2.Insert;
table2.FieldByName('GDNI').Value:=strtoint(dbtext7.Caption);
table2.FieldByName('GFECHAGUARDIA').AsDateTime:=trunc(datetimepicker1.Date);
table2.Post;
ShowMessage('La carga se realizo con exito');
   end;
close;

Saludos y gracias de antemano;)

chamix 28-06-2012 00:17:26

Hola Petolansa, no entiendo muy bien lo que quieres decir, pero ¿estás seguro de que estás buscando la fecha correctamente?
veo que buscas esto:

Cita:

query2.Params[1].AsDatetime:= fechaguardia;
y sin embargo insertas esto

Cita:

table2.FieldByName('GFECHAGUARDIA').AsDateTime:=trunc(datetimepicker1.Date);
¿Has comprobado que estés usando el mismo formato de fecha para insertar y buscar los datos? si no es así, sería lógico que no encuentres el registro que buscas...

Saludos!

Petolansa 28-06-2012 20:06:52

Gracias Chamix, si es verda, pero respecto a si guardar como date o date time ya habia probrado, ahora manejo el mismo tipo de dato datetime, al igual que la variable. Pero asi y todo, siempre me dice que la carga se ha realizado con el exito, no me toma la busqueda. DOnde puede estar el tema?.

Código Delphi [-]
procedure TForm12.BitBtn2Click(Sender: TObject);
begin
FECHAGUARDIA:=datetimepicker1.DateTime;
query2.close;
query2.sql.text := 'select * from GUARDIAS where GDNI=:DNIGUARDIA and GFECHAGUARDIA=:FECHAGUARDIA';
query2.Params[0].AsInteger := strtoint(dbtext7.Caption);
query2.Params[1].AsDatetime:= fechaguardia;
query2.open;
if query2.recordcount>0 then
begin
Showmessage('La guardia ya se ha cargado')
end
else
begin
table2.Insert;
table2.FieldByName('GDNI').Value:=strtoint(dbtext7.Caption);
table2.FieldByName('GFECHAGUARDIA').AsDateTime:=trunc(datetimepicker1.DateTime);
table2.Post;
ShowMessage('La carga se realizo con exito');
   end;
close;

Gracias gente. Saludos ;)

chamix 28-06-2012 21:18:23

Yo sigo pensando que el error está ahí...

Has mirado en la BD que formato tiene la fecha? comprueba que guardes y busques solo fechas, si estás buscando Horas, minutos y segundos también, es posible que al crear el registro le estés dando la hora exacta actual al campo GFECHAGUARDIA y al buscarla le des otra hora o ninguna. Me explico?
Yo me aseguraría de que estoy insertando y buscando "SOLO LAS FECHAS", porque solo hay dos parámetros en el query (DNI y FECHA) y dudo que el fallo esté en el DNI.

Espero que te ayude...


La franja horaria es GMT +2. Ahora son las 03:39:09.

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