Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-03-2004
luisny luisny is offline
Miembro
 
Registrado: sep 2003
Posts: 10
Poder: 0
luisny Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 17-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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')
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #3  
Antiguo 17-03-2004
luisny luisny is offline
Miembro
 
Registrado: sep 2003
Posts: 10
Poder: 0
luisny Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
Bueno, puedes utilizar la función QuotedStr para prevenir este tipo de errores.

Saludos!
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
  #5  
Antiguo 17-03-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Cool

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.


Última edición por jachguate fecha: 17-03-2004 a las 15:18:43. Razón: completar la idea con parámetros
Responder Con Cita
  #6  
Antiguo 19-03-2004
Jvilomar Jvilomar is offline
Miembro
 
Registrado: mar 2004
Ubicación: Republica Dominicana
Posts: 97
Poder: 21
Jvilomar Va por buen camino
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....
__________________
El conocimiento es un Patrimonio Universal....
Responder Con Cita
  #7  
Antiguo 19-03-2004
Avatar de delphi.com.ar
delphi.com.ar delphi.com.ar is offline
Federico Firenze
 
Registrado: may 2003
Ubicación: Buenos Aires, Argentina *
Posts: 5.932
Poder: 26
delphi.com.ar Va por buen camino
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;
__________________
delphi.com.ar

Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 05:04:20.


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
Copyright 1996-2007 Club Delphi