Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

orc

Controlar Transações

Recommended Posts

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.