On 25 Mai, 18:49, "Karl Donaubauer" <
NoS...@donkarl.com> wrote:
> Gerhard Förster wrote:
> > Beim komprimieren einer externen Datenbank kommt bei mir die Meldung:
>
> > Ausnahmenummer 3356; d.h. Sie haben versucht eine DB zu öffnen, die
> > bereits exclusive vom Benutzer "admin" auf dem computer geöffnet ist.
> > Versuchen Sie es noch einmal, wenn die DB verfügbar ist.
>
> > In der Routine zum komprimieren schließe ich zuerst alle Objekte
> > Call CloseAllOpenObjects(True)
>
> > beende gelinkten Tabellen
> > TBL_DisConnect
>
> > schließe danch die Datenbank
> > Set DB1 = CurrentDb
> > DB1.Close
> > Set DB1 = Nothing
>
> Das bringt aus mind. 2 Gründen nichts:
> Du willst ja nicht die aktuelle DB komprimieren sondern eine andere.
> Currentdb kann man nicht schließen. Access schluckt nur lautlos
> den Fehler bei diesem Close-Versuch.
Das ist mir jetzt auch klar
>
> > und rufe die Funktion zum Komprimieren
> > CompactBackendDB (s1) / S1=Pfad und Name der DB
>
> > Und hier kommt es dann zum Fehler.
> > Wie erreiche ich es, dass die DB nicht mehr exlusiv geöffnet ist.
>
> Hast du nachgesehen, ob nach deinen obigen Prozeduren noch
> eine ldb der zu komprimierenden DB existiert?
>
> Falls ja: Ist diese ldb weg, wenn du die aktuelle DB beendest?
>
> Wenn wieder ja: Du hast noch mind. eine Referenz auf diese DB
> offen. Wo, kann man schwer sagen, ohne deine Anwendung,
> deine Verbindungen zur anderen DB und deinen Code zu kennen.
>
> Wir sehen ja nicht, wie CloseAllOpenObjects, TBL_DisConnect
> (klingt besonders gefährlich ;-) und CompactBackendDB aussehen.
>
> --
> Servus
> Karl
> *********
> Access-FAQ:
http://www.donkarl.com
Hallo Karl,
danke für die Antwort.
Ja, es ist so. Nach dem Abarbeiten der Funktionen
Call CloseAllOpenObjects(True)
TBL_DisConnect
ist noch eine LDB-Datei der benutzten DB offen.
Nach dem Schließen der DB ist dies dann auch weg.
Beim "CloseAllOpenObject" arbeite ich folgenden Code ab:
Public Sub CloseAllOpenObjects(pbWarnung As Boolean)
Dim dbs As DAO.Database
Dim objTmp As Object
Dim sName As String
On Error GoTo CloseAllOpenObjects_Err
Set dbs = CurrentDb()
' Schleife über alle Tabellen
For Each objTmp In dbs.TableDefs
sName = objTmp.name
If IsObjectOpen(acTable, sName) Then
DoCmd.Close acTable, sName
End If
Next objTmp
Und diese obige Schleife dann sinngemäß über alle
- Abfragen
- Formulare
- Reports
- Makros
- Module
- ADPs
Damit sollten doch alle Elemente geschlossen werden. Oder übersehe ich
da was?
in TBL_Disconnect steht folgendes
Function TBL_DisConnect()
Dim tdf As TableDef
Dim TBL_Name As String
Set DB1 = CurrentDb()
For Each tdf In DB1.TableDefs
TBL_Name =
tdf.name
If TBL_Connected("", TBL_Name) Then
DoCmd.DeleteObject acTable, TBL_Name
End If
Next
Set DB1 = Nothing
End Function
Die Funktion CompactBackendDB (name) habe ich von Deiner Access-FAQ
Seite.
Wenn Du mir hier weiterhelfen könntest, bin ich Dir sehr dankbar, da
mir das Problem ziehmlich unter den Nägeln brennt.
Danke im Voraus - Gruß Gerhard