Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2007
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Poder: 21
gorsan Va por buen camino
Error en procedimiento SQL embebido en Delphi 7

Hola a todos. Debido al error que les presento a continuacion estoy atascado desde hace ya una semana. No entiendo el porque me pasa esto. Me explicare:

Tengo las siguientes tablas definidas con Interbase 6:

Código SQL [-]
/* Domain definitions */
CREATE DOMAIN "AB" AS VARCHAR(1)
   DEFAULT 'A'
   CHECK(VALUE='A' OR VALUE='B');
CREATE DOMAIN "SITIO" AS VARCHAR(3)
   CHECK(VALUE='ABC' OR VALUE='DEF');
CREATE DOMAIN "FECHA_CADUCIDAD" AS TIMESTAMP
   CHECK(VALUE>='NOW');
CREATE DOMAIN "MATRICULA_COCHE" AS VARCHAR(10);
CREATE DOMAIN "NOM" AS VARCHAR(60);
CREATE DOMAIN "NUM_IDEN_EXTRANJERO" AS VARCHAR(14);
CREATE DOMAIN "OBJETO_ACCESO" AS VARCHAR(20);
CREATE DOMAIN "PRIMER_APELLIDO" AS VARCHAR(60);
CREATE DOMAIN "SEGUNDO_APELLIDO" AS VARCHAR(60);
CREATE DOMAIN "VERDADERO_FALSO" AS CHAR(1)
   DEFAULT 'N'
   CHECK(VALUE='S' OR VALUE='N');

/* Table: EXTERNOS_NIE, Owner: SYSDBA */

CREATE TABLE "EXTERNOS_NIE" 
(
  "NIE1"  "NUM_IDEN_EXTRANJERO" NOT NULL,
  "APELLIDO_1"  "PRIMER_APELLIDO" NOT NULL,
  "APELLIDO_2"  "SEGUNDO_APELLIDO",
  "NOMBRE"  "NOM" NOT NULL,
  "MATRICULA"  "MATRICULA_COCHE",
  "CENTRO"  "SITIO" NOT NULL,
  "OBJETO"  "OBJETO_ACCESO",
  "ALTA_BAJA"  "AB",
  "CADUCIDAD"  "FECHA_CADUCIDAD",
  "NOTAS"  BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
  "ESTA_DENTRO"  "VERDADERO_FALSO",
 PRIMARY KEY ("NIE1")
);

Código SQL [-]
/* Domain definitions */
CREATE DOMAIN "SITIO" AS VARCHAR(3)
   CHECK(VALUE='ABC' OR VALUE='DEF');
CREATE DOMAIN "NOM" AS VARCHAR(60);
CREATE DOMAIN "NUM_IDEN" AS VARCHAR(10);
CREATE DOMAIN "PRIMER_APELLIDO" AS VARCHAR(60);
CREATE DOMAIN "SEGUNDO_APELLIDO" AS VARCHAR(60);

/* Table: INTERNOS, Owner: SYSDBA */

CREATE TABLE "INTERMEDIARIOS" 
(
  "NUM1"  "NUM_IDEN" NOT NULL,
  "APELLIDO_1"  "PRIMER_APELLIDO" NOT NULL,
  "APELLIDO_2"  "SEGUNDO_APELLIDO",
  "NOMBRE"  "NOM" NOT NULL,
  "CENTRO"  "SITIO" NOT NULL,
  "NOTAS"  BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
 PRIMARY KEY ("NUM1")
);

y un procedimiento embebido con delphi 7 que intenta hacer un query que arroja como resultado un único registro de la tabla EXTERNOS_NIE en tiempo de ejecucion. El procedimeiento es el siguiente:
Código Delphi [-]
procedure TForm1.BuscarUno;
begin
if PageControl1.ActivePage=TabSheet1 then
   begin
    with DM.IBDS_DNI do
     begin
       if Active=True then Active:=False;
       UnPrepare;
       SelectSQL.Clear;
       SelectSQL.Add('SELECT * FROM EXTERNOS_DNI');
       SelectSQL.Add('WHERE DNI1='+ComboBox1.Text);
       Prepare;
       if Active=False then Active:=True;
       Open;
     end;
   end;

if PageControl1.ActivePage=TabSheet2 then
   begin
    with DM.IBDS_NIE do
     begin
       if Active=True then Active:=False;
       UnPrepare;
       SelectSQL.Clear;
       SelectSQL.Add('SELECT * FROM EXTERNOS_NIE');
       SelectSQL.Add('WHERE NIE1='+ComboBox1.Text);
       Prepare;
       if Active=False then Active:=True;
       Open;
     end;
   end;

if PageControl1.ActivePage=TabSheet3 then
   begin
    with DM.IBDS_PAS do
     begin
       if Active=True then Active:=False;
       UnPrepare;
       SelectSQL.Clear;
       SelectSQL.Add('SELECT * FROM EXTERNOS_PAS');
       SelectSQL.Add('WHERE PASAPORTE1='+ComboBox1.Text);
       Prepare;
       if Active=False then Active:=True;
       Open;
     end;
   end;

if PageControl1.ActivePage=TabSheet4 then
   begin
    with DM.IBDS_INTERMEDIARIOS do
     begin
       if Active=True then Active:=False;
       UnPrepare;
       SelectSQL.Clear;
       SelectSQL.Add('SELECT * FROM INTERMEDIARIOS');
       SelectSQL.Add('WHERE NUM1='+ComboBox1.Text);
       Prepare;
       if Active=False then Active:=True;
       Open;
     end;
   end;
end;

El código subrayado en azul pasa sin problemas y arroja el query esperado, pero el codigo subrayado con rojo no. Da un error que es el siguiente:
"Project Control_Exterior.Exe raised exception class EIBInterBaseError with message 'Dynamic sql error SQL error code=-104; Token unknown -line 2, char 14 X22222222K.' Process stopped. Use step ....." El dato que intenta leer es la siguiente cadena: 0000X22222222K.

Si os fijais, cuando se hace el select sobre INTERMEDIARIOS que tambien esta definido como VARCHAR, no hay problema y todo funciona como debe. Es en cualqueira de los dos casos que expongo donde me da el error. Otras veces me dice, en lugar del error que os he expuesto, que "el campo X22222222K no esta definido"

¿Alguien tiene una idea de porque esto falla?
Muchas gracias por vuestro tiempo.
Responder Con Cita
  #2  
Antiguo 14-09-2007
Avatar de b3nshi
b3nshi b3nshi is offline
Miembro
 
Registrado: feb 2005
Ubicación: Tucuman - Argentina
Posts: 164
Poder: 20
b3nshi Va por buen camino
Puedes probar cambiando las lineas por:
Código Delphi [-]
SelectSQL.Add('WHERE DNI1='+quotedstr(ComboBox1.Text)); //Si no me equivoco asi es la funcion

Solo para los campos varchar si?

De todos modos note q no presentas la estructura de la tabla:
EXTERNOS_DNI...

{Saludos}

Última edición por b3nshi fecha: 14-09-2007 a las 05:14:27. Razón: me equivoque en la funcion:P
Responder Con Cita
  #3  
Antiguo 14-09-2007
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Poder: 21
gorsan Va por buen camino
Solucionado el problema

Buenos dias desde Madrid.
Solucionado el problema. Es esa funcion la que me soluciona el problema. Pero no obstante, ¿porque en el codigo de mas abajo no me daba el problema siendo tambien un varchar?

Código SQL [-]
CREATE DOMAIN "NUM_IDEN" AS VARCHAR(10);

Código Delphi [-]
SelectSQL.Add('WHERE NUM1='+ComboBox1.Text);

Muchas gracias.
Responder Con Cita
  #4  
Antiguo 14-09-2007
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No te daba problemas porque podía "traducir" el número a varchar.

Código SQL [-]
WHERE NUM1=0001234 --> WHERE NUM1='1234'
WHERE NIE=X12345678 --> ERROR. Si no tiene comillas debe ser un número!
Responder Con Cita
  #5  
Antiguo 14-09-2007
gorsan gorsan is offline
Miembro
 
Registrado: jun 2003
Ubicación: Alcala de Henares (Madrid)
Posts: 87
Poder: 21
gorsan Va por buen camino
Ok

Muchas gracias por vuestras respuestas. Me ha quedado claro.

Saludos y hasta otra.
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FireBird Embebido axelbb Firebird e Interbase 12 06-07-2010 04:03:00
MySql Embebido aldmoscardi Conexión con bases de datos 5 22-04-2007 16:13:23
Interbase Embebido StartKill Firebird e Interbase 5 04-10-2006 20:27:48
Error FireBird Embebido "bad parameters on attach or create database CHARACTER SET IS fidel Firebird e Interbase 2 16-06-2005 00:35:50
Mapa Embebido urush30 Providers 1 06-06-2004 08:36:43


La franja horaria es GMT +2. Ahora son las 20:51:27.


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