![]() |
Quiero correr un archivo .sql pero no logro hacer un create / insert
Tengo un sistema que realiza consultas e inicializa una base de datos Firebird, todo ello gracias a que cargo un archivo con comandos sql (.sql) y los voy ejecutando 1 x 1.
Para los selects uso un IBTransaction (inactivo, apunta al IBDatabase), un IBDatabase (activo), un IBQuery (inactivo, apunta al IBDatabase y al IBTransaction) y un DataSource (activo, apunta a IBQuery) para acceder a una base de datos Firebird. Con este no tengo problemas para obtener la información (IBQuery.Active=true). El problema es cuando quiero hacer un CREATE y posteriormente un INSERT sobre esa tabla. Si IBTransaction esta inactiva, recibo un error (Transaction is not active) cuando quiero hacer un create (IBQuery.ExecSql) y no llega al INSERT. Si por el contrario, activo la IBTransaction y corro el programa, el error se presenta al hacer el INSERT, indicándome que no existe dicha tabla. Igualmente probé sustituyendo el IBQuery con un IBSql (.ExecQuery) y tampoco logro ejecutar todos los comandos de mi archivo .sql. Agradeceré me orienten acerca de que estoy haciendo mal. gracias |
Si autocommit es true u on entonces no debrias tener problemas cuando la transaccion esta inactiva.
|
pues si esta activa, es lo curioso
Mejor incluyo el codigo, no vaya a ser que este haciendo una burrada de primaria (se vale montoneo, sirve que aprendo). :confused: Tengo un SQL por linea (algunas lineas las tengo como comentario, por lo que no las ejecuto), y siempre esta el CREATE previo al INSERT sobre dicha tabla.
Cita:
|
Parece asunto de los insert
Continuando con mi aventura... separe el SQL en tres. Borrado de tablas, creacion de tablas e insert de datos, a seleccionar segun lo que tuviera en un combobox. En el memo mem_Queries guardo los queries a realizar. Con las primeras dos (drops y creates) no hubo problema, el asunto ha sido con los insert.
Código:
procedure Tfrm_inicializador.bbtn_EjecutarClick(Sender: TObject); 2) Prob 2. Si no declaro llave alguna y cree ese campo ID como un campo normal, al querer hacer el insert obtengo SQL Parse error: EOF in string detected. Lo curioso es que si ejecuto las mismas instrucciones mediante la herramienta isql de firebird, no obtengo error, por ende, no lo considero error de sintaxis. ideas? |
Sumario: Problema identificado
Pues resulta que aún cuando ejecutaba línea por línea los INSERT (eran aprox 160-180), en uno de los INSERT (como el 35-40) había una comilla adicional, por lo que no lo procesaba correctamente.
Lo que me confundía :o es que el error lo marcaba en el primer INSERT, aún cuando lo corria paso a paso y me indicaba que estaba corriendo el primer INSERT (según eso aún no llegaba a la línea del error). No se si realiza internamente un preload de todo y luego ejecuta, o a que se deba eso, pero... por si es de su interés, les dejo por si alguien tiene el mismo problema. Gracias por su ayuda, |
La franja horaria es GMT +2. Ahora son las 13:07:39. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi