Mejor incluyo el codigo, no vaya a ser que este haciendo una burrada de primaria (se vale montoneo, sirve que aprendo).

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:
Código:
procedure Tfrm_inicializadorDB.bbtn_EjecutarClick(Sender: TObject);
var
i: integer;
str_query, str_table: string;
begin
ibt_IBTransaction.StartTransaction;
// Corro 1x1 los datos cargados previamente en un memo
for i:= 0 to mem_Queries.Lines.Count do
begin
str_query:= Trim(mem_Queries.Lines.Strings[i]);
if (Length(str_query) > 5) then
begin
if (Pos('CREATE TABLE ',str_query)>0) then
begin
// Es creacion de tabla, intento DROP sobre tabla anterior
// identifico nombre de tabla
str_table:= str_query;
Delete(str_table,1,13);
Delete(str_table,Pos(' ',str_table),Length(str_table));
// intento hacer un drop
ibq_IBQuery.SQL.Text:= 'DROP TABLE '+ str_table;
try
ibq_IBQuery.ExecSQL;
finally end;
// ahora si ejecuto la creacion de la tabla
ibq_IBQuery.SQL.Text:= str_query;
ibq_IBQuery.ExecSQL;
ibt_IBTransaction.Commit;
end
else if (Pos('INSERT INTO ',str_query)>0) then
begin
// inserto en la tabla recien creada nuevos valores
ibq_IBQuery.SQL.Text:= str_query;
ibq_IBQuery.ExecSQL;
ibt_IBTransaction.Commit;
end;
end;
end; // for
ibt_IBTransaction.Commit;
// ibt_IBTransaction.Active:= false;
ShowMessage('Base de datos inicializada');
Close;
end;
|
gracias.