VB-Homepage Tipp 297

Über OLE - Access öffnen und Username/Passwort übergeben

OLE - object linking and embedding
Langenscheidt übersetzt dies übrigens so :
Gegenstand, der sich verbindet und hineinsteckt (aber das nur am Rand)

Natürlich haben Sie alle schon mit OLE gearbeitet, den jedes Einfügen einer Grafik in eine Textdokument oder einer Tabelle in eine Präsentation erfolgt darüber.
Aber haben Sie dies auch schon aus VB heraus genutzt?

Es kann durchaus interessant sein, Fremdanwendungen zu starten und bestimmte Anweisungen an dieses Programm zu senden, auch wenn ich eher ein Freund von in sich geschlossenen Anwendungen bin, aber selbst als professionell verkaufte Software greift mit unter darauf zurück um sich Funktionen dieser Programme zu nutze zu machen.

Was ich Ihnen hier als Tipp vorstellen möchte, ist eigentlich erst der Anfang von OLE, nämlich
das Aufrufen einer Anwendung,
das Übergeben von Username und Paßwort für Access in diesem Fall,
was sicher in Netzwerken mit gesetztem Paßwort und Usernamen sinnvoll ist,
wo an den Usernamen bestimmte Rechte gebunden sind und Sie dies also nicht dem User überlassen, sondern VB dies (für den User versteckt) übertragen können.
Und zum Schluß, nachdem Access geöffnet wurde und eine Mitteilung erfolgt, wird Access wieder aus VB heraus geschlossen.
Ende der OLE-Sitzung.

1. Für einen Test benötigen Sie natürlich erstmal Access auf Ihrem System und desweiteren ein neues VB-Projekt.

2. Unter Projekt/Verweise müssen Sie zBsp. für Access 8.0 den Eintrag
"Microsoft Access 8.0 Object Library" [MSACC8.OLB] auswählen.

3. Damit wir Access Zeit geben können sich zu öffnen, werden wir die API Sleep Funktion nutzen, die aber nicht direkt notwendig ist für das Projekt
Allgemein/Deklarationen
Private Declare Sub Sleep Lib "Kernel32" (ByVal dwMS As Long)

4. Basteln Sie sich nun einen Button auf die Form und geben diesen im Click Event nachfolgende Anweisungen
Sie müssen sowohl den Pfad zu Access als auch zur, zu öffnenden, Datenbank an Ihre Umgebung anpassen.
Dim accObj As Access.application
Dim Msg As String, application As String, dbs As String, workgroup As String
Dim user As String, password As String, cTries As Integer
Dim x

' Pfad zu Access 8.0 modifizieren
application = "Laufwerk:\Pfad\MSACCESS.EXE"

' Zu öffnende DB
dbs = "Laufwerk:\Pfad\DB_Name.mdb"

' Workgroup
workgroup = "C:\Windows\System\System.mdw "

user = "???????" ' Username
password = "????? ' Password

'Zum Test - Ausgabe der Werte
'MsgBox application & " " & dbs & " /nostartup /user " & user & " /pwd " & password & " /wrkgrp " & workgroup

'ACCESS 8.0
x = Shell(application & " " & dbs & " /nostartup /user " & user & " /pwd " & password & " /wrkgrp " & workgroup, vbMinimizedFocus)

'ACCESS 2.0
'x = Shell(application & " " & dbs & " /user " & user & " /pwd " & password, vbMinimizedFocus)

'warten, falls Access noch nicht geöffnet
On Error GoTo WAITFORACCESS

Set accObj = GetObject(, "Access.Application")   'error handling

'Access ist geöffnet - Mitteilung
Msg = "Access ist nun geöffnet und in der Taskleiste abelegt." & Chr(13) & Chr(10) & "Wird Access Maximiert, ist die geöffnete DB sichtbar." & Chr(13) & Chr(10) & "Wenn Bereit, bitte OK zum Schließen der DB drücken."
MsgBox Msg, , "Access öffnen!"

On Error Resume Next

accObj.CloseCurrentDatabase
accObj.Quit (acExit) 'ohne Speicherung
'accObj.Quit (acQuitSaveAll) 'mit aut. Speicherung
Set accObj = Nothing

MsgBox "Fertig!", , "Access beenden!"
Exit Sub

'Warteschleife
WAITFORACCESS:

SetFocus
If cTries < 15 Then
cTries = cTries + 1
Sleep 500 ' wartet 1/2 Sekunde
Resume
Else
MsgBox "Access Öffnen Prozess dauert zu lange. Abbruch der Aktion"
End If

End Sub

5.  Natürlich macht ein Test nur Sinn, wenn für Access auch Benutzername und Paßwort gesetzt und die übergebenen Werte (Paßwort und Benutzernamen) gültig sind. Ihr Demoprojekt ist fertig und Sie können es über F5 testen.


Tipp-Download

Quelle :

Zurück zur Übersichtsseite