PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VBA und MySQL



Stucks
18.04.2013, 09:52
Hallo Forum,

mein erster Beitrag. Hoffe ich bin im richtigen Unterforum :) Wenn nicht, steinigt mich....

Ich habe eine Verbindung mit VBA zu einer MySQL Datenbank, die auf einem Server liegt aufgebaut. Der Server liegt im lokalen Netz.
Ich kann auch ohne Probleme Daten zu dieser Datenbank schreiben.
Da die Datenbank herkömmlicherweise von einem Android Smartphone gelesen und beschrieben wird, möchte ich nun auf meinem Engineeringsrechner eine "Lese"- Funktion in VBA Programmieren,
um die aktuallisierten Daten in Excel Tabellen zu sichern.

Hierbei stoße ich auf ein Problem, dass durch mehrstündiges Googlen nicht behoben werden konnte.

Und zwar möchte ich aus der Tabelle in der DB einen Text rüber zu Excel holen.
Hierzu verwende ich die Methode RecordSet.getString().
Im Allgemeinen funkt es auch, also der Text landet im Excel an der richtigen Stelle, nur ist dieser String/Text TOTAL verbuchselt.
1. Sind die Längen verkehrt, also der String, den ich bekomme, ist immer 1 byte länger als der Text in der DB
2. Auch die Strucktur dieses Textes ist total komisch. Tut mir leid ich kanns nicht viel besser beschreiben. zb is der Buchstabe 'A' kein richtiger Buchstabe mehr, ich kann mit dem Cursor in die Mitte des Buchstabens klicken. Sehr seltsam einfach.

Zuerst dachte ich, es läge an dem Datentyp in der DB. Folglich hatte ich alle "String" Datentypen ausprobiert - ohne Erfolg. Zumal der Text in der DB vollkommen okay ist. weiter..
Daher dachte ich mir, es muss an der Übertragung liegen (getString()). Nur hab ich keine Ahnung wie ich das anders bewerkstelligen soll.

Das Problem ist bestimmt bekannt, und möglicherweise kann mir jemand helfen.
Würde mich sehr darüber freuen.

MfG Florian

hier noch die Function, mit der ich die Daten lese:


Private Function C_BMO_READ()

For Akt_Zei% = E_Zei% To L_Zei%

If Not IsEmpty(Cells(Akt_Zei%, 3)) Then ' Don't Check Spare Instances

iNo = (Cells(Akt_Zei%, 1).value) 'No

rs.Open "SELECT longname FROM android.bmo WHERE instance = '" & iNo & "'", conn

sqlField = rs.GetString(adClipString)

rs.Close

End If

Next Akt_Zei%

End Function

Bernhard Geyer
18.04.2013, 10:18
VBA? Welches VBA? VBA von Access? ...
Ich tipp mal darauf das der verwendete Treiber (ODBC) hier fehlerhaft ist bzw. nicht richtig konfiguiert ist.

Stucks
18.04.2013, 10:40
Hallo Bernhard,

vielen Dank für deine schnelle Antwort.

Microsoft Visal Basic for Applications.
Inwiefern und wo muss der Treiber konfiguriert werden? Kann es sein, dass der Treiber veraltet ist (im gegensatz zu der neu installierten MySQL Umgebung?

Edit: Okay jetzt weis ich was du meinst.

Meine Derzeitige Konfig:

Private Function Open_DaBa()

Set conn = New ADODB.Connection
Set rs = New ADODB.Recordset

conn.ConnectionString = "DRIVER={" & Worksheets("Android").Cells(10, 10) & "};" _
& "SERVER=192.168.7.221;" _
& "PORT=3306;" _
& "DATABASE=android;" _
& "UID=huppmann;PWD=GBS97318" _
& "OPTION=3"

conn.Open

End Function

Welche zusätzliche Konfig muss ich vornhemen? Oder wo kann ich eine Beschreibung der möglichen Konfigs sehen. Wenn ich im ODBC Benutze DSN schaue, werde ich aus den Einstellungen auch nicht sehr viel schlauer
Gruß Florian

Stucks
18.04.2013, 13:11
Gut, ich bin dem Problem auf die Schliche gekommen. Ich habe die Datei einmal Binär betrachtet, und dabei endeckt, das dem String immer ein '0D' angefügt wurde.
Ich vermute das kommt von der getString() Methode.

habe das nun folgendermaßen gelöst:



sqlField = Left(sqlField, Len(sqlField) - 1)


damit entferne ich das letzte Zeichen im String, und somit ist er wieder korrekt.

Gruß Florian

Bernhard Geyer
19.04.2013, 14:13
Das ist aber nur Symptombehandlung.

Evtl. hilft dir ja das: http://www.dotnetpro.de/articles/freearticles/mysqladonet.aspx