Microsoft Excel

Herbers Excel/VBA-Archiv

ADO-Verbindung / Exklusivzugriff


Betrifft: ADO-Verbindung / Exklusivzugriff von: Hans-Jürgen
Geschrieben am: 26.09.2019 13:14:19

Hallo Wissende,

ich bin noch bei meiner Excel-Anwendung (Frontend), mit dem eine Access-Datenbank verwaltet wird. Das Frontend selbst ist schreibgeschützt, die Anwender senden nur kurze "Befehle" (Selects/Update/Insert)

Selbst wenn zwei Anwender nahezu zeitlich an die Datenbank senden, ist das im Prinzip kein Problem.

Der erste Mitarbeiter allerdings, der sich morgens (=anderes Datum) anmeldet, sorgt für die Ausführung eines längeren Scripts, diverse Aufräumarbeiten in der Datenbank und die Komprimierung. Das läuft ca. 1-2 Minuten (wir haben ein lahmes Netzwerk).

Ich möchte nun vermeiden, dass in dieser Zeit ein anderer Mitarbeiter diesen Tagesstart durchführt bzw. mir sparen, die Abfrage programmäßig abzufangen.

Nun zur Frage: Gibt es die Möglichkeit, die Verbindung auf "Exklusiv" zu stellen?
Und wenn ja: Kann man einbauen, dass das System (ohne dass der Anwender das merkt) nach einer Zeit von ca. 10 Sekunden es nochmal probiert?

Hier der ("geklaute") Code, mit dem ich die Verbindung herstelle:

          Set objADODBConnect = New ADODB.Connection
          
          If objADODBConnect Is Nothing Then
               With objADODBConnect
                    .CursorLocation = adUseClient
                    .Mode = adModeShareDenyNone
                    .Provider = strDBProvider
                    .ConnectionString = "Data Source=" & strDBPfad & strDBName & strDBEndung
                    .Properties("Jet OLEDB:Database Password") = strPasswort
                    .Open
               End With
          End If
Vielen Dank!

Hans-Jürgen

  

Betrifft: AW: ADO-Verbindung / Exklusivzugriff von: ChrisL
Geschrieben am: 26.09.2019 18:56:19

Hi Hans-Jürgen

Ich denke du müsstest auf der anderen Seite (bei deinem 2 min. Script) ansetzen.

Grundsätzlich gäbe es das Mittel Lock optimistic/pessimistic (oft reicht schon optimistic), was sich gemäss meinem Verständnis jedoch auf die Bearbeitung je Datensatz bezieht. Ob/wie bei einer Datenkomprimierung gesperrt wird, kann ich spontan auch nicht sagen.

Die Notwendigkeit einer permanenten Totalsperre würde ich noch einmal hinterfragen, aber falls zwingend, könntest du eine Dummy-Datei Open For Output/Input erzeugen, die du nach Ablauf des Scripts wieder löschst (Kill).

Dann kramst du dir die VBA-Funktion FileExists () aus dem Archiv und "loopst" (Schleife) bis die Bedingung FileExists() = False erfüllt ist.

cu
Chris


  

Betrifft: AW: ADO-Verbindung / Exklusivzugriff von: Hans-Jürgen
Geschrieben am: 27.09.2019 07:10:10

Hallo Chris,

vielen Dank, das sind schon interessante Ansätze.

Das mit dem "loopen" bis FileExists = false kann man ja auch mit der *.laccdb machen. Diese Datei besteht ja nur in der Zeit der Datenbankabfragen. Das werde ich mal testen.

VG

Hans-Jürgen