[firebase-br] Não Gera Erro WITH LOCK
Jorge Henrique - América Móveis
jorgehenrique em americamoveis.com
Ter Jul 10 07:51:17 -03 2007
Eu acredito que seja por causa do IBSQL.Free. A transação fica mto pouco
tempo aberta, haja visto que vc descarrega o componente da memoria após
IBSQL.Open. Me corrijam se eu estiver equivocado...
Tente fazer com componentes "reais" ao invés de criá-los em runtime.
[]´s
Jorge Henrique
Anderson Miranda Barrozo escreveu:
> Jorge Henrique,
>
> A coisa ta mais complicada que eu pensava. Eu fiz o que vc falou mas
> continua a mesma coisa. Nao da erro. Veja o meu codigo abaixo. Eu criei uma
> funcao e coloquei evento afteredit.
>
> procedure TTCadArea.TravaRegistro(Arquivo, Campo: String; DS:TDataSet);
> var
> // TD: TTransactionDesc;
> IBSQL: TSQLDataSet;
> begin
> IBSQL := TSQLDataSet.Create(Application);
> Try
> Randomize;
> { Abre uma transação para controlar o processamento todo }
> TD.TransactionID := Random(65635);
> TD.IsolationLevel := xilREADCOMMITTED;
> dm.Conexao.Params.Strings[11]:='False';
> DM.Conexao.StartTransaction(TD);
> IBSQL.SQLConnection := DM.Conexao;
> IBSQL.Close;
> // IBSQL.CommandText := 'UPDATE '+Arquivo+ ' SET '+Campo+' = '+Campo+'
> WHERE '+Campo+'='+Ds.FieldByName(Campo).AsString;
> IBSQL.CommandText := 'SELECT '+Campo+ ' FROM '+Arquivo+' WHERE
> '+Campo+'='+Ds.FieldByName(Campo).AsString+' WITH LOCK';
> Try
> IBSQL.Open;
> except on E: Exception do {Em caso de erro, aborta todo processamento }
> bEGIN
> SHOWMESSAGE('TRAVOU');
> if DM.Conexao.InTransaction then
> DM.Conexao.Rollback(TD);
> eND;
> End;
> finally
> IBSQL.Free;
> end;
>
>
>
> ////////////////////////////////////////////////////////////////////////////////////////////////////
Mais detalhes sobre a lista de discussão lista