Announcement

Collapse
No announcement yet.

Ojee Er speichert nicht immer, obwohl...

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

  • Ojee Er speichert nicht immer, obwohl...

    ich jedesmal eine eigene Transaktion mache und die auch wieder schließe!!

    also vor jedem append oder edit:
    <pre>
    DataModule.AdoConnection.begintrans; // Initialisiere Transaktion
    </pre>

    und nach jedem post:
    <pre>
    DataModule.AdoConnection.CommitTrans; // Bestätige Transaktion und schicke alle Änderungen in die Tabelle
    </pre>

    INFO: Access 2000, ADO, Delphi5

    Wer kann mir den Grund nennen?

  • #2
    Das darf nicht passieren!!

    Comment


    • #3
      <br>Ist der Fehler reproduzierbar?
      <br>Passiert das nur wenn mehrere Benutzer auf die Datenbank zugreifen?
      <br>
      <br>mfg
      <br>P

      Comment


      • #4
        Hallo,

        hinter ACCESS verbirgt sich <b>keine</b> SQL-Datenbank, sondern eine Desktop-Datenbank, bei der die <i>Microsoft Jet Engine</i> für das Übersetzen der SQL-Anweisungen in die nativen Datenbankfunktionen zuständig ist. Daher werden Transaktionen wie bei der BDE+Paradox nur simuliert. Aus Performancegründen schreibt die Jet Engine alle Änderungen zuerst in den lokalen Cache und erst später in die MDB.

        Um zu prüfen, ob dieser Cache die Ursache für dieses Problem ist, kann man diesen explizit leeren. Dazu wird in Delphi die Typbibliothek für die <i>Microsoft Jet and Replication Objects</i> (JRO_TLB) importiert. Nachdem man sich einen Interface-Zeiger auf die Jet Engine geholt hat, sorgt die Methode <b>RefreshCache</b> dafür, dass alle anstehenden Änderungen in die MDB geschrieben werden:
        <pre>
        uses JRO_TLB, ADOInt, ADODB_TLB;

        procedure TForm1.Button1Click(Sender: TObject);
        var
        aJet : IJetEngine;
        aConn : _Connection;
        begin
        ADOConnection1.Connected := True;
        aJet := CoJetEngine.Create;
        aConn := ADODB_TLB._Connection(ADOConnection1.ConnectionObj ect);
        aJet.RefreshCache(ADODB_TLB._Connection(aConn));
        StatusBar1.SimpleText := 'RefreshCache erfolgreich aufgerufen.';
        end;
        </pre>
        P.S: Welcher Wert für LockType wird verwendet

        Comment


        • #5
          infos: also die datenbank liegt am Server, in dem Fall gab nur eine Benutzerin daten ein...

          LockType :ltOptimistic wird verwende

          Comment


          • #6
            Hi,
            <br>
            <br>passiert das auch wenn die DB Loakl liegt?
            <br>Was ist das für ein Server? NT oder was exotisches?
            <br>Hilft der Code von A.Kosch?
            <br>
            <br>mfg
            <br>P

            Comment


            • #7
              Hallo,

              wenn es nur einen Benutzer gibt, kann es am Cache nicht liegen, denn der Cache wird ja auf dem Rechner dieses einzigen Benutzers geführt, so dass die Jet Engine immer die aktuellsten Daten hat (einmal aus der MDB und zum Teil aus dem eigenen Cache).

              Wie sieht das Ganze im Detail aus? Wie wird das "Fehlen" der Aktualisierung erkannt

              Comment


              • #8
                HI

                Ich kann nur das sagen was meine kunden MIR gesagt haben, sie meinten das sie positionen eingeben und das sie dann (auch nach schliessen der anwendung) die positionen einfach nicht mehr finden..

                ich kann das nicht nachvollziehen, aber ich glaube den kunden..

                NT SERVER 4.0 Service Pack 6a

                in detail? wie der code aussieht

                Comment

                Working...
                X