Announcement

Collapse
No announcement yet.

Access Datenänderungen werden erst sichbar nach Programmende / -start

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

  • Access Datenänderungen werden erst sichbar nach Programmende / -start

    Hallo,
    <br>
    <br>ich hoffe es kann mir hier jemand helfen. Ich habe ein ganz eigenartiges Phänomen mit Access.
    <br>Front End: D5 / ADO (Clients mit win95 und winnt)
    <br>Back End: Access 97 / liegt auf einem Großrechner (ich glaube eine AS400)
    <br>
    <br>Öffnet nun ein Client Das Programm, kann er ganz normal arbeiten.
    <br>Öffnet nun ein zweiter Client das Programm, so kann dieser auch ganz normal arbeiten. Jedoch sieht Client1 nicht die Änderungen(usw.) von Client2 und umgekehrt. Sie sehen erst die Änderungen(usw.) nachdem das Programm geschlossen und wieder geöffnet wurde (ein simples schließen/öffnen der Tabelle reicht nicht aus). Nach 5 Minuten Arbeit mit zwei Personen ist die Datenbank defekt und muß repariert werden.
    <br>
    <br>Eigenartiger Weise funktioniert das alles sobald die MDB auf einen Windows Client kopiert und von dort freigegeben wird (mit einem nt server habe ich es noch nicht getestet, aber ich vermute doch sehr stark wenn es von einem win95 aus läuft, dann auch von nt aus).
    <br>
    <br>Hat hier jemand schon mal einen solchen Effekt erlebt?
    <br>
    <br>Danke!
    <br>
    <br>mfg
    <br>ps

  • #2
    Hallo A.Kosch,
    <br>
    <br>Sie schreiben in:
    <br><a href="/webx?14@@.ee86865/2">Andreas Kosch "Ojee Er speichert nicht immer, obwohl..." 20.08.2001 07:28</a>
    <br>
    <br>über einen ähnlichen Effekt im Zusammenhang mit Transaktionen. Da ich hier auch Transaktionenen verwende ist nun meine Frage:
    <br>
    <br>1) Kann das mit dem temporären speichern der Transaktion einen solchen Effekt hervorufen?
    <br>2)Wieso funktioniert es mit der Freigabe auf dem Win95 Client, aber nicht über dem Server (Großrechner)? (Eigentlich müßte doch wenn es an den Transaktionen liegt der gleiche Effekt auftreten oder?)
    <br>3)Kann man irgendwo im Aufbau der Connection einstellen, das die Transaktionen nach dem Commit direkt gespeichert werden?
    <br>
    <br>CursorLocation: clServer
    <br>LockType: Optimistic
    <br>
    <br>4)Kann man bei einem Serverseit Cursor auf einer Access DB eigentlich mit Transaktionen arbeiten?
    <br>
    <br>Danke!
    <br>
    <br>mfg
    <br>P

    Comment


    • #3
      Hallo,

      hinter einer ACCESS-Datenbank steckt kein SQL-Server, sondern eine ganz normale dateibasierende Datenbank (Desktop-Datenbank alias ISAM-Datenbank). Jeder Client arbeitet mit der gleichen, auf dem Server liegenden Datei, wobei die Datenverarbeitung ausschließlich auf dem Client-Rechner stattfindet. Da ACCESS kein SQL-Server ist, müssen die Transaktionen simuliert werden, indem jeder Client temp. Tabellen auf seinem Rechner verwendet. Daher glaube ich nicht, dass hier die Ursache des Problems liegt.

      Statt dessen gehe ich davon aus, dass immer dann, wenn die gemeinsam von allen Clients genutzte MDB-Datei auf der AS400 liegt, entweder <br>
      a) das Erkennen von Dateiänderungen, oder <br>
      b) das Synchronisieren der Dateisperren (Oplocks ?)<br>
      das eigentliche Problem ist. Um ACCESS gegenüber den Mitbewerbern als besseres Produkt darzustellen, hat Microsoft auf einige Tricks zur Performancesteigerung zurückgegriffen (siehe Cache der JetEngine). Eventuell arbeitet diese Optimierung nur dann stabil, wenn die MDB-Datei auf einem Win32-Rechner liegt

      Comment


      • #4
        HAllo

        wenn ich das richtig sehe dann wir eine ADO vebindung zur DB verwendet
        , da sollte man(n) sich den code anschauen und sollte vielleicht versuche rauszufinden wann die Aenderungen abgespeichert werden ..
        d.h. der syntax bei ADo muß nach aender der daten gespeichert werden und nicht zwischengespeichert...

        einwenig kompliziert zu erklaeren wenn du noch infos haben willst mail einfach [email protected]

        Comment


        • #5
          <br><b>@Sandro</b>: Danke!
          <br>du meinst doch sicher eine Property aus dem ADO Connection String. Aber welche? Ach ja mein ADO Connection String steht am Ende dieser Nachricht.
          <br>
          <br><b>@A.Kosch</b>: Danke!
          <br>Ich würde gerne Ihren Code aus
          <br>"Andreas Kosch "Ojee Er speichert nicht immer, obwohl..." 20.08.2001 07:28 "
          <br>testen.
          <br>Aber wie kann ich die JRO_TLB und ADODB_TLB Unit einbinden?
          <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>
          <br>
          <br>Gibt es nicht irgend eine Jet OLEDB: Einstellung, mit der man im ConnectionString einstellen kann, das Transaktionen direkt ausgeführt werden.
          <br>Z.B.:
          <br>Jet OLEDB: TransactionCommitMode=1
          <br>(A value if 1 indicates that the database commits updates immediately, rather than caching them.)
          <br>Wenn man das einstellen würde kann man dann auch noch ein Rollback machen (laut docu. hört sich das nicht so an)?
          <br>Was ist eigentlich "Jet OLEDB:SFP" (dazu habe ich nichts gefunden)?
          <br>
          <br>Ach ja können Sie vieleicht in Ihrem neuen ADO Buch noch eine elektronische ADO Referenz beilegen, bei der man zu den jeweiligen ADO Properties DataTypes direkt zu den zugehörigen ADO Constans weiter geleitet werden kann? (Oder gibt es sowas schon ? Wo?)
          <br>
          <br>Danke!
          <br>
          <br>mfg
          <br>PS
          <br>
          <pre>ADO Connection String (Access97):
          Provider=Microsoft.Jet.OLEDB.4.0;
          User ID=Admin;
          Data Source=E:\Test.mdb;
          Mode=Share Deny None;
          Extended Properties="";
          Jet OLEDB:System database="";
          Jet OLEDB:Registry Path="";
          Jet OLEDBatabase Password=XXXX;
          Jet OLEDB:Engine Type=4;
          Jet OLEDBatabase Locking Mode=0;
          Jet OLEDB:Global Partial Bulk Ops=2;
          Jet OLEDB:Global Bulk Transactions=1;
          Jet OLEDB:New Database Password="";
          Jet OLEDB:Create System Database=False;
          Jet OLEDB:Encrypt Database=False;
          Jet OLEDBon't Copy Locale on Compact=False;
          Jet OLEDB:Compact Without Replica Repair=False;
          Jet OLEDB:SFP=False
          </pre&gt

          Comment


          • #6
            Hallo,

            <i>&gt;Aber wie kann ich die JRO_TLB und ADODB_TLB Unit einbinden?</i>

            dazu muss in Delphi der Menüpunkt <i>Projekt | Typbibliothek importieren</i> aufgerufen werden. Dort ist u.a. die Zeile <b>Microsoft Jet and Replication Objects 2.x Library</b> in der Liste zu finden. Über den Button <i>Unit anlegen</i> baut Delphi dann die JRO_TLB.pas zusammen. Das gleiche gilt für die <b>Microsoft ActiveX Data Object 2.x Library</b> (ADODB_TLB.pas).

            Microsoft dokumentiert alles zum Thema OLE DB und ADO in der Hilfedatei des <i>MDAC SDK</i>, wobei dieser Teil zum <i>Microsoft Platform SDK</i> (insg. über 170 MByte Hilfedateien im CHM-Format) gehört. Noch ausführlicher und noch mehr Beispiele sind auf der DVD der <i>MSDN Library</i> zu finden.

            In dem <i>Appendix B: Microsoft Jet 4.0 OLE DB Properties Reference</i> ist dem Eintrag Jet OLEDB:SFP die Beschreibung <b>N/A</b> zugeordnet (d.h. diese Eigenschaft wird von Microsoft nicht dokumentiert).
            &#10

            Comment

            Working...
            X