Zugriff mit VBA über ODBC auf mysql-DB
Hallo zusammen,
also ich hab ne VBA-Form - EXCEL - bisher habe ich auf Daten zugegriffen die in den Excel-Tabellen lagen.
Nun habe ich die Daten in eine mySql-DB ausgelagert
Ich moechte nun per VBA mit ODBC auf die Sql-DB zugreifen und da dann per Abfragen Daten holen und mir in der Form - in Textfeld und auch in ComboBoxen etc dementsprechend die Daten anzeigen lassen.
So - also die Form steht - der ODBC steht und die MySql-DB steht auch
Wie geh ich un weiter vor?
Ich habs mals so versucht-->
Private Sub CommandButton5_Click()
Dim Conn, RS
Dim strSender As String
Dim strCompName1 As String
Dim intSQL As Integer
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
"DATABASE=XXXXXXXXX;" & _
"SERVER=localhost;", _
"xxxx;", _
"xxxx;"
Set RS = CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient
RS.Source = "SELECT * FROM sender ORDER BY sender "
'oRS.Open "SELECT * FROM sender", oConn
'CompName1 = "Select * FROM sender WHERE CompName1 = 'XXXXXX;"
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open
RS.Source = strSender
'strSender = RS.Source
'Set Conn = Nothing
MsgBox strSender
RS.Close
Set RS = Nothing
Conn.Close
End Sub
Ok - um ganz ehrlich zu sein - das klappt NULL! Ich habe auch lange Zeit deswegen gegoogelt - aba nichts gefunden
Grundsätzlich geht es mir darum -->
- Wie stelle ich eine Verbindung von VBA zu MySql-DB her (über ODBC)?
- Wie kann ich dann Daten aus der MySql-DB mir anzeigen lassen - Textbox und aber auch in ComboBoxen?
- Nett waere hier kein fertiges Script - eher so --> Schritt a) Recordset definieren- Schritt b) Datenbank verbinden Schritt c) Datenbank öffnen - Schritt d) und so weiter.
Also kein fertiges Script und so -ich wills ja gerne lernen )
Danke euch schon und bis dann
Gruss Manuel
also ich hab ne VBA-Form - EXCEL - bisher habe ich auf Daten zugegriffen die in den Excel-Tabellen lagen.
Nun habe ich die Daten in eine mySql-DB ausgelagert
Ich moechte nun per VBA mit ODBC auf die Sql-DB zugreifen und da dann per Abfragen Daten holen und mir in der Form - in Textfeld und auch in ComboBoxen etc dementsprechend die Daten anzeigen lassen.
So - also die Form steht - der ODBC steht und die MySql-DB steht auch
Wie geh ich un weiter vor?
Ich habs mals so versucht-->
Private Sub CommandButton5_Click()
Dim Conn, RS
Dim strSender As String
Dim strCompName1 As String
Dim intSQL As Integer
Set Conn = CreateObject("ADODB.Connection")
Conn.Provider = "MSDASQL"
Conn.Mode = adModeRead
Conn.CursorLocation = adUseClient
Conn.Open "DRIVER={MySQL ODBC 3.51 Driver};" & _
"DATABASE=XXXXXXXXX;" & _
"SERVER=localhost;", _
"xxxx;", _
"xxxx;"
Set RS = CreateObject("ADODB.Recordset")
RS.CursorLocation = adUseClient
RS.Source = "SELECT * FROM sender ORDER BY sender "
'oRS.Open "SELECT * FROM sender", oConn
'CompName1 = "Select * FROM sender WHERE CompName1 = 'XXXXXX;"
Set RS.ActiveConnection = Conn
RS.CursorType = adOpenForwardOnly
RS.LockType = adLockReadOnly
RS.Open
RS.Source = strSender
'strSender = RS.Source
'Set Conn = Nothing
MsgBox strSender
RS.Close
Set RS = Nothing
Conn.Close
End Sub
Ok - um ganz ehrlich zu sein - das klappt NULL! Ich habe auch lange Zeit deswegen gegoogelt - aba nichts gefunden
Grundsätzlich geht es mir darum -->
- Wie stelle ich eine Verbindung von VBA zu MySql-DB her (über ODBC)?
- Wie kann ich dann Daten aus der MySql-DB mir anzeigen lassen - Textbox und aber auch in ComboBoxen?
- Nett waere hier kein fertiges Script - eher so --> Schritt a) Recordset definieren- Schritt b) Datenbank verbinden Schritt c) Datenbank öffnen - Schritt d) und so weiter.
Also kein fertiges Script und so -ich wills ja gerne lernen )
Danke euch schon und bis dann
Gruss Manuel
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 79206
Url: https://administrator.de/contentid/79206
Ausgedruckt am: 20.11.2024 um 13:11 Uhr
27 Kommentare
Neuester Kommentar
hi wenn du ein recodset füllen willst geht das ein wenig anders. Dein sqlstring enthält nur das select da weiß die datenbank noch nichts von. Hier mal ein Beispiel. Das findest du aber auch in jedem guten VB uch.
DB Connection
verbindung zur ODBC Schnittstelle
Schließen der Verbindung
DB Connection
verbindung zur ODBC Schnittstelle
Set condb = New ADODB.connection
condb.Open "Provider=MSDASQL.1;DATA SOURCE=admintooldb"
Dim rec as ADODB.RECORDSET
Set rec = New ADODB.Recordset
rec.CursorLocation = adUseClient
rec.Open "select * from T_BEFEHLE ORDER BY namebefehl ", condb, adOpenForwardOnly, adLockReadOnly
while not rec.eof
msgbox(rec.fields(1))
WEND
Schließen der Verbindung
condb.Close
japp hier musst du natürlich noch ein rec.movenext machen. sorry.
lese das gerade. Du musst natürlich um das Recordset anzuzeigen nicht erst die Whileschleife durchlaufen.
Kannst auch direkt ein Datagrid oder ein MSHFlexgrid auf deine Form ziehen und dann diesem das Recordset als Datasorce zuweisen.
Als Beispiel
'Bleibe in der Schleife so lange das Recordset nicht EOF ( End of File ) erreicht hat
While Not rec.EOF
'Ausgabe des 3 Feldes Des Recordsetsobjektes
MsgBox (rec.Fields(2))
'Wenn Das dritte Feld gleich der Bedingung ist dann springe zu exit
if rec.Fields(2) = Bedingung then goto exit
'Lese nächsten Datensatz aus dem Recordset
rec.movenext
Wend
'Ausgangspunkt für den GoTo
exit:
'Weiterer Quellcode
lese das gerade. Du musst natürlich um das Recordset anzuzeigen nicht erst die Whileschleife durchlaufen.
Kannst auch direkt ein Datagrid oder ein MSHFlexgrid auf deine Form ziehen und dann diesem das Recordset als Datasorce zuweisen.
Als Beispiel
With Datagrid
.....Weitere Eigenschaften fürs Datagrid
.enable = true
.datasourde = rec
end with
oder einfach Datagrid.datasource = rec
also nehmen wir an dein Datansatz in der DB sieht folgendermaßen aus
"Andrea" "Guenter" "15.10.1969" "weiblich"
"Sven" "Guenter" "22.07.1971" "maennlich"
diese liest du nun aus mit
'Bedingung für eine Anzeige ist das die alle haben willst die maennlich sind
In diesem Beipiel
Wird sobald ein Datensatz gefunden wurde der maennlich enthält zum Punkt exit gesprungen und das Attribut maennlich wird ausgegeben.
Wenn du aber alles anzeigen lassen willst was das Recordset enthält solltest du dir ein DataGrid auf deine Form ziehen und diesem Datagrid dein Recordset als Datenquelle angeben und zwar folgendermaßen. ( Hier kannst du die Whileschleife weglassen )
Beim starten deines Programmes werden nun alle Datensätze die dein Recordset enthält im DataGrid angezeigt.
"Andrea" "Guenter" "15.10.1969" "weiblich"
"Sven" "Guenter" "22.07.1971" "maennlich"
diese liest du nun aus mit
'Bedingung für eine Anzeige ist das die alle haben willst die maennlich sind
WHILE NOT rec.EOF
IF rec.(Fields(3)) = maennlich then GoTo exit
rec.MoveNext
WEND
exit:
msgbox(rec(fields(3))
In diesem Beipiel
Wird sobald ein Datensatz gefunden wurde der maennlich enthält zum Punkt exit gesprungen und das Attribut maennlich wird ausgegeben.
Wenn du aber alles anzeigen lassen willst was das Recordset enthält solltest du dir ein DataGrid auf deine Form ziehen und diesem Datagrid dein Recordset als Datenquelle angeben und zwar folgendermaßen. ( Hier kannst du die Whileschleife weglassen )
DataGrid.Datasource = rec
Beim starten deines Programmes werden nun alle Datensätze die dein Recordset enthält im DataGrid angezeigt.
so ein neuer Tag und hier erstmal der schnippsel für dich.
'Recordset auf den ersten Datensatz setzen
rec.MoveFirst
'Schleife durchlaufen bos ende der Datensätze erreicht ist
While Not rec.EOF
'Datenfeld im Combofeld anzeigen
Me.Combo1.AddItem (rec.Fields(1))
'Nächsten Datensatz lesen
rec.MoveNext
Wend
du machst ein select welches dein Recordset füllt.
frage ist nun ob dieses Recordset immer so aussieht
Wert1,Wert2,Wert3 das entspricht im Recordset Rec.Fields(0),Rec.Fields(1),Rec.Fields(2)
Sprich das dein Wert3 Immer gefüllt ist. Grund ist folgender wenn dein Recordset irgendwann auf einen Wert3 trifft der nicht gefüllt ist bekommtst du die Fehlermeldung da dein Rec.Fields(2) nothing ist und somit kein Objekt welches die ComboBox aber bracuht um was anzeigen zu können.
rec.Open "SELECT * from *tabelle* WHERE *feld* = '0_0' ", condb, adOpenForwardOnly, adLockReadOnly
frage ist nun ob dieses Recordset immer so aussieht
Wert1,Wert2,Wert3 das entspricht im Recordset Rec.Fields(0),Rec.Fields(1),Rec.Fields(2)
Sprich das dein Wert3 Immer gefüllt ist. Grund ist folgender wenn dein Recordset irgendwann auf einen Wert3 trifft der nicht gefüllt ist bekommtst du die Fehlermeldung da dein Rec.Fields(2) nothing ist und somit kein Objekt welches die ComboBox aber bracuht um was anzeigen zu können.