Announcement

Collapse
No announcement yet.

VBA und MySQL

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • VBA und MySQL

    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:

    Code:
    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

  • #2
    VBA? Welches VBA? VBA von Access? ...
    Ich tipp mal darauf das der verwendete Treiber (ODBC) hier fehlerhaft ist bzw. nicht richtig konfiguiert ist.

    Comment


    • #3
      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
      Zuletzt editiert von Stucks; 18.04.2013, 10:50.

      Comment


      • #4
        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:

        Code:
         sqlField = Left(sqlField, Len(sqlField) - 1)
        damit entferne ich das letzte Zeichen im String, und somit ist er wieder korrekt.

        Gruß Florian

        Comment


        • #5
          Das ist aber nur Symptombehandlung.

          Evtl. hilft dir ja das: http://www.dotnetpro.de/articles/fre...sqladonet.aspx

          Comment

          Working...
          X