orc 0 Denunciar post Postado Abril 15, 2008 Bom dia eu uso o componente MDO e gostaria de saber como faço pra controlar transações para entradas de scripts como stored procedures etc , estou desenvolvendo um compilador de scripts e não estou conseguindo o resultado que queria Exemplo : eu tenho script de banco onde no mesmo script tenho : CREATE TABLE CLIENTE ( CODCLIENTE INTEGER NOT NULL, NOMECLIENTE VARCHAR(50) CHARACTER SET NONE COLLATE NONE); ALTER TABLE CLIENTE ADD PRIMARY KEY (CODCLIENTE); CREATE GENERATOR CLIENTE_CODCLIENTE_GEN; SET TERM ^; // Tiro esse set term para dar erro CREATE PROCEDURE CLIENTE_CODCLIENTE_AUTOINC RETURNS( NEW_VALUE INTEGER) AS BEGIN /* Cria o Generator */ NEW_VALUE = GEN_ID(CLIENTE_CODCLIENTE_GEN, 1); END^ SET TERM; ^ só que quando eu compilo esse script ele grava no banco a tabela e o generator eu gostaria que ele abortasse toda a transação não gravando nem a tabela nem o generator. código no delphi : try { Verificar se existe a pasta Scripts Verificar se existe algum arquivo na pasta Scripts Percorrer a pasta Scripts compilando os arquivos de scripts pegando o nome jogando em um campo memo } If not dtm.Transacao.InTransaction then Dtm.Transacao.StartTransaction; // with MDOScript1 do begin MDOScript1.Script.Clear; // Limpa os Scripts do Componente MDOScript1.Script.Text := MemoMensagens.Lines.Text; MDOScript1.ExecuteScript; // Executa o Script selecionado end; // Dtm.Transacao.Commit; ShowMessage( 'Mensagem : Script Compilado com Sucesso !!!' ); except on E: Exception do begin Dtm.Transacao.Rollback; ShowMessage( 'ERRO : Erro ao Compilar Script de Banco de Dados !!!' ); end; end; // Salva o log das mensagens exibidas no memo MemoMensagens.Lines.SaveToFile(ExtractFilePath( Application.ExeName )+'\'+'LOG.txt'); Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Abril 16, 2008 No BD que esta utilizando, não tem nada do tipo como autocommit ? Compartilhar este post Link para o post Compartilhar em outros sites
orc 0 Denunciar post Postado Abril 16, 2008 No BD que esta utilizando, não tem nada do tipo como autocommit ? no meu componente ha esta opção mais esta desabilitada , no banco de dados ha esta opção como verifico ???? estou usando firebird Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo R Moura 0 Denunciar post Postado Abril 16, 2008 Eu faço assim: SuaConexao.StartTransaction; Try //aqui vai o seu bloco SQL SuaConexao.Commit; except SuaConexao.Rollback; funciona igual um coco. Compartilhar este post Link para o post Compartilhar em outros sites
orc 0 Denunciar post Postado Abril 17, 2008 isso eu fiz por isso postei no tópico da uma olhadinha la em cima no código Compartilhar este post Link para o post Compartilhar em outros sites
Marcelo R Moura 0 Denunciar post Postado Abril 17, 2008 Você precisa colocar o StartTransaction fora do try...veja que voce percorre a pasta scripts depois dá o starttransaction... Compartilhar este post Link para o post Compartilhar em outros sites