Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1908to1912
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
Inhaltsverzeichnis

Datenbank Infos (conn.open) zentral

Datenbank Infos (conn.open) zentral
16.12.2022 13:25:52
Rainer
Hallo liebe Community,
Ich bastle öfters mal an SQL-Datenbankabfragen in Excel via VBA-Makros und bin jetzt aber an einer Stelle, wo ich nicht weiter komme.
Meine Abfragen sind immer wie folgt aufgebaut und funktionieren auch einwandfrei.:
Dim conn As New Connection, rec As New Recordset
Dim comm As New Command
Dim sql$, i&, lauf
'DB öffnen
conn.Open "Provider=MSDASQL.1;Driver=SQL Server;Server=*Servername*;Initial Catalog=Datenbank;UID=UserID;PWD=Passwort;"
Set comm.ActiveConnection = conn
‘Abfrage
comm.CommandText = "SELECT … FROM dbo.[*Mandant*$Tabelle] "
rec.Open comm
…
rec.Close
'DB schließen
conn.Close
Jetzt habe ich jedoch sehr viele UserForms in deren Codes eine solche Abfrage eingebaut ist. Auch das funktioniert bisher.
Es ist jetzt aber nun sehr umständlich, mein Tool auf eine andere Datenbank und einen anderen Mandanten umzuziehen. Z.B. Auf das Testsystem.
Wie kann ich denn Servername und Mandant 1x zentral hinterlegen (z.B. in als Variable), dass ich es von allen Codes / Makros aus nutzen kann?
Ich habe den gesamten String nach conn.Open schon versucht als Variable zCon zu definieren, d.h. zCon = "Provider=MSDASQL.1;Driver=SQL Server;Server=*Servername*;Initial Catalog=Datenbank;UID=UserID;PWD=Passwort;" aber ohne Erfolg. Mir ist auch nicht ganz klar, ob ich das in ein Objekt, Formular oder Moduls schreiben muss.
Daher wäre eine detaillierte Beschreibung sehr hilfreich.
Danke im Voraus.
Gruß - Rainer

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbank Infos (conn.open) zentral
16.12.2022 15:47:03
Yal
Hallo Rainer,
willkommen in die nächste Stufe: modularisieren.
Du könntest zuerst die Aufgaben teilen. In allgemeine Modul:

Dim conn As Connection
Public Sub Connection_öffnen()
If Not conn Is Nothing Then Exit Sub 'nicht normal aufrufen, wenn schon offen
conn.Open "Provider=MSDASQL.1;Driver=SQL Server;Server=*Servername*;Initial Catalog=Datenbank;UID=UserID;PWD=Passwort;"
End Sub
Public Sub Connection_schliessen()
conn.Close
End Sub
Sub DatenXY_abrufen()
Dim rec As New Recordset
Dim comm As New Command
Dim sql$, i&, lauf
Connection_öffnen 'Versucht die Connection zu öffnen, falls noch nicht geöffnet
'DB nutzen
Set comm.ActiveConnection = conn
'Abfrage
comm.CommandText = "SELECT … FROM dbo.[*Mandant*$Tabelle] "
rec.Open comm
Do While Not rec.EOF
Loop
rec.Close
Set comm = Nothing
End Sub
Das Schliessen findet dann nur einmal vor dem schliessen statt (in "DieseArbeitsmappe"-Modul):

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Connection_schliessen
End Sub
DatenXY_abrufen wird in verschiedene Varianten implementiert. Alle andere sind nur einmal notwendig.
VG
Yal
Anzeige
AW: Datenbank Infos (conn.open) zentral
20.12.2022 09:48:16
Rainer
Hallo Yal,
danke für die Infos. Ich habe es so weit auch kapiert und umgesetzt.
Leider kommt jetzt eine Fehlermeldung: Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt.
Der Debugger bleibt im Public Sub Connection_öffnen() bei der Anweisung conn.Open "Provider..." stehen. Dim conn As Connection habe ich ebenfalls ins Modul geschrieben.
AW: Datenbank Infos (conn.open) zentral
20.12.2022 11:21:26
Yal
Hallo Rainer,
manche Objekt existieren bereits und müssen nur "adressiert":
Set myRng = Cells(1,1)
d.h. Zelle A1 existiert bereits. myRang ist nur ein Zeiger (engl. "Pointer"), der auf dieser Zelle verweist.
Andere müssen zuerst instanziert (anders gesagt: erzeugt), um etwas zu haben, was anschliessend parametrisiert wird.
Es geschiet mit "New". Probiere:

Public Sub Connection_öffnen()
If Not conn Is Nothing Then Exit Sub 'nicht normal aufrufen, wenn schon offen
Set conn = New Connection
conn.Open "Provider=MSDASQL.1;Driver=SQL Server;Server=*Servername*;Initial Catalog=Datenbank;UID=UserID;PWD=Passwort;"
End Sub
VG
Yal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige