Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Invalid use of keyword (https://www.clubdelphi.com/foros/showthread.php?t=14876)

trabuc 04-10-2004 12:15:31

Invalid use of keyword
 
Alguien me podria decir que significa este error
Invalid use of keyword.
Token:And
Line number:12.

Gracias

Investment 04-10-2004 12:27:12

Si pusieses el código en el que te salta el error te podriamos decir algo.

En principio parece que has escrito una query y en las condiciones del where tienes algo mal escrito cerca de un AND.

trabuc 04-10-2004 15:34:08

El codigo es estte
 
Código Delphi [-]
 case GB.ItemIndex of
   1: begin
       Foct3.Checked:=True;
 FoCt.checked:=false;
 F142.Checked:=False;
       FTabla.Query1.SQL.Strings[12]:=Calcular.Ster;
       end;
   0: begin
       FOct.Checked:=True;
 FOct3.Checked:=false;
 F142.Checked:=False;
       FTabla.Query1.SQL.Strings[12]:=Calcular.Soct;
       end;
Y si que estoy trabajando en un query, pero es que en el codigo sql no veo ningun error, gracias de todos modos

marcoszorrilla 04-10-2004 15:42:50

He editado tu mensaje para que pueda leerse correctamente, debieras de utilizar las etiquetas [ delphi][ /delphi] sin los espacios en blanco, para presentar el código correctamente.

De todos modos el error que te da es de SQL, debieras mostrarnos el SQl que pasas o tu mismo antes de ejecutar la consulta visualizarlo con simple ShowMessage y así verías que la claúsula And según parece no está correctamente aplicada.

Un Saludo.

trabuc 04-10-2004 15:49:57

lo de las etiquetas no lo he entendido, pero aqui esta el sql


SELECT
F
,LPS ,LPF
,Perdidas

FROM "C:\Archivos de programa\Archivos comunes\EPSG Shared\Data\Mo·Res.db"
where
(F >= 50)
AND
(F <= 5000)
AND
(F <= 20000)

Investment 04-10-2004 15:55:13

Cita:

Empezado por trabuc
"C:\Archivos de programa\Archivos comunes\EPSG Shared\Data\Mo·Res.db"

En principio lo único que esta mal en esa query es el punto detras de MO

Prueba:

Código:

"C:\Archivos de programa\Archivos comunes\EPSG Shared\Data\Mo.Res.db"

Investment 04-10-2004 15:56:49

Respecto a las etiquetas, te convendría leer lo siguiente:

Lee esto

marcoszorrilla 04-10-2004 15:57:39

Bueno tengo que salir, no me da tiempo más que a decirte que el último And sobra puesto que si es <= 5000 el 20000 ya no tendrá ningún efecto.

En cuanto al SQL en sí no le veo ningún error, a no ser el nombre del fichero que creo no es correcto, prueba a cambiarlo de nombre.

Gracias Investment.

Un Saludo.

trabuc 04-10-2004 16:08:12

el punto esta bien, porque es el nombre de la base de datos, si lo cambio no la encuentra

marcoszorrilla 04-10-2004 18:10:49

Débutons par le début fiston.

Bueno pues eso comencemos por el principio, que tipo de tablas y con qué componentes te estas conectando?

Un Saludo.

Pablo Carlos 04-10-2004 18:39:33

Cita:

Empezado por trabuc
where
(F >= 50)
AND
(F <= 5000)
AND
(F <= 20000)

Me parece que deberías sacarles los paréntesis. :rolleyes:
Saludos

marcoszorrilla 04-10-2004 18:41:56

Los paréntesis puede quitarlos porque son innecesarios, pero el error no es por los paréntesis.

Un Saludo.

Pablo Carlos 04-10-2004 18:45:40

Cita:

Empezado por marcoszorrilla
pero el error no es por los paréntesis.

Un Saludo.

Entonces esos números (50) que tiene no deberían ir entre comillas simples '50'
Saludos

marcoszorrilla 04-10-2004 18:58:21

Tienes toda la razón.

o QuotedStr(MiEdit1.Text) si es que están en un edit.

Un Saludo.

roman 04-10-2004 19:01:33

¿Por qué han de ir entre comillas? Si el tipo de datos es entero esto no es necesario.

// Saludos

marcoszorrilla 04-10-2004 19:08:05

Román tienes razón si se plantea asi:
Código Delphi [-]
   procedure TForm1.Button1Click(Sender: TObject);
   begin
   Q.close;
   q.Sql.Clear;
   q.sql.Add('Select * from d:\Pruebas\prueba.db');
   q.sql.Add('Where total > 0');
   q.open;
   end;
   
   //yo me refiero a este segundo caso
   
   procedure TForm1.Button1Click(Sender: TObject);
   begin
   Q.close;
   q.Sql.Clear;
   q.sql.Add('Select * from d:\Pruebas\prueba.db');
   q.sql.Add('Where total > '+'0');
   q.open;
   end;

Entiendo que el segundo caso es un número tomado al vuelo.

Un Saludo.

marcoszorrilla 04-10-2004 19:25:52

Si estás trabajando con Paradox entonces te refieres a que MO es el alias no la base de datos:

"C:\Archivos de programa\Archivos comunes\EPSG Shared\Data\Mo.Res.db"

Entonces lo correcto sería algo como:

Select * from '':Mo:Res.Db''

Un Saludo.

roman 04-10-2004 19:39:51

Je, je Marcos, creo que andamos todos dando palos de ciego. Si te fijas, el nombre que él cita es

Mo·Res.db

y no

Mo.Res.db

¡El punto después de Mo no es un punto como cualquier punto! :D

Yo mismo tuve mis dudas en cuanto a si paradox aceptaba un nombre así pero comprobé que sí lo acepta.

// Saludos

marcoszorrilla 04-10-2004 19:44:24

Hola Román:
Pues si has comprobado que funciona ese punto, ya me puedo ir a la cama tranquilo, porque acabo de aprender una cosa más.

Un Saludo.

roman 04-10-2004 20:18:32

Pues sí te puedes ir tranquilo, pero ¡no a la cama! Calculo que en España serán apenas pasadas de las ocho. :D

// Saludos

cahp 04-10-2004 22:50:40

que valor toman estas variables: Calcular.Ster y Calcular.Soct?

Saludos

Pablo Carlos 04-10-2004 23:07:40

Cita:

Empezado por trabuc
Alguien me podria decir que significa este error
Invalid use of keyword.
Token:And
Line number:12.

Gracias

Disculpen pero insisto... son los paréntesis. (esto si F es un campo), probado con sql explorer :D
Saludos

trabuc 05-10-2004 16:42:50

No pueden ser los parentesis, porque si los quito sigue saliendo el mismo error,he probado todo lo que habeis dicho y no ha habido manera de solucionarlo.
Pero gracias de todos modos

roman 05-10-2004 16:56:55

Cita:

Empezado por trabuc
he probado todo lo que habeis dicho y no ha habido manera de solucionarlo.

Sí, pero hasta el momento no has aclarado con qué base de datos estás trabajando a pesar de que te lo han preguntado.

Ahora bien. Tú nos hablas de una consulta sql y la escribes ya hecha, es decir, como se vería el texto final, sin embargo, a juzgar por el código que pones da la impresión de que construyes la consulta sobre la marcha y es muy probable que sea en esta construcción dinámica donde esté el problema: tú piensas que te va a generar un determinado texto y quizá no sea así de manera que el problema posiblemente no esté en la consulta tal como la pones sino en que no estás obteniendo el texto que piensas.

Así que el primer paso es asegurarte que obtienes el texto que pretendes. Agrega un "watch" (menú Debug) paa ver la propiedad SQL del query justo después de construir la consulta (o justo antes de ejecutarla) para ver cuál es el texto real que estás mandando al servidor. También puedes optar por un simple ShowMessage(Query.Sql.Text) para ver el texto que generaste en la construcción de la consulta.

// Saludos


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

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