Transaction is active - Error

Delphi

16/11/2007

Ola Pessoal,

A algum tempo ja estou com esse problema e ainda nao foi solucionado, ja tentei de tudo, mas nada adianta. Mas como nao custa tentar uma outra vez. Ai vai.

Tenho o seguinte codigo. Que e responsavel pela migracao de dois bancos de dados Firebird.

////////// Procedures ////////////
procedure TFPrincipal.LerIni(var CaminhoBDANTIGO: string);
// Procedure para ler o arquivo INI.
// Variaveis globais usadas sao:
// CaminhoBDANTIGO   : String;
// CaminhoArquivoIni : TIniFile;
begin
  CaminhoArquivoIni := TIniFile.Create(´E:\BD\consultorio.ini´); //Atribuindo o caminho a variavel.
  CaminhoBDANTIGO   := CaminhoArquivoIni.ReadString(´BancoDados´, ´local_Text´, CaminhoBDANTIGO); //Assimilando o valor a Variavel CaminhoDBANTIGO.
  CaminhoArquivoIni.Free; //Liberando...
  if (CaminhoBDANTIGO = ´´) then            //Caso nao ache o Local_text...
  begin
      RichLog.Lines.Add(´Banco de dados nao encontrado no diretorio padrao.´);
      Application.CreateForm(TFOpenBox, FOpenBox);
      FopenBox.Show();
  end else
  RichLog.Lines.Add(´ANTIGO:´+CaminhoBDANTIGO); //Coloca o valor no Label.
    //Procedure para pegar endereco no registro do Windows.
  LerRegistro();
  end;




procedure TFPrincipal.LerRegistro();
//Procedure para ler o Registro do Windows em busca do caminho do Banco de Dados.
var
  Reg: TRegistry;
Begin
  Reg             := TRegistry.Create();
  with Reg Do
  Begin
    rootkey       := HKEY_LOCAL_MACHINE;
    OpenKey(´SOFTWARE\Notoriun\´,FALSE);
    CaminhoBDNOVO := ReadString(´LocalBancoTeste´);
    RichLog.Lines.Add(´NOVO:´+CaminhoBDNOVO);
    Closekey;
  End;
  Migrar();
End;

procedure TFPrincipal.GeraLOG();
var
ArquivoLOG    : TextFile;
begin
  AssignFile(ArquivoLOG, ´C:\Log Notoriun.txt´);
  Rewrite(ArquivoLOG);
  WriteLn(ArquivoLOG, RichLOG.Lines.Text);
  Flush(ArquivoLOG);
end;


procedure TFPrincipal.Migrar();
var
  I, J: Integer;
  TabelasMIGRAR              : TStringList;
Begin

  with DataBaseBDANTIGO, ConnectParams do begin
    DBName                   := ´localhost:´+CaminhoBDANTIGO;
    UserName                 := ´SYSDBA´;
    ConnectParams.Password   := ´masterkey´;
    SQLDialect               := 3;
    try
      Open;
    except
    on E: Exception do begin
        MessageDlg(´Impossivel conectar com Banco antigo.´#13 + E.Message, mtError, [mbOk], 0);
    end;
  end;
  end;
  with DataBaseBDNOVO, ConnectParams do begin
  DBName                     := ´localhost:´+CaminhoBDNOVO;
  ConnectParams.UserName     := ´SYSDBA´;
  Password                   := ´masterkey´;
  SQLDialect                 := 3;
    try
      Open;
    except
    on E: Exception do begin
        MessageDlg(´Impossivel conectar com Banco NOVO.´#13 + E.Message, mtError, [mbOk], 0);
    end;
  end;

  DataBaseBDANTIGO.Connected;
  DataBaseBDNOVO.Connected;
  TabelasMIGRAR := TStringList.Create;

  //Ordenando as tabelas, por ordem correta de migracao.
  TabelasMIGRAR.Insert(0,´PACIENTE´);
  TabelasMIGRAR.Insert(1,´PATOLOGIA´);
  TabelasMIGRAR.Insert(2,´PROCEDIMENTO´);
  TabelasMIGRAR.Insert(3,´TIPO_TEXTO´);
  TabelasMIGRAR.Insert(4,´TEXTO´);
  TabelasMIGRAR.Insert(5,´CONVENIO´);
  TabelasMIGRAR.Insert(6,´MEDICO´);
  TabelasMIGRAR.Insert(7,´CORRECAO´);
  TabelasMIGRAR.Insert(8,´MODELO´);
  TabelasMIGRAR.Insert(9,´CONSULTA´);
  TabelasMIGRAR.Insert(10,´DOCUMENTO´);
  TabelasMIGRAR.Insert(11,´IMAGEM´);

for I := 0 to TabelasMIGRAR.Count - 1 do
 Begin
  DataSetBDNOVO.Close;
  DataSetBDANTIGO.Close;

   while (TabelasMIGRAR[I] = ´PACIENTE´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´PAC_CODIGO´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´PAC_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_NOME´).AsCurrency                    := DataSetBDANTIGO.FieldByName(´PAC_NOME´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_ENDERECO´).AsCurrency                := DataSetBDANTIGO.FieldByName(´PAC_ENDERECO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_BAIRRO´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´PAC_BAIRRO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_CIDADE´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´PAC_BAIRRO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_UF´).AsCurrency                      := DataSetBDANTIGO.FieldByName(´PAC_UF´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_RG´).AsCurrency                      := DataSetBDANTIGO.FieldByName(´PAC_RG´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_CPF´).AsCurrency                     := DataSetBDANTIGO.FieldByName(´PAC_CPF´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_CEP´).AsCurrency                     := DataSetBDANTIGO.FieldByName(´PAC_CEP´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_FONE_RESIDENCIAL´).AsCurrency        := DataSetBDANTIGO.FieldByName(´PAC_FONE_RESIDENCIAL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_FONE_COMERCIAL´).AsCurrency          := DataSetBDANTIGO.FieldByName(´PAC_FONE_COMERCIAL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_CELULAR´).AsCurrency                 := DataSetBDANTIGO.FieldByName(´PAC_CELULAR´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_EMAIL´).AsCurrency                   := DataSetBDANTIGO.FieldByName(´PAC_EMAIL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_SEXO´).AsCurrency                    := DataSetBDANTIGO.FieldByName(´PAC_SEXO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_PROFISSAO´).AsCurrency               := DataSetBDANTIGO.FieldByName(´PAC_PROFISSAO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_NASCIMENTO´).AsCurrency              := DataSetBDANTIGO.FieldByName(´PAC_NASCIMENTO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_NATURAL´).AsCurrency                 := DataSetBDANTIGO.FieldByName(´PAC_NATURAL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_ESTADO_CIVIL´).AsCurrency            := DataSetBDANTIGO.FieldByName(´PAC_ESTADO_CIVIL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_EMISSOR´).AsCurrency                 := DataSetBDANTIGO.FieldByName(´PAC_EMISSOR´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAC_OBS´).AsCurrency                     := DataSetBDANTIGO.FieldByName(´PAC_OBS´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´PATOLOGIA´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´PAT_CODIGO´).AsInteger                  := DataSetBDANTIGO.FieldByName(´PAT_CODIGO´).AsInteger;
          DataSetBDNOVO.FieldByName(´PAT_NOME´).AsCurrency                   := DataSetBDANTIGO.FieldByName(´PAT_NOME´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PAT_SIGLA´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´PAT_SIGLA´).AsCurrency;
          DataSetBDNOVO.Post;
        End;


   while (TabelasMIGRAR[I] = ´PROCEDIMENTO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´PRO_CODIGO´).AsInteger                  := DataSetBDANTIGO.FieldByName(´PRO_CODIGO´).AsInteger;
          DataSetBDNOVO.FieldByName(´PRO_CODIGO_PROCEDIMENTO´).AsCurrency    := DataSetBDANTIGO.FieldByName(´PRO_CODIGO_PROCEDIMENTO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PRO_ANO´).AsCurrency                    := DataSetBDANTIGO.FieldByName(´PRO_ANO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PRO_PROCEDIMENTO´).AsCurrency           := DataSetBDANTIGO.FieldByName(´PRO_PROCEDIMENTO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´PRO_CH´).AsCurrency                     := DataSetBDANTIGO.FieldByName(´PRO_CH´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´TIPO_TEXTO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´TIP_TEX_CODIGO´).AsCurrency             := DataSetBDANTIGO.FieldByName(´PRO_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´TIP_TEX_TIPO´).AsCurrency               := DataSetBDANTIGO.FieldByName(´PRO_CODIGO_PROCEDIMENTO´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´TEXTO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´TEX_CODIGO´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´TEX_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´TEX_TIP_TEX_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´TEX_TIP_TEX_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´TEX_TEXTO´).AsCurrency                   := DataSetBDANTIGO.FieldByName(´TEX_TEXTO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´TEX_TITULO´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´TEX_TITULO´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´CONVENIO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´CON_CODIGO´).AsCurrency                  := DataSetBDANTIGO.FieldByName(´CON_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_NOME´).AsCurrency                    := DataSetBDANTIGO.FieldByName(´CON_NOME´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_RESPONSAVEL´).AsCurrency             := DataSetBDANTIGO.FieldByName(´CON_RESPONSAVEL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_FONE´).AsCurrency                    := DataSetBDANTIGO.FieldByName(´CON_FONE´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_INSTRUCAO´).AsCurrency               := DataSetBDANTIGO.FieldByName(´CON_INSTRUCAO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_VALOR_CH´).AsCurrency                := DataSetBDANTIGO.FieldByName(´CON_US´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´MEDICO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´MED_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´MED_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_NOME´).AsCurrency            := DataSetBDANTIGO.FieldByName(´MED_NOME´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_CRM´).AsCurrency             := DataSetBDANTIGO.FieldByName(´MED_CRM´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_ENDERECO´).AsCurrency        := DataSetBDANTIGO.FieldByName(´MED_ENDERECO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_BAIRRO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´MED_BAIRRO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_CIDADE´).AsCurrency          := DataSetBDANTIGO.FieldByName(´MED_CIDADE´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_UF´).AsCurrency              := DataSetBDANTIGO.FieldByName(´MED_UF´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_CEP´).AsCurrency             := DataSetBDANTIGO.FieldByName(´MED_CEP´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_CELULAR´).AsCurrency         := DataSetBDANTIGO.FieldByName(´MED_CELULAR´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_FONE´).AsCurrency            := DataSetBDANTIGO.FieldByName(´MED_FONE´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_MAIL´).AsCurrency            := DataSetBDANTIGO.FieldByName(´MED_MAIL´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MED_TIPO´).AsCurrency            := DataSetBDANTIGO.FieldByName(´MED_TIPO´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´CORRECAO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´COR_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´COR_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´COR_PALAVRA´).AsCurrency         := DataSetBDANTIGO.FieldByName(´COR_PALAVRA´).AsCurrency;
          DataSetBDNOVO.FieldByName(´COR_CORRECAO´).AsCurrency        := DataSetBDANTIGO.FieldByName(´COR_CORRECAO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´COR_TIPO´).AsCurrency            := DataSetBDANTIGO.FieldByName(´COR_TIPO´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´MODELO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´MOD_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´MOD_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MOD_MODELO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´MOD_MODELO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MOD_DESCRICAO´).AsCurrency       := DataSetBDANTIGO.FieldByName(´MOD_DESCRICAO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´MOD_CATEGORIA´).AsCurrency       := DataSetBDANTIGO.FieldByName(´MOD_CATEGORIA´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´CONSULTA´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´CON_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´CON_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_PAC_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´CON_PAC_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_CID_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´CON_CID_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_CON_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´CON_CON_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_MED_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´CON_MED_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´CON_DATA_HORA´).AsCurrency       := DataSetBDANTIGO.FieldByName(´CON_DATA_HORA´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´DOCUMENTO´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´DOC_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´DOC_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´DOC_CON_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´DOC_CON_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´DOC_PRO_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´DOC_PRO_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´DOC_DOCUMENTO´).AsCurrency       := DataSetBDANTIGO.FieldByName(´DOC_DOCUMENTO´).AsCurrency;
          DataSetBDNOVO.Post;
        End;

   while (TabelasMIGRAR[I] = ´IMAGEM´) do
        Begin
          DataSetBDANTIGO.Open;
          DataSetBDNOVO.Open;
          DataSetBDNOVO.FieldByName(´IMG_CODIGO´).AsCurrency          := DataSetBDANTIGO.FieldByName(´IMG_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´IMG_PAC_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´IMG_PAC_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´IMG_PAT_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´IMG_PAT_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´IMG_CON_CODIGO´).AsCurrency      := DataSetBDANTIGO.FieldByName(´IMG_CON_CODIGO´).AsCurrency;
          DataSetBDNOVO.FieldByName(´IMG_IMAGEM´).AsCurrency          := DataSetBDANTIGO.FieldByName(´IMG_IMAGEM´).AsCurrency;
          DataSetBDNOVO.FieldByName(´IMG_DATA´).AsCurrency            := DataSetBDANTIGO.FieldByName(´IMG_DATA´).AsCurrency;
          DataSetBDNOVO.Post;
        End;


     End;
  End;
  DataSetBDNOVO.ApplyUpdates;
End;
procedure TFPrincipal.FormClose(Sender: TObject; var Action: TCloseAction);
Begin
  Application.Terminate();
End;



procedure TFPrincipal.FormCreate(Sender: TObject);
begin
  LerIni(CaminhoBDANTIGO);
end;

end.



Tudo bem, compila normal e na teoria funcionaria. Mas o fato e que toda vez que compilo, quando ele vai abrir o DataBaseBDANTIGO no primeiro While, relativo a tabela PACIENTE, ele simplesmente da ´Transaction is active´.

Ou seja, ele diz que a transaction esta ativada em algum lugar, mas nao esta tendo nada disso no source. Tenho um transaction para cada banco.

Os DB e os DS estao com os transactions correspondentes assinalados. A propriedade Active dos transactions esta FALSE.

Bem, e isso, caso alguem possa me dar uma luz.

Grato!


Sergiofigueras

Sergiofigueras

Curtidas 0

Respostas

Sergiofigueras

Sergiofigueras

16/11/2007

Up!


GOSTEI 0
Sergiofigueras

Sergiofigueras

16/11/2007

Up!


GOSTEI 0
POSTAR