Durch Kennwort geschützte Access 2016 Datenbank per Kommandozeilenparameter öffnen

Anonym
2022-01-30T17:19:33+00:00

Ich habe eine durch Kennwort geschützte Access 2016 Datenbank.

Um nicht immer das Kennwort (siehe Dialog unten) eingeben zu müssen möchte ich die Datenbank über einen Link mit Parametern öffnen.

z.B. c:\datenbankpfad/datenbank.accdb /passwort geheim

Ich habe keine Option ,außer für ältere Access-Datenbanken, dafür gefunden.

Wer kann mir weiterhelfen ?

Danke

Microsoft 365 und Office | Access | Andere | Windows

Gesperrte Frage. Diese Frage wurde aus der Microsoft-Support-Community migriert. Sie können darüber abstimmen, ob sie hilfreich ist, aber Sie können keine Kommentare oder Antworten hinzufügen oder der Frage folgen.

0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-03T14:40:03+00:00

[...]

Mit "Process.Start()" (ö.ä) kann ich Startparameter übergeben aber kein Datenbank-Kennwort.

Mit "OpenCurrentDatabase()" kann ich das Datenbank-Kennwort übergeben aber keine Startparameter.

Weder das eine noch das andere würde dir beim Problem der Access-Instanz, die bei gesperrter DB trotzdem gestartet wird, helfen. Deshalb der Tipp, die ldb/laccdb zu prüfen. Es gäbe noch den aufwändigeren Weg über die Process-Handles, aber auch das wäre nur eine Krücke.

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-03T10:13:34+00:00

Wenn Abbrüche z.B. durch den Task-Manager eine Rolle spielen, kannst du statt dem Dir einen Kill versuchen und falls der auf Fehler läuft, ist die DB zuverlässig noch geöffnet. Nur wenn Access die Datei nicht mehr sperrt (also geschlossen ist), kann sie gelöscht werden.

Übergabe per Commandline wäre eine weitere Sicherheitslücke, da das Passwort in der Datei im Klartext gespeichert werden müsste.

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-02T16:33:17+00:00

wenn ich die Dateiendung von "accdb" in "accdr" ändere erhalte ich folgende Fehlermeldung:

Die Datenbank kann von Microsoft Access nicht geöffnet werden, da sie nicht existiert, ein anderer Benutzer sie bereits im Exklusivmodus geöffnet hat, oder da es sich nicht um eine ADP-Datei handelt.

Wenn man eine accdb nach accdr umbenennt, zwingt man Access in den Runtime-Modus, d.h. nur wenige Ribbon- und Backstage-Funktionen sind verfügbar usw. Das gleiche kannst du für eine accdb oder accde durch den Schalter /Runtime beim Start von Access erzwingen.

Die Fehlermeldung ist allerdings lustig, da Access seit 2013 das Öffnen von ADP nicht mehr unterstützt. ;-)

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-02T16:19:45+00:00

Wenn ich die Datenbank exklusiv öffne erhalte ich beim zweiten Aufruf keine Fehlermeldung, sondern es wird eine weitere Access-Instanz ohne Datenbank gestartet.

Du kannst vor der Erstellung des Access-Objekts prüfen, ob die laccdb bzw. ldb bereits existiert:

If Dir("C:\Pfad\Deine.laccdb")<>"" Then
  MsgBox "Bereits geöffnet"
End If

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-01T14:04:42+00:00

Hallo Karl,

Gut zu wissen, danke. ;-)

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-01T13:57:58+00:00

Hallo, Peter!

Das Forum hier nimmt so einen FAQ-Link seit einiger Zeit nur als Link, wenn du einen zusätzlichen Slash vor dem Fragezeichen einfügst:

https://www.donkarl.com/?FAQ1.35

Ich werde bei nächster Gelegenheit die FAQ-Links auf diese brave Parametervariante umstellen.

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-01T13:36:10+00:00

Hallo,

Wenn das Startprogramm unkompliziert angepasst werden kann, dann lass es doch das gewählte FE auf den Rechner kopieren, der es aufgerufen hat. Dann bist du auch vor Netzproblemen gefolgt von Korruption des FE/BE sicher.

Gruss - Peter

PS: Leider hat das Forum meinen Link zu FAQ 1.35 nicht angenommen. Hier nochmal der komplette Link:

https://www.donkarl.com?FAQ1.35

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-01T10:53:39+00:00

Nicht, wenn sie exklusiv geöffnet worden ist. Allerdings ist zu bedenken, dass DBs aus dem Netzwerk nicht direkt am Client geöffnet werden sollen, auch nicht, wenn immer nur einer gleichzeitig drauf ist, siehe u.a. FAQ 1.35.

Splitte die DB lieber nach FE/BE auf und lass das FE durch eine Starter-Anwendung auf den lokalen Rechner kopieren, dann musst du dir auch keine Sorgen mehr wegen exklusiven Aufrufs machen.

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-02-01T10:32:10+00:00

Jetzt muss ich noch herausfinden wie ich verhindere das mehrere Instanzen der gleichen Datenbank gestartet werden können.

Vielleicht gibt es in der "OpenCurrentDatabase-Methode" ja einen geheimen Parameter der das verhindert.

Ich habe aber nichts derartiges gefunden, Vorschläge nehme ich gerne entgegen !!! ;-)

[...]

Dim Exclusiv as Boolean = false

[...]

.OpenCurrentDatabase(DbFile , Exclusiv , PW)

Dim Exclusiv As Boolean = True

sorgt dafür, dass auf demselben Rechner beim Versuch, die 2. Instanz zu öffnen, eine Fehlermeldung kommt.

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T19:49:18+00:00

Willst du dir die Vermittler-DB einsparen? Überleg dir das nochmal, siehe Beispiel mit Excel. Die Access-Bibliothek liegt normalerweise auf C:\Program Files (x86)\Microsoft Office\root\Office16\ und heißt MSAcc.olb

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T18:33:11+00:00

Nach .visible:

.UserControl = True

Danach erst das Objekt wieder vernichten.

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T14:15:49+00:00

Hallo!

Vielleicht hilft ein explizites Visible, also

 With AccApp
   .OpenCurrentDatabase ...blabla
   .Visible = True

'manchmal kommt das Access-Fenster dann klein, in diesem Fall noch

.RunCommand acCmdAppMaximize  

 End With

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T13:50:49+00:00

Hallo!

OpenCurrentDatabase sollte die Datenbank bereits sichtbar öffnen. Ich hab's gerade mit DB-Kennwort getestet (der Artikel ist ja schon ein paar Jahre her) und hat bei mir funktioniert. Die aufgerufene DB wurde sichtbar geöffnet und ich konnte die aktuelle, aufrufende schließen.

Ich habe übrigens bewusst "Funktion" geschrieben, weil man in einem Makro nur Funktionen aufrufen kann, keine Sub-Prozeduren. Aber für einen Test sollte das auch mit der Sub klappen.

Siehst du nix von der aufgerufenen? Auch kein Aufblitzen, Blinken des Access-Symbols in der Taskbar etc.?

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T12:50:20+00:00

Hallo!

Meine Beschreibung eines Workarounds war anders, nämlich:

  1. Du öffnest (mit deinem VB.net-Code) nicht direkt die Zieldatei sondern eine Access-Accde (ich nannte sie Vermittler-DB). Diese besteht nur aus einem AutoExec-Makro und einem Modul mit einer Funktion.
  2. Das Makro ruft die Funktion auf.
  3. Die Funktion ruft mithilfe von OpenCurrentDatabase inkl. Kennwort die Zieldatei auf. Kennwort ist nicht einsehbar, da accde.
  4. Das Makro beendet die Vermittler-DB.

Dann hast du noch das Problem mit dem runtime-Schalter, der wieder nur per Befehlszeile geht. Aber stattdessen kannst du die Endung der Zieldatei (oder einer Live-Kopie davon) auf "accdr" ändern. Das hat den gleichen Effekt wie der runtime-Schalter.

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T12:43:01+00:00

Hallo,

Lass dein VB-Programm einfach die Vermittler-DB starten.

Gruss - Peter

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-31T08:57:00+00:00

Hallo!

Ein Workaround wäre, nicht die Kennwort-geschützte DB direkt mit der Verknüpfung zu öffnen, sondern eine "Vermittler"-DB, die per Code die geschützte öffnet. In der Vermittler-DB kann das Kennwort auch geschützt sein, wenn es eine ACCDE ist. Mehr zum Thema findest du in FAQ 6.19 Datenbankkennwort übergeben.

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare
Antwort, die vom Frageautor angenommen wurde
Anonym
2022-01-30T22:01:46+00:00

Wir verwenden einen Übersetzungsdienst, um unsere Benutzer zu unterstützen. Bitte entschuldigen Sie grammatikalische Fehler.

Es tut uns leid, aber Sie können nicht tun, was Sie tun möchten. Wenn Sie der Meinung sind, dass dies das Problem nicht löst, tut es mir leid.

War diese Antwort hilfreich?

Eine Person fand diese Antwort hilfreich.
0 Kommentare Keine Kommentare

17 zusätzliche Antworten

Sortieren nach: Am hilfreichsten
  1. Anonym
    2022-02-03T09:44:25+00:00

    Du kannst vor der Erstellung des Access-Objekts prüfen, ob die laccdb bzw. ldb bereits existiert:

    If Dir("C:\Pfad\Deine.laccdb")<>"" Then
      MsgBox "Bereits geöffnet"
    End If
    

    Der Text müsste erweitert werden um "oder die letzte Datenbank-Instanz wurde nicht ordnungsgemäß beendet" ;-)

    Ein Workaround jagt das nächste.

    Ich fühle mich (als "Wiedereinsteiger") um über 20 Jahre zurückversetzt und leider an die unangenehmen Dinge erinnert.

    Microsoft muss sicherlich keinen "Einstein" einstellen um es zu ermöglichen das Datenbankkennwort per Kommandozeile zu übergeben.

    Ich hoffe noch immer es liegt an meinem Unwissen das dieses nicht möglich ist.

    Trotzdem Danke, du bist für die Unzulänglichkeiten ja nicht verantwortlich.

    War diese Antwort hilfreich?

    0 Kommentare Keine Kommentare