Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
344to348
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
344to348
344to348
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Access per VBA öffnen

Access per VBA öffnen
28.11.2003 10:19:55
Nike
Hi,
hab diesen Tip aus dem Smarttools Newsletter gelesen
und mir gedacht, es könnte auch für andere die von Excel auf geschützte
Access Datenbanken zugreifen möchten interessant sein...

Bye

Nike

BONUS-TIPP: Zugriff auf geschuetzte Datenbanken per VBA
-------------------------------------------------------
Versionen: Access 97, 2000, 2002/XP und 2003

Auch wenn Sie keine Systemdatenbank fuer Arbeitsgruppen mit
Benutzer- und Gruppenberechtigungen einsetzen, koennen Sie
Ihre Access-Datenbanken vor unerlaubten Zugriffen schuetzen.
Dafuer legen Sie einfach ein Datenbankkennwort fest. In
Access 97 waehlen Sie dafuer das Menue EXTRAS-
ZUGRIFFSRECHTE-DATENBANKKENNWORT Zuweisen an. In Access
2000/2002/2003 lautet der Befehl EXTRAS-SICHERHEIT-
DATENBANKKENNWORT ZUWEISEN. Anschliessend tippen Sie das
gewuenschte Kennwort ein, und schon ist die aktuelle
Datenbank geschuetzt: Ein Oeffnen der Datenbank ist in
Zukunft nur noch mit Hilfe des Kennworts moeglich.

Das gilt allerdings auch, wenn Sie per Programmcode auf eine
geschuetzte Datenbank zugreifen wollen. Es waere sicherlich
keine gute Loesung, die Ausfuehrung von VBA-Prozeduren jedes
Mal durch eine Aufforderung zur Kennworteingabe zu
unterbrechen. Um mit geschuetzten Datenbanken arbeiten zu
koennen, ohne auf Benutzereingaben angewiesen zu sein, geben
Sie das Kennwort im Programmcode an. Dazu ein Beispiel.

Angenommen, Sie haetten eine Datenbank namens SICHER.MDB,
der Sie das Datenbankkennwort "schutz" zugewiesen haben. Nun
wollen Sie aus einer zweiten MDB-Datei per VBA-Code auf die
geschuetzte Datenbank zugreifen - in den folgenden
Programmzeilen etwa, um die Tabellennamen auszulesen.

Dazu legen Sie in der zweiten Access-Datenbank ein neues
Modul an, in das Sie folgenden Code eingeben:

ACCESS 97 MIT DAO:


Sub PWD_Zugriff()
Dim dbExtDB As Database
Dim tblExtDB As TableDef
Dim strAktDBPfad As String
Dim strAusgabe As String
strAktDBPfad = CurrentDb.Name
Do While Mid(strAktDBPfad, _
Len(strAktDBPfad), 1) <> "\"
strAktDBPfad = Left(strAktDBPfad, _
Len(strAktDBPfad) - 1)
Loop
Set dbExtDB = DBEngine.OpenDatabase(strAktDBPfad & _
"Sicher.mdb", False, False, ";pwd=schutz")
For Each tblExtDB In dbExtDB.TableDefs
strAusgabe = strAusgabe & tblExtDB.Name & vbCr
Next tblExtDB
MsgBox "Die Tabellen der geschuetzten Datenbank:" & _
vbCr & strAusgabe
End 

Sub
ACCESS 2000/2002/2003 MIT ADO:

Sub PWD_Zugriff()
Dim cnnAktDB As ADODB.Connection
Dim catExtDB As New ADOX.Catalog
Dim tblExtDB As ADOX.Table
Dim strAktDBPfad As String
Dim strAusgabe As String
Set cnnAktDB = CurrentProject.Connection
strAktDBPfad = cnnAktDB.Properties("Data Source")
Do While Mid(strAktDBPfad, Len(strAktDBPfad), 1) <> "\"
strAktDBPfad = Left(strAktDBPfad, Len(strAktDBPfad) - 1)
Loop
catExtDB.ActiveConnection = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & strAktDBPfad & "Sicher.mdb;" & _
"Jet OLEDB:Database Password=schutz;"
For Each tblExtDB In catExtDB.Tables
strAusgabe = strAusgabe & tblExtDB.Name & vbCr
Next tblExtDB
MsgBox "Die Tabellen der geschuetzten Datenbank:" & _
vbCr & strAusgabe
End 

Sub
Voraussetzung fuer eine fehlerfreie Funktionsweise ist, dass
sich die geschuetzte Datenbank SICHER.MDB im selben
Verzeichnis befindet wie die aktuelle Datenbank mit dem
Makrocode.
WICHTIG: In Access 2000/2002/2003 muessen Sie ausserdem
einen Verweis auf die ADOX-Bibliothek herstellen. Dazu
waehlen Sie im Modul das Menue Extras-Verweise an und
aktivieren dann den Eintrag "Microsoft ADO Ext. 2.5 for DDL
and Security".
Nun zur Funktionsweise: In beiden Faellen wird zunaechst der
Name der aktuellen Datenbank ermittelt, was in DAO (Access
97) ueber das CurrentDB-Objekt geschieht und in ADO (Access
2000) ueber die "Data Source"-Eigenschaft der Verbindung zum
aktuellen Projekt. In der Do-Loop-Schleife wird der
Dateiname entfernt, so dass "strAktDBPfad" nur noch den Pfad
enthaelt.
Fuer den Datenbankzugriff per Kennwort ist dann die folgende
Codezeile massgebend. In DAO geben Sie das Kennwort im
vierten Parameter der OpenDatabase-Methode als Textstring
an:
";pwd=schutz"
In ADO nennen Sie das Kennwort im Rahmen des
"ConnectionString" einer Verbindung, hier im Rahmen der
ActiveConnection-Eigenschaft des Catalog-Objekts:
"Jet OLEDB:Database Password=schutz;"
Der Rest des VBA-Makros steht dann nur beispielhaft fuer
Aktionen, die Sie an der geschuetzten Datenbank vornehmen.
In diesem Fall ermittelt eine For Each-Next-Schleife die
Namen der vorhandenen Tabellen, die am Ende in einem
Meldungsfenster ausgegeben werden. Um den Programmcode
auszufuehren, setzen Sie den Cursor einfach in eine
beliebige Zeile des Makros und druecken F5.

                    

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das ist der richtige - weil ADO:-)
28.11.2003 12:42:20
Michael Scheffler
Den wollte ich gerade als Antwort posten.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige