klar, aber Du musst über die (angemeldete) Datenquelle gehen.
die zentralen Befehle wären:
Code: Alles auswählen
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
DataSource = DatabaseContext.getByName("Datenbankname")
DataSource.GetConnection("MeinName","pAssWoRt")
Ein etwas längeres Listing:
(Wesentlich sind die Zeilen "DataSource.USER = sUser" und "DataSource.Password = sPasswd")
Einen Passwort-Dialog brauchst Du auch noch außer Du möchtest immer mit demselben Benutzernamen und Passwort verbinden, dann kannst Du den ganzen Abschnitt von "' holt zumindest irgendwas aus der Verbindung" bis "DataSource.Password = sPasswd" weglassen und "goConnection = DataSource.GetConnection(sUser,sPasswd)" durch "goConnection = DataSource.GetConnection("Benutzer","geheimesPasswort")" ersetzen.
Die Zuweisung der Connection zur globalen Variable goConnection hat den Vorteil, dass Du diese später nutzen kannst, und ein SQL-Statement dann einfach mit Statement=goConnection.createStatement erzeugt wird.
Code: Alles auswählen
Global goConnection
Global go_Dlg_Passwort
sub DatenbankStarten(optional oEvent)
if not VerbindungHerstellen("NameDerRegistriertenDatenbank") then
if not ismissing(oEvent) then
on error resume next
' eigene Sub in einem anderen Modul, das die Datenbank "von aussen" korrekt schliesst
call SUB_DatenbankSchliessen(oEvent, 1500)
on error goto EH
msgbox "Verbindung zur Datenbank konnte nicht hergestellt werden, die Anwendung wird beendet!"
else
msgbox "Verbindung zur Datenbank konnte nicht hergestellt werden! Bitte die Anwendung manuell beenden!"
end if
end if
end sub
function VerbindungHerstellen(sMyRegDB)
on erhror goto EH
dim DatabaseContext, DataSource, Connection
dim InteractionHandler
dim sUser, sPasswd
VerbindungHerstellen = false
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")
if NOT DatabaseContext.hasByName(sMyRegDB) then
msgbox "Datenquelle " & sMyRegDB & " wurde NICHT gefunden! - daher Abbruch!"
exit function
end if
DataSource = DatabaseContext.getByName(sMyRegDB)
' holt zumindest irgendwas aus der Verbindung1
sUser=cstr(DataSource.USER)
sPasswd=cstr(DataSource.Password)
if sPasswd = "" then sUser=""
PasswortDialog:
if NOT DLG_Passwort(sUser, sPasswd) Then exit function
if sUser = "" OR sPasswd = "" then
if msgbox("Benutzername und Passwort muessen angegeben werden! - Noch eine Versuch?", 4) = 6 then
goto PasswortDialog
else
exit function
end if
end if
DataSource.USER = sUser
DataSource.Password = sPasswd
goConnection = DataSource.GetConnection(sUser,sPasswd)
if DataSource.getConnection(DataSource.USER, DataSource.Password).isClosed = true then
msgbox sMyRegDB & "-Verbindung ist derzeit - warum auch immer - Schrott!"
exit function
end if
VerbindungHerstellen = true
exit function
EH:
call EH
if msgbox("Verbindung zu " & sMyRegDB & " schliessen?",4) = 6 then Connection.release
end function
Function DLG_Passwort(sUser, sPasswd, optional sDatenquelle)
dim DialogWert, i
DLG_Passwort = false
i=0
If (Not ThisComponent.DialogLibraries.isLibraryLoaded("Standard")) Then
ThisComponent.DialogLibraries.LoadLibrary("Standard")
End If
go_Dlg_Passwort = CreateUnoDialog(Dialoglibraries.Standard.Dlg_Passwort)
' manchmal dauert's ein bisschen bis der Dialog geladen wurde - daher diese Schleife
do while (NOT isobject(go_Dlg_Passwort)) AND ( i < 100 )
i=i+1
wait 100
loop
go_Dlg_Passwort.GetControl("BenName").setText(sUser)
go_Dlg_Passwort.GetControl("Passwd").setText(sPasswd)
DialogWert = go_Dlg_Passwort.execute()
if DialogWert = 1 then ' ueberprueft ob ueberhaupt etwas ausgewaehlt wurde
DLG_Passwort = true
sUser = go_Dlg_Passwort.GetControl("BenName").Text
sPasswd = go_Dlg_Passwort.GetControl("Passwd").Text
end if
go_Dlg_Passwort.dispose()
end Function