Commit no IB e no FB
Olá!!
Criei uma função para pesquisar em uma tabela cfe abaixo:
function ConsultaTbconfig(Opcao, id: String):boolean;
//=========================
var Consulta: String;
wretorno: String[1];
begin
wretorno := ´0´;
if DMbd1.SQLConn1.Connected = true then begin
Consulta := ´select * from TBCONFIG where df is null and ID = ´+ #39 + (id) + 39;
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DMbd1.SQLConn1.StartTransaction(Transacao);
DMbd1.SQLQue.Close;
DMbd1.SQLQue.SQL.Clear;
DMbd1.SQLQue.SQL.Append(Consulta);
DMbd1.SQLQue.Open;
DMbd1.SQLConn1.Commit(Transacao);
except
on Exc:Exception do begin
if Opcao = ´´ then begin
Mostraexcecao(Exc.Message,´Ao consultar Tbconfig!´);
end;
DMbd1.SQLConn1.Rollback(Transacao);
end;
end;
*********************************************
aRDados[0] := ´´;
If (DMbd1.SQLQue.Fields.FieldByName(´ID´).AsInteger = StrtoInt(id)) then begin
aRDados[0] := DMbd1.SQLQue.Fields.FieldByName(´DESCRICAO´).AsString;
wretorno := ´1´;
end;
*********************************************
if Opcao = ´´ then begin
DMbd1.SQLQue.Close;
DMbd1.SQLQue.SQL.Clear;
end;
end;
if wretorno = ´1´ then begin
Result := True;
end else begin
if Opcao = ´´ then begin
Application.MessageBox(´ Cadastro Informado Não Encontrado... ´,´Aviso´,mb_OK+mb_IconExclamation);
Result := False;
end;
end;
end;
O problema é o seguinte:
Com o Interbase 6.5... funciona bem.
Quando uso o FireBird 1.5.. o Commit na Transacao deve fechar a Query,
por que me retorna a seguinte mensagem ... QUERY NOT OPEN e não
consigo usar a parte entre asteriscos acima, como quero.
Então, o Commit no IB e no FireBird se comportam de maneira
diferente, ou falta alguma configuração na conexão?
Obrigado!!!
Jose.
:)
Criei uma função para pesquisar em uma tabela cfe abaixo:
function ConsultaTbconfig(Opcao, id: String):boolean;
//=========================
var Consulta: String;
wretorno: String[1];
begin
wretorno := ´0´;
if DMbd1.SQLConn1.Connected = true then begin
Consulta := ´select * from TBCONFIG where df is null and ID = ´+ #39 + (id) + 39;
try
Transacao.TransactionID := 1;
Transacao.IsolationLevel := xilREPEATABLEREAD;
DMbd1.SQLConn1.StartTransaction(Transacao);
DMbd1.SQLQue.Close;
DMbd1.SQLQue.SQL.Clear;
DMbd1.SQLQue.SQL.Append(Consulta);
DMbd1.SQLQue.Open;
DMbd1.SQLConn1.Commit(Transacao);
except
on Exc:Exception do begin
if Opcao = ´´ then begin
Mostraexcecao(Exc.Message,´Ao consultar Tbconfig!´);
end;
DMbd1.SQLConn1.Rollback(Transacao);
end;
end;
*********************************************
aRDados[0] := ´´;
If (DMbd1.SQLQue.Fields.FieldByName(´ID´).AsInteger = StrtoInt(id)) then begin
aRDados[0] := DMbd1.SQLQue.Fields.FieldByName(´DESCRICAO´).AsString;
wretorno := ´1´;
end;
*********************************************
if Opcao = ´´ then begin
DMbd1.SQLQue.Close;
DMbd1.SQLQue.SQL.Clear;
end;
end;
if wretorno = ´1´ then begin
Result := True;
end else begin
if Opcao = ´´ then begin
Application.MessageBox(´ Cadastro Informado Não Encontrado... ´,´Aviso´,mb_OK+mb_IconExclamation);
Result := False;
end;
end;
end;
O problema é o seguinte:
Com o Interbase 6.5... funciona bem.
Quando uso o FireBird 1.5.. o Commit na Transacao deve fechar a Query,
por que me retorna a seguinte mensagem ... QUERY NOT OPEN e não
consigo usar a parte entre asteriscos acima, como quero.
Então, o Commit no IB e no FireBird se comportam de maneira
diferente, ou falta alguma configuração na conexão?
Obrigado!!!
Jose.
:)
Ejose
Curtidas 0
Respostas
Gandalf.nho
25/10/2004
Deve ter algo errado é com a versão do IB 6.5, pq o comportamento com o FB está correto. Você está comitando a transação da query logo após abri-la o que faz com que ela seja fechada. Como você quer acessar os dados se a tabela está fechada? Deixe para comitar após pegar os dados desejados. Como o comportamento deve ser o mesmo para IB e FB, deve estar diferente o código nos 2 casos.
GOSTEI 0