3

最初に私はDelphiを初めて使用するので、これは見過ごされている「ありふれた詳細」である可能性があります。【ごめんなさい】

Oracle 11g DB'Invalid Transaction Object'に接続されたデータスナップサーバーを介してトランザクションを実行しようとすると、エラーが発生します。

システムの詳細と企業の事業計画により、トランザクションの処理にClientDataSetsを使用しないことを選択しました。代わりに、Snapサーバーを非常に汎用的にし、クエリを受信して​​ネイティブタイプを返すことによってのみデータアクセスを処理しようとしています。

それがここで言われているので、私に合うものを与えているいくつかのサンプルコードがあります:

function TSnapMethods.TransUpdate: boolean;
var
  dbx: TDBXTransaction;
  params:TParams;
begin
  SqlCon.Open;
  dbx := SQLCon.DBXConnection.BeginTransaction(TDBXIsolations.ReadCommitted);
  try
      params:= TParams.Create(self);
      with Params.AddParameter do
      begin
        name:= 'param';
        DataType:= ftWideString;
        ParamType:= ptInput;
        asString:= 'Bugsville';
      end;
      with Params.AddParameter do
      begin
        name:= 'var';
        DataType:= ftWideString;
        ParamType:= ptInput;
        asString:= 'ZZZTOP';
      end;
      sqlcon.Execute('Update Name set City=:param Where Abrv=:var',params);

      SQLcon.CommitFreeAndNil(dbx);//Breaks here...
      result:= true;
  except
    Sqlcon.RollbackFreeAndNil(dbx);//Breaks here also...
    result:= false;
  end;        
end;
4

2 に答える 2

3

を呼び出すことにより、SQLConnectionオブジェクトを呼び出すときにトランザクションがコミットされたときにチェックされるSQLCon.DBXConnection.BeginTransaction()内部の設定をバイパスします。オブジェクトでトランザクションを開始しているが、同様にコミットしていないことに注意してください。TTransactionItemSQLcon.CommitFreeAndNil()DBXConnection

交換

SQLCon.DBXConnection.BeginTransaction()

SQLCon.BeginTransaction()
于 2012-10-17T19:50:34.387 に答える
0

別の情報源から、この役立つ情報を入手しました:http: //codeverge.com/embarcadero.delphi.ide/record-not-found-or-changed-by-another/1061559

トランザクション開始の場合:

transaction:=Datamodule.SqlConection.BeginTransaction(TDBXIsolations.ReadCommitted);

コミットの場合:

DataModule1.SqlConection.CommitFreeAndNil(Transacao);

ロールバックするには:

DataModule1.SqlConection.RollbackIncompleteFreeAndNil(Transacao)  

そして使用する

RollbackIncompleteFreeAndNil

代わりは

RollbackIncompleteFreeAndNil

によって参照されるように:

http://docwiki.embarcadero.com/Libraries/Tokyo/en/Data.SqlExpr.TSQLConnection.RollbackIncompleteFreeAndNil

これを試して、結果を報告してください。

于 2018-06-15T19:07:26.110 に答える