Announcement

Collapse
No announcement yet.

verlorene Transaktion

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • verlorene Transaktion

    Bei der Verwendung von ADO mit Transaktionen gibt es bei uns folgendes Problem:

    Ein Formular mit TAdoConnection und TAdoDataset (AdoExpress mit Delphi 5 und Delphi 7, MS-SQL-Server=Version 8.00.760 SP3)

    AdoConnection.CursorLocation steht auf clUseServer

    Attributes auf xaCommitRetaining,xaAbortRetaining

    nach jedem Post wird über das AdoDataset-Ereignis AfterPost zum Beenden der Transaktion CommitTrans aufgerufen. Sobald ich einen Datensatz einfüge und dann Post aufrufe erscheint der Fehler:

    "ITransaction::Commit oder ITransaction::Abbruch wurde aufgerufen und das Objekt wurde stillgelegt".

    Kennt jemand dieses Problem und wenn ja, gibt es eine Lösung?

    (Cursorlocation auf clUseClient bringt nichts da dann bei der Verwendung von Joins Datensätze nicht wiedergefunden werden)

  • #2
    Hallo,

    bei ADO gilt generell die Regel, dass clUseServer nur für den Zugriff auf ACCESS-Datenbanken die richtige Wahl ist. Wenn man vom Standardweg abweicht und auf Probleme trifft, sollte man als Erstes die Kommunnikation zum Server über den <i>Profiler</i> überwachen und dort nach Auffälligkeiten suchen (implicit_transaction etc.).

    &gt;..Datensätze nicht wiedergefunden werden

    Immer dann, wenn ADO Probleme mit dem Auffinden von Datensätzen in einer JOIN-Abfrage hat, kann außer <b>Unique Table</b> auch noch die Eigenschaft <b>Resync Command</b> verwendet werden.
    <pre>
    <b>uses</b> ADOInt;
    <br>
    <b>resourcestring</b>
    cRC = <font color="#9933CC">'select m.id, d.id, m.name, d.email from tbl_master m '</font> +
    <font color="#9933CC">'join tbl_detail d on m.ID = d.MasterID '</font> +
    <font color="#9933CC">'where d.ID = '</font>;
    <br>
    <b>procedure</b> TForm1.ADODataSet1AfterOpen(DataSet: TDataSet);
    <b>begin</b>
    ADODataSet1.Recordset.Properties[<font color="#9933CC">'Unique Table'</font>].Value := <font color="#9933CC">'TBL_DETAIL'</font>;
    <b>end</b>;
    <br>
    <b>procedure</b> TForm1.DBNavigator1BeforeAction(Sender: TObject;
    Button: TNavigateBtn);
    <b>var</b>
    sRC : <b>String</b>;
    <b>begin</b>
    <b>if</b> Button = nbRefresh <b>then</b>
    <b>if</b> CheckBoxRC.Checked <b>then</b>
    <b>begin</b>
    sRC := cRC + ADODataSet1ID_1.AsString;;
    <b>with</b> ADODataSet1.Recordset <b>do</b>
    <b>begin</b>
    Properties[<font color="#9933CC">'Resync Command'</font>].Value := sRC;
    Resync(adAffectCurrent, adResyncAllValues);
    <b>end</b>;
    MemoSQL.Lines.Clear;
    MemoSQL.Lines.Add(sRC);
    Abort;
    <b>end</b>;
    <b>end</b>;
    </pre&gt

    Comment


    • #3
      Vielen Dank! hat funktioniert

      Comment

      Working...
      X