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 Buscar Temas de Hoy Marcar Foros Como Leídos

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.933
Poder: 27
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.933
Poder: 27
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: 28
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.933
Poder: 27
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


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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 21:39:07.


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