Criar e dar os inserts numa tabela na mesma transação

01/04/2013

1

Boa tarde a todos!

Como eu poderia estruturar uma transação para criar e dar os inserts numa tabela na mesma transação??
Estou fazendo:
var
  TID: TTransactionDesc;
begin
  TID.TransactionID := 1;
  TID.IsolationLevel:= xilREADCOMMITTED;
  Dm.MyDB.StartTransaction(TID);

  try
    Dm.Sis_ExecuteSql.Close;
    Dm.Sis_ExecuteSql.SQL.Clear;
    Dm.Sis_ExecuteSql.SQL.Text := 'CREATE TABLE TESTE (PORC_ID INTEGER NOT NULL, PORC_EXIBEESTOQUEZERADO SMALLINT DEFAULT 0 NOT NULL, PORC_ALTERARVALORUNITARIO SMALLINT DEFAULT 0 NOT NULL);';
    Dm.Sis_ExecuteSql.ExecSQL();

    Dm.Sis_ExecuteSql.Close;
    Dm.Sis_ExecuteSql.SQL.Clear;
    Dm.Sis_ExecuteSql.SQL.Text := ' INSERT INTO TESTE VALUES(1,0,0)';
    Dm.Sis_ExecuteSql.ExecSQL();
    Dm.MyDB.commit(TID);
  except
    MessageDlg('Falha ao definir os parâmetros. Comunique ao suporte', mtError, [mbOK], 0);
    Dm.MyDB.Rollback(TID);
  end;
end;


Mas desta forma, me retorna que a tabela não existe na hora do insert! Se no ibexpert eu fizer:
   CREATE TABLE TESTE (PORC_ID INTEGER NOT NULL, PORC_EXIBEESTOQUEZERADO SMALLINT DEFAULT 0 NOT NULL, PORC_ALTERARVALORUNITARIO SMALLINT DEFAULT 0 NOT NULL);
   INSERT INTO TESTE VALUES(1,0,0);
   commit work; 

Funciona normal! Qual a diferença entre a transação que criei e a do IBExpert? O Ibexpert criar uma transação para cada linha do script acima?? Como estruturar para que haja uma única transação??

Obrigado!
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira