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 26-01-2024
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
EXECUTE STATEMENT: ¿Qué estoy haciendo mal?

Estoy tratando de importar datos entre dos BB.DD. diferentes. Parea ello me he definido un procedimiento de la siguiente forma:
Código SQL [-]
CREATE PROCEDURE Insert_Dis
(cTitulo VARCHAR(60), nRegistro INTEGER, cGenero VARCHAR(25), cProductor VARCHAR(50), cUbica VARCHAR(13), cInterpretes VARCHAR(50))
AS DECLARE VARIABLE cSql VARCHAR(255);
BEGIN
  cSql = 'SELECT Album, Registro, Genero, Discografica, Situacion, Interprete FROM Discos
          INTO cTitulo, nRegistro, cGenero, cProductor, cUbica, cInterpretes';
  EXECUTE STATEMENT
    cSql
  ON EXTERNAL 'C:\Ocio_ant\Tablas\Ocio.gdb'
  AS USER 'SYSDBA' PASSWORD 'masterkey';
END;
El procedimiento se crea sin problema pero al ejecutarlo me da este error:
Execute statement error at isc_dsql_prepare :
Execute statement error at isc_dsql_prepare :
Cita:
335544569 : Dynamic SQL Error
335544436 : SQL error code = -104
335544634 : Token unknown - line 2, column 11
335544382 : INTO
Statement : SELECT Album, Registro, Genero, Discografica, Situacion, Interprete FROM Discos
INTO cTitulo, nRegistro, cGenero, cProductor, cUbica, cInterpretes
Data source : Firebird::C:\Ocio_ant\Tablas\Ocio.gdb.
At procedure 'INSERT_DIS'.

SQL Code: -901
IB Error Number: 335544926
La línea 2, columna 11 es el INTO. ¿Dónde me estoy equivocando?
Responder Con Cita
  #2  
Antiguo 26-01-2024
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Estimado ha varias puntos a cambiar...

Código SQL [-]
CREATE PROCEDURE Insert_Dis
   (cTitulo VARCHAR(60), nRegistro INTEGER, cGenero VARCHAR(25), cProductor VARCHAR(50), cUbica VARCHAR(13), cInterpretes VARCHAR(50))
AS DECLARE VARIABLE cSql VARCHAR(255);
BEGIN
  --cSql = 'SELECT Album, Registro, Genero, Discografica, Situacion, Interprete FROM Discos
  --        INTO cTitulo, nRegistro, cGenero, cProductor, cUbica, cInterpretes';
  cSql = 'SELECT Album, Registro, Genero, Discografica, Situacion, Interprete FROM Discos';

  FOR EXECUTE STATEMENT cSql
      ON EXTERNAL 'C:\Ocio_ant\Tablas\Ocio.gdb'
      AS USER 'SYSDBA' PASSWORD 'masterkey'
      INTO :cTitulo, :nRegistro, :cGenero, :cProductor, :cUbica, :cInterpretes
  DO
  BEGIN
      suspend;
  END
END;

Saludos cordiales
Responder Con Cita
  #3  
Antiguo 26-01-2024
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Estimado ha varias puntos a cambiar...
Saludos cordiales
¡Perfecto! Muchas gracias
Responder Con Cita
  #4  
Antiguo 26-01-2024
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por cloayza Ver Mensaje
Estimado ha varias puntos a cambiar...
[...]
Saludos cordiales
Efectivamente funciona... Si lo ejecuto desde SQL Manager no hay ningún problema pero si lo ejecuto desde la aplicación me da este error


en esta línea
Cita:
INTO :cTitulo, :nRegistro, :cGenero, :cProductor, :cUbica, :cInterpretes
la columna 14 es el espacio inmediato al INTO.
Responder Con Cita
  #5  
Antiguo 26-01-2024
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 22
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Claro...Debes cambiar esta línea...

Código SQL [-]
CREATE PROCEDURE Insert_Dis(
   RETURNS cTitulo VARCHAR(60), nRegistro INTEGER, cGenero VARCHAR(25), cProductor VARCHAR(50), cUbica VARCHAR(13), cInterpretes VARCHAR(50)
)

Saludos cordiales
Responder Con Cita
  #6  
Antiguo 27-01-2024
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Lo tengo puesto así, con el RETURNS.
Código SQL [-]
Query->SQL->Text = "CREATE PROCEDURE Insert_Ficha";
Query->SQL->Add("RETURNS (cTitulo VARCHAR(60), nRegistro INTEGER, cGenero VARCHAR(25), cProductor VARCHAR(50), cUbica VARCHAR(13), cInterpretes VARCHAR(50))");
Query->SQL->Add("AS");
Query->SQL->Add("DECLARE VARIABLE cSql VARCHAR(100);");
Query->SQL->Add("BEGIN");
Query->SQL->Add("  cSql = 'SELECT Album, Registro, Genero, Discografica, Situacion, Interprete FROM Discos';");
Query->SQL->Add("    FOR EXECUTE STATEMENT cSql");
Query->SQL->Add("        ON EXTERNAL 'C:\Ocio_ant\Tablas\Ocio.gdb'");
Query->SQL->Add("        AS USER 'SYSDBA' PASSWORD 'masterkey'");
Query->SQL->Add("        INTO :cTitulo, :nRegistro, :cGenero, :cProductor, :cUbica, :cInterpretes");
Query->SQL->Add("    DO");
Query->SQL->Add("    BEGIN");
Query->SQL->Add("      SUSPEND;");
Query->SQL->Add("    END");
Query->SQL->Add("END;");
Query->ExecSQL();
Query->Transaction->Commit();
No obstante lo que me llama la atención es que usando el mismo código con SQL Manager si funciona y desde el programa no.

Última edición por Angel.Matilla fecha: 27-01-2024 a las 10:14:57.
Responder Con Cita
  #7  
Antiguo 27-01-2024
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No te confunde eso en lugar de algo como esto?:


Código Delphi [-]
Query->SQL->Text = "CREATE PROCEDURE Insert_Ficha "+
                   "RETURNS (cTitulo VARCHAR(60), nRegistro INTEGER, cGenero VARCHAR(25), cProductor VARCHAR(50), cUbica VARCHAR(13), cInterpretes VARCHAR(50)) "+
                   "AS "+
                   "DECLARE VARIABLE cSql VARCHAR(100);" +
                   "BEGIN "+
                   "    cSql = 'SELECT Album, Registro, Genero, Discografica, Situacion, Interprete FROM Discos'; "+
                   "     FOR EXECUTE STATEMENT cSql " +;
                   "         ON EXTERNAL 'C:\Ocio_ant\Tablas\Ocio.gdb' "+
                   "         AS USER 'SYSDBA' PASSWORD 'masterkey' "+
                   "         INTO :cTitulo, :nRegistro, :cGenero, :cProductor, :cUbica, :cInterpretes " +
                   "     DO "+
                   "     BEGIN "+
                   "       SUSPEND; "+
                   "     END "+
                   "END;";
Responder Con Cita
  #8  
Antiguo 29-01-2024
Avatar de Angel.Matilla
Angel.Matilla Angel.Matilla is offline
Miembro
 
Registrado: ene 2007
Posts: 1.350
Poder: 19
Angel.Matilla Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
¿No te confunde eso en lugar de algo como esto?
La verdad es que según me pilla lo hago de las dos maneras; ya me he acostumbrado.
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
Execute Statement rruffino SQL 16 26-10-2016 14:19:24
Error EXECUTE STATEMENT tonyskl Firebird e Interbase 3 22-01-2009 10:07:17
Execute statement Ana Tudela Firebird e Interbase 7 12-12-2006 12:27:13
Execute Statement jwmoreira Firebird e Interbase 12 22-05-2005 20:55:27
for execute statement conquer Firebird e Interbase 0 16-02-2005 22:23:49


La franja horaria es GMT +2. Ahora son las 16:09:14.


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