Seite 1 von 1

ODBC MySQL

Verfasst: Fr, 05. Dez 2014 15:13
von Ulrich
Hi,

ich möchte mich an einen WebShop hängen. :-) Dieser nutzt MySQL Tabellen. Per ODBC komme ich an die Tabelle ran, kann lesen aber leider nicht schreiben. Mit MsSQL geht via ODBC wesentlich mehr.

Hat jemand schon Erfahrung, mit ODBC und MySQL?

Grüße
Ulrich

Re: ODBC MySQL

Verfasst: Fr, 05. Dez 2014 15:24
von brandelh
ja, mit SQLexpress() und mit PowerBasic.
ODBC erlaubt auf jeden Fall das Schreiben, solange du genug RECHTE auf dem SQL-Server hast ;-)

Re: ODBC MySQL

Verfasst: Fr, 05. Dez 2014 15:39
von Rudolf
Hallo,
habe vieles mit SQLexpress von Boris gemacht, funktioniert sehr gut. Gibt auch eine Klasse von Hector Pezoa mit Ot4xb, funktioniert auch einwandfrei und basiert auf MySqllib.dll, Vorteil ist dass es kostenlos ist und ohne ODBC funktioniert.
Grüße
Rudolf

Re: ODBC MySQL

Verfasst: Fr, 05. Dez 2014 19:01
von georg
Hallo, Ulrich -


welche Version des ODBC-Treibers hast Du im Einsatz? Arbeitest Du mit einer Datei- oder System-DSN? Wie sehen die Parameter aus?

Ich greife auf verschiedene MySQL-Datenbanken auf Servern in verschiedenen Ländern zu (ich verwende dazu Hector's Klasse, die ich Dir in meiner angepassten Version gerne zur Verfügung stelle) und kann ALLES machen, und das rasant, mit einem lokal laufenden Xbase++-Programm.

Re: ODBC MySQL

Verfasst: Fr, 05. Dez 2014 20:43
von Ulrich
Ich habe verschiedene ODBC MySQL Treiber versucht alle mit dem selben Ergebnis.

Der Zugriff klappt, da ich die Daten lesen kann, aber leider nicht schreiben.

Es gibt eine Klasse? Klasse. :-)

Ich freue mich sehr, wenn Du mir die zur Verfügung stellen könntest.

Gibt es eine Beschreibung oder ein paar Beispiele zu Hectors Klasse?

Grundsätzlich dachte ich, dass in der Version 2.0 SQL via ODBC besser unterstützt wird.

Schönen Abend wünscht
Ulrich

Re: ODBC MySQL

Verfasst: Fr, 05. Dez 2014 21:07
von georg
Hallo, Ulrich -


hier findest Du etliches zu dem Thema, ich stelle Dir mal ein Archiv mit der aktuellen Version zusammen.

http://www.xbaseforum.de/viewtopic.php?f=16&t=6624

Re: ODBC MySQL

Verfasst: Mi, 10. Dez 2014 14:49
von Ulrich
Hallo Georg,

vielen Dank für den Hinweis. Ich habe das jetzt mal in unser Programm integriert. Connect zu einer MySQL Instanz funktioniert insoweit. Aber eof() scheint nicht zu funktionieren. Dass muss ich mir anschauen.

Leider klappt es auch nicht mit der aktuellen libmysql.dll, hier bekomme ich auch einen Fehler. Auch das muss ich mir anschauen....

Die Arbeit will einfach nicht aufhören. :-)

Gibt es eigentlich eine Funktionsübersicht?

Grüße
Ulrich

Re: ODBC MySQL

Verfasst: Mi, 10. Dez 2014 14:57
von brandelh
Ulrich hat geschrieben:Gibt es eigentlich eine Funktionsübersicht?
Bei allem was man als Quellcode bekommt ist zwischen CLASS ... ENDCLASS alles erwähnt was es in der Klasse gibt.
Dann noch nach FUNCTION suchen und sehen was da steht ... notfalls die aufgerufenen Funktionen bei MySQL suchen ...

Das ist meist besser und immer aktueller als jede Dokumentation 8)

Re: ODBC MySQL

Verfasst: Mi, 10. Dez 2014 15:34
von georg
Hallo, Ulrich -


welche Version von MySQL setzt Du ein? 32 oder 64 bit? Xbase++ ist 32bit, daher kann es auch nur mit 32bit DLLs kommunizieren. Wenn Du einen 64bit MySQL-Server einsetzt, dann ist die mitgelieferte libmysql.dll auch 64bit.

Hector hat einen anderen Ansatz gewählt, was die Behandlung von eof() angeht - meine Anpassung behebt das so, dass die API sich so verhält, wie man es von einer dbf-Datei gewöhnt ist (insbesondere wirkt sich das ja z.B. bei der Browse-Steuerung aus).

Es wäre an dieser Stelle nicht schlecht, wenn Du ein kleines Beispiel liefern könntest, und angibst, welche Version Du verwendest.

Wenn ich im Urlaub bin, werde ich mich mal dran machen und eine neue Version bereitstellen, da ich noch einige Erweiterungen vorgenommen habe (die ich auch an Hector kommuniziert habe), insbesondere, was die Verbindung und den dabei verwendeten Character Set angeht.

Und Hector versucht gerade, prepared statements zu implementieren. Aber dazu mehr, wenn's geklappt hat.

Re: ODBC MySQL

Verfasst: Mi, 10. Dez 2014 21:05
von AUGE_OHR
Ulrich hat geschrieben:Leider klappt es auch nicht mit der aktuellen libmysql.dll, hier bekomme ich auch einen Fehler. Auch das muss ich mir anschauen....
könnte es sein das du eine SSL Version für den Online Zugriff benötigst ?
wenn ja frage mal 'Hans Zethofer' nach seinen SSL libmysql.dll

Re: ODBC MySQL

Verfasst: Do, 11. Dez 2014 14:46
von Fischkopp
Ulrich hat geschrieben:Hat jemand schon Erfahrung, mit ODBC und MySQL?
Hallo, Ulrich
ja, ich habe die ODBC-Funktionen in der CTP getestet, ging gut :)
Hast du die 2.0 professional ? Dann kannst du direkt so arbeiten mit ODBC, sonst geht`s nur mit externen Tools !

Was deinen Schreib-Zugriff angeht : Wie ist die Verbindung zu MySql, oder testest du noch lokal ?
Eigentlich ist das Schreiben kein Problem, wenn du auf der Datenbank/Tablle Schreibrechte hast ... :wink:

Was den ODBC-Treiber angeht, habe ich den uralten 3.51 getestet und den aktuellen 5.2 , beides läuft !

Bis dann

Re: ODBC MySQL

Verfasst: Fr, 12. Dez 2014 10:36
von Ulrich
Hallo Allerseits,

vielen Dank für euer reges Interesse. :-)

ODBC

- Ich habe die ProVersion 2.0.560 im Einsatz.
- ODBC Connect klappt soweit
- Update eines Feldes bring: Internal data structures corrupted
- Ich nutze aktuellen Treiber: 5.3 ANSI
- Lesen der Datensätze funktioniert.
- Browse() verhält sich nicht korrekt.

Code: Alles auswählen

      m->wsSession := dacSession():new( ;
        "dbe=odbcdbe; " + ;
        "Driver={"      + trim( m->wsDrv ) + "}; " + ;
        "Server="       + trim( m->wsSrv ) + "; "  + ;
        "Port="         + trim( m->wsPrt ) + "; "  + ;
        "Database="     + trim( m->wsDb  ) + "; "  + ;
        "User="         + trim( m->wsUsr ) + "; "  + ;
        "Password="     + trim( m->wsPwd ) + "; "  ;
      )
      if m->wsSession:isConnected()
        alert( "WebShop erfolgreich verbunden." )

        dbusearea( .t. , m->wsSession , "oxuser" )
        alert( reccount() )
        i := 5
        do while .not. eof()
          dispoutat( i++ , 0 , OXUSER->OXLNAME )
          dbskip()
        enddo
        // Bis hierhin ist alles gut.
        browse()
        // verhält sich komisch, wenn man an den Anfang und das Ende geht....
        dbgoto( 3 )
        OXUSER->OXLNAME := "Testbenutzer" // Datenstrukturen defekt.
        dbcommit()
        alert( OXUSER->OXLNAME )
        dbclosearea()

      else
        alert( "WebShop nicht verbunden!" )

      endif

Re: ODBC MySQL

Verfasst: Fr, 12. Dez 2014 11:06
von Ulrich
Es liegt an den eingestellten Zeichensätzen.

:angry4:

Die MySQL Tabellen sind UTF8 - was sonst?

xBase kann ANSI? Welcher wäre das dann in MySQL: latin1-german1?

Re: ODBC MySQL

Verfasst: Fr, 12. Dez 2014 11:33
von georg
Hallo, Ulrich -


es liegt nicht nur an den verwendeten Zeichensätzen.

Hierzu verweise ich auf meinen Artikel in der Wissensbasis: http://www.xbaseforum.de/viewtopic.php?f=16&t=8310

Code: Alles auswählen

SET NAMES 'utf8';
kannst Du über die ODCB-Schnittstelle m.E. schicken.

Das zweite Problem ist ein ganz anderes, hängt aber damit zusammen. Bestimmte Zeichen werden von MySQL als, na, sagen wir mal, "Anweisungen" betrachtet. Wenn Du solchen Zeichen verwendest (wie z.B. den einfachen Anführungsstrich, mit dem ein Text links und rechts begrenzt wird), dann müssen diese Zeichen escape'd werden. MySQL stellt dafür die Funktion rea_escape_string() zur Verfügung.

Code: Alles auswählen

cWert := "Heut' geht's rund"
cWert := oCon:real_escape_string(cWert)
cUpdate := "UPDATE meineTabelle SET altesFeld = '" + cWert + "'"
cWert hat dann den Inhalt

Code: Alles auswählen

Heut\' geht\'s rund
Andernfalls führt das einfache Anführungszeichen nach "Heut" dazu, dass MySQL annimmt, dass der String zu Ende ist und mit "geht" nichts anfangen kann, weil's keine gültige SQL Anweisung ist. Die Reaktion von MySQL fällt in solchen Fällen immer patzig aus: es weigert sich, überhaupt etwas zu tun.

Ob die ODBC-Schnittstelle von Xbase++ 2.0 einen Zugriff auf real_escape_string() erlaubt, kann ich leider nicht sagen.