Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1724to1728
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

Anbindung einer ODBC DB

Anbindung einer ODBC DB
25.11.2019 09:35:07
michlchen80
Hallo Leute,
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.

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Anbindung einer ODBC DB
27.11.2019 19:19:32
ChrisL
Hi
Auch wenn ich hier im Dunkeln stochere, mal was reingeworfen (ansonsten bitte Frage wieder auf offen stellen).
Womöglich versteife ich mich gerade auf Problemstellungen in Zusammenhang mit UNC-Pfaden.
https://www.herber.de/forum/messages/1725482.html
Lässt sich der Quellverweis zu Testzwecken mal auf ein gemapptes Laufwerk ändern?
Zusätzliche Hinweise:
stände ja das PWD der DB im Quellcode, was nicht gewünscht ist.
Irgendwo steht dass PWD sowieso und kann gehackt werden. Einen VBA-Schutz zu knacken benötigt etwas mehr Energie, wie z.B. der Blattschutz. Jedenfalls würde ich den direkten Weg wählen resp. falls es tatsächlich sehr sensible Daten sind, dann müsstest du dich von Excel ganz verabschieden.
Vielleicht kannst du noch etwas zur Systemumgebung sagen, denn von Excel (Version?) auf .odc Datei zuzugreifen, finde ich ungewöhnlich. Falls ich eine halbwegs ähnliche Umgebung habe, mache ich mir womöglich mal die Mühe es zu rekonstruieren.
Final, bitte gewöhne dir Select/Activate ab :)
https://www.herber.de/vbabasics/0009.html#Warum_soll_nicht_selektiert_werden.3F
cu
Chris
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige