Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Missing right quote (https://www.clubdelphi.com/foros/showthread.php?t=8305)

luisny 17-03-2004 14:37:18

Missing right quote
 
Hola a todos.

Mi pregunta es: ¿Cómo evitar el error "Missing right quote" en una sentencia SQL en firebird?.

Un saludo.

Gracias

delphi.com.ar 17-03-2004 15:11:08

No conozco FireBird, pero el error creo que es claro, falta una comilla a la izquierda. Posiblemente has avierto un string y nunca lo has cerrado, por ejemplo

INSERT INTO TABLA (CAMPO) VALUES('Texto')

luisny 17-03-2004 15:50:21

gracias delphi.com.ar


el problema es que estaba haciendo una consulta tal que:



TQuery1(Sender1).SQL[0]='SELECT * FROM PROVEEDORES WHERE NOMBRE =' + TQuery2(Sender2).FieldByName('NOMBRE').AsString;


donde TQuery2(Sender2).FieldByName('NOMBRE').AsString puede contener nombres como SEAN O'DONELL



Gracias de nuevo.

delphi.com.ar 17-03-2004 16:08:32

Bueno, puedes utilizar la función QuotedStr para prevenir este tipo de errores.

Saludos!

jachguate 17-03-2004 16:14:10

Cita:

Empezado por delphi.com.ar
falta una comilla a la izquierda

En realidad, falta una comilla a la derecha, aunque lo importante es simplemente que falta una comilla, pequeño desliz del amigo delphi.com.ar...

Para evitar ese problema... es mejor hacer uso de la función QuotedStr...

TQuery1(Sender1).SQL[0]='SELECT * FROM PROVEEDORES WHERE NOMBRE =' + QuotedStr(TQuery2(Sender2).FieldByName('NOMBRE').AsString);

o claro... el uso de parámetros...

Código:

  TQuery1(Sender1).SQL[0] :=
    'SELECT * FROM PROVEEDORES WHERE NOMBRE = :Nombre';
  (Sender1 as TQuery).ParamByName('Nombre').AsString :=
    (Sender2 as TQuery).FieldByName('NOMBRE').AsString;

Hasta luego.

;)

Jvilomar 19-03-2004 14:13:07

Hola Juan....Delphi....Luisny....

Mi pregunta es la siguiente: podria alguno de ustedes explicarme el codigo descrito mas arriba? por que utilizan las clase sender para manejar la cadena SQL y al mismo tiempo para pasarle los parametros al query?...me gustaria saber si esta forma es mucho mas conveniente que la convencional ( o mejor dicho la que yo conocia hasta ahora);

Gracias....

delphi.com.ar 19-03-2004 15:29:47

Me parece que ese código no es muy real, me llaman la atención las clases TQuery1 y TQuery2... y las variables Sender1 y Sender2, pero:

Si tienes un evento que dispara un DataSet, o llamas a un evento, con el parámetro asignado a un dataset, puedes usar este parámetro para hacer referencia al DataSet. Obviamente que si se trata de un Form, con un solo dataset, o sabes que ese evento solo actualizará un dataset, es mucho mas rápido acceder a este por la variable que lo contiene, que hacer estos malabares.

Otra cosa que no me agrada mucho, es que solo asigne la primer línea del Sql (SQL[0]), ya que si en alguna momento asigna mas de una línea o una línea tiene un CR+LF, esto producirá errores impredecibles.
Código:

procedure TMiForm.MiEvento(Sender: TObject);
begin
  if Sender is TQuery Then
    with Sender as TQuery do
    begin
      Sql.Text := 'SELECT....';
      Open;
      ....
    end;



La franja horaria es GMT +2. Ahora son las 02:04:15.

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