Anbindung einer ODBC DB
25.11.2019 09:35:07
michlchen80
ich möchte gerne in meine Excel Daten aus einer ODBC ziehen.
Vorab möchte ich allerdings gerne prüfen, ob es die ODBC denn überhaupt schon gibt. (Damit ich eine Fehlermeldung werfen kann, dass der Nutzer diese erst anlegen muss auf seinem Rechner - z.B. bei Erstbenutzung. Man könnte es auch autom. reinwerfen, aber dann stände ja das PWD der DB im Quellcode, was nicht gewünscht ist.)
Das klappt auch prima. (aus dem Netz)
If Not Connection_Exists("xxx_db") Then
MsgBox "Bitte zuerst die DB Verknüpfung ""xxx_db"" in den ODBC Verbindungen setzen..."
'gibt es die DB Verbindung bereits?
Function Connection_Exists(xName As String) As Boolean
Connection_Exists = True
weiter = GetSectionsDSN(xName)
If weiter = "" Then Connection_Exists = False
End Function
Jetzt kann ich sicher gehen, dass er die Verbindung auch hat.
Bei jedem neuen Start und erstmaligem Aufruf möchte ich jetzt den Link zu dieser xxx_DB neu auf ein Blatt setzen.
Das klappt mit folgendem auch soweit prima.
Suchwert="Select * from xxx_db_tab"
Suche = "Select * from xxx_db_tab where hau_mich_blau = true and a=b order by xyz"
Sheets(DB_Imp_Blatt).Select
'bei erstmaligem ausführen den link zur DB neu setzen... leider nötig, da excel den link _
sonst gerne verschluckt...
If nach_Start Then
nach_Start = False
Cells.Select
Selection.ListObject.QueryTable.Delete
Selection.ClearContents
With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(Array("ODBC;DSN=xxx_db; _
DATABASE=xxx_db;SERVER=aaa.bbb.net;PORT=1234;UID=lmaa;SSLmode=disable;ReadOnly=0;Protocol=7.4; _
_
FakeOidIn"), Array("dex=0;ShowOidColumn=0;RowVersioning=0;ShowSystemTables=0;ConnSettings=; _
Fetch=100;UnknownSizes=0;MaxVarcharSize=255;MaxLongVarch"), Array("arSize=8190;Debug=0;CommLog=0;UseDeclareFetch=0;TextAsLongVarchar=1;UnknownsAsLongVarchar=0;BoolsAsChar=1;Parse=0;ExtraSysTable"), Array("Prefixes=dd_;LFConversion=1;UpdatableCursors=1;TrueIsMinus1=0;BI=0;ByteaAsLongVarBinary=0;UseServerSidePrepare=1;LowerCaseIdent"), Array("ifier=0;GssAuthUseGSS=0;XaOpt=1")), Destination:=Range("$A$1")).QueryTable
.CommandText = Array(suchwert) ' wobei Suchwert lediglich ein select * from VIEW _
_
_
ist...
.SourceConnectionFile = "\\link_server....\99_DB_Verknüpfung\xxx_db _
MIB_autom.odc"
.ListObject.DisplayName = "Tab_MIB_autom"
Die vorab erweiterte Abfrage wird dann so gesetzt:
With Selection.ListObject.QueryTable
.CommandText = suche
.Refresh BackgroundQuery:=False
End With
Jetzt ist oben ja das ".SourceConnectionFile" fett markiert. Denn genau hier kommt das Problem:
Wenn ich die Datei das erste mal an einen "jungfräulichen" Rechner sende, dann kommt wie gewünscht die Fehlermedung mit der fehlenden ODBC.
Habe ich diese allerdings dann eingetragen und führe das Makro aus, dann nutzt Excel leider nicht die angegebene .odc sondern legt lokal eine an und will dann auch bei jedem weiteren Run über diese Zugreifen...
Wenn ich allerdings einmalig die odc vom Server auswähle, dann läuft es alles wie gewünscht. Ich möchte jetzt ja aber nicht bei jedem aller ersten Run auf einem neuen Rechner diese Verknüpfung neu setzen müssen.
Bzw. war ich beim zusammensuchen aus dem Net davon ausgegangen, dass ich mit dem ".SourceConnectionFile" diesen manuellen Act nicht machen muss.
Danke für die Antworten.