PDA

Vollständige Version anzeigen : DB durch Frontend geöffnet - WARUM?


Hütti
13.10.2011, 13:58
hallo,

ich habe ein frontend mit diversen abfragen und vba code und die daten im backend.

während der datenaktualisierung werden diverse abfragen ausgeführt, tabellen des BE geöffnet (per DLookup) und auch tabellen etc. per SET (recordset, table) zugewiesen.

eigentlich beenden sich alle abfragen und ich mache immer ein SET xx=nothing.

dennoch bleibt mein BE geöffnet (BE.laccdb bleibt).

dadruch läuft im VBA Code der FILECOPY auf einen fehler. lt. hilfe kommt das daher, dass das BE noch geöffnet ist.

ich habe schon alles durchsucht, aber die geöffnete verbindung nicht gefunden; bzw. meine, alle SET wieder mit nothing zugewiesen zu haben.

wie kann ich feststellen, was meine datenbank noch sperrt; bzw. welche "variable" noch zugewiesen ist?

danke

Atrus2711
13.10.2011, 14:07
* Formulare, Berichte auf BE-Tabellen offen?
* Formualre mit Kombifeldern o.ä. öffen, die auf BE-tabelen zugreifen?
* Recordsets auch geschlossen (rst.close) vorm Set rst = Nothing?

Ein Tool, das die Bezüge auflistet, kenn ich nicht. Notfalls mal Marken/Stops im Code setzen (an Stellen, wo das BE arbeitslos sein müsste) und gucken, ob das BE da zugänglich ist.

Und: BE-Sicherung sollte nicht vom Frontend angestoßen werden, sondern von externen Tools (Geplanter Task mit VBS-Script o.ä.).

ebs17
13.10.2011, 14:09
Sind denn auch alle Formulare/Berichte, die irgendeine Bindung an Tabellen haben (auch Kombi- und Listenfelder), geschlossen?
BE-Sicherung sollte nicht vom Frontend angestoßen werden
Das halte ich für diskutabel. Von einem FE kann man genau so gut (oder schlecht) wie von "außen" prüfen, ob es Zugriffe auf ein Backend gibt. Größere Probleme wären eine Mehrnutzerumgebung oder Zugriffe von externen Applikationen auf das Backend.

Hütti
13.10.2011, 14:12
formulare und berichte gibt es nicht. nur abfragen. teste gerade mal die sache mit .close.....

Hütti
13.10.2011, 14:16
@atrus2711: DANKE! war ein volltreffer. das banale .close hat gereicht.... ich dachte das set nothing hat den gleichen effekt. jetzt läuft es.

FW
13.10.2011, 14:23
... alternativ kannst'e auch mit der API-Funktion kopieren:Public Declare Function CopyFile Lib "kernel32" Alias "CopyFileA" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long...

Hütti
13.10.2011, 14:34
@FW:
auch gut zu wissen. bringt mich hier aber nicht weiter, da ich anschließend das BE komprimiere und spätestens da die offene verbindung für einen fehler sorgt.