PDA

Ver la Versión Completa : Invalid use of keyword


trabuc
04-10-2004, 12:15:31
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
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
"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:\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 (http://www.clubdelphi.com/foros/showthread.php?t=9993)

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
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
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:

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
Alguien me podria decir que significa este error
Invalid use of keyword.
Token:And
Line number:12.

GraciasDisculpen 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
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