[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