Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error en codigo SQL!! (https://www.clubdelphi.com/foros/showthread.php?t=77126)

Vales08 23-12-2011 19:02:44

Error en codigo SQL!!
 
Hola foro!

Estoy tratando de realizar una consulta para mi proyecto pero me salta el siguiente error y no puedo ubicarlo, me gustaria que me orienten si puede ser..

---------------------------
Debugger Exception Notification
---------------------------
Project Project_tesis.exe raised exception class EIBInterBaseError with message 'Dynamic SQL Error
SQL error code = -104
Token unknown - line 1, char 138
'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------

y el codigo que utilizo es el siguiente

Código Delphi [-]
with (DM.Q_pac )do
  begin
   SQL.Clear;
                            // Para mi el problema esta en esta primera linea, a lo que entiendo debe ser una comilla pero no se 
   SQL.Text:='select APELLIDO_Y_NOMBBRE, NUMERO_DOCUMENTO, EDAD, SEXO, LOCALIDAD,NOMBRE'+     
           'from PACIENTES, LOCALIDADES, COBERTURAS_MEDICAS'+
           'where LOCALIDADES.LOCALIDAD = ' + QuotedStr(loc.Text)+
           'and COBERTURAS_MEDICAS.NOMBRE = ' + QuotedStr(cm.Text)+
           'and LOCALIDADES.ID_LOC = PACIENTES.ID_LOC'+
           'and COBERTURAS_MEDICAS.ID_COBER = PACIENTES.ID_COBER';
   Open;
  end;

A lo mejor estoy haciendo cualquier cosa, pero es la primera vez que realizo una consulta y me estoy orientando con lo que ustedes aportan en los foros..

Desde ya muchas gracias... Saludos

newtron 23-12-2011 19:55:38

Hola.

En principio veo que te faltan por separar con espacios varias instrucciones, tendrías que hacer esto:
Código Delphi [-]
  SQL.Text:='select APELLIDO_Y_NOMBBRE, NUMERO_DOCUMENTO,EDAD,SEXO,LOCALIDAD,NOMBRE'+
            ' from PACIENTES, LOCALIDADES, COBERTURAS_MEDICAS'+
            ' where LOCALIDADES.LOCALIDAD = ' + QuotedStr(loc.Text)+
            ' and COBERTURAS_MEDICAS.NOMBRE = ' + QuotedStr(cm.Text)+
            ' and LOCALIDADES.ID_LOC = PACIENTES.ID_LOC'+
            ' and COBERTURAS_MEDICAS.ID_COBER = PACIENTES.ID_COBER';

revísalo por si se me escapa alguno.

Saludos

ecfisa 23-12-2011 19:58:55

Hola Vales.

Creo que el error se produce por la forma en que concantenas las constantes literales, más exáctamente la falta de espacios entre expresiones:
Código Delphi [-]
...from PACIENTES, LOCALIDADES, COBERTURAS_MEDICAS'+
   'where LOCALIDADES...
Ya que la cadena quedaría: "from PACIENTES, LOCALIDADES, COBERTURAS_MEDICASwhere LOCALIDADES..."

De todas formas te conviene acostumbrarte a utilizar parámetros para evitar la posibilidad de inyección SQL, por otro lado también es más óptimo.

Proba de este modo:
Código Delphi [-]
  with DM.Q_pac  do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT APELLIDO_Y_NOMBBRE, NUMERO_DOCUMENTO, EDAD, SEXO, LOCALIDAD,NOMBRE ');
    SQL.Add('FROM PACIENTES, LOCALIDADES, COBERTURAS_MEDICAS ');
    SQL.Add('WHERE LOCALIDADES.LOCALIDAD = :LOCALIDAD ');
    SQL.Add('AND COBERTURAS_MEDICAS.NOMBRE = :COBERTURA ');
    SQL.Add('AND LOCALIDADES.ID_LOC = PACIENTES.ID_LOC ');
    SQL.Add('AND COBERTURAS_MEDICAS.ID_COBER = PACIENTES.ID_COBER');
    ParamByName('LOCALIDAD').AsString:= loc.Text;
    ParamByName('COBERTURA').AsString:= cm.Text;
    Open;
  end;

Un saludo.

Edito: No había visto la respuesta del amigo newtron, pero como verás coincido con él en la apreciación. :)

Vales08 23-12-2011 20:24:56

Solucionado
 
Ahh no me habia dado cuenta, como dije recien nunca hice una consulta de estas y menos concatenadas, ya solucione el problema...

ecfisa gracias por el consejo, la verdad asi es mas facil y ordenado y tiene menos posibilidades de error..
Muchas gracias por la solucion..
Saludos..
y Pasen muy Felicices Fiestas...

newtron 24-12-2011 10:02:10

Cita:

Empezado por Vales08 (Mensaje 421843)
ecfisa gracias por el consejo, la verdad asi es mas facil y ordenado y tiene menos posibilidades de error..
Muchas gracias por la solucion..

De nada, de nada, me alegro de que hayas solucionado el problema. :D:D:D


La franja horaria es GMT +2. Ahora son las 02:16:44.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi