ODBC MySQL

alles zu mySql/mariadb

Moderator: Moderatoren

Antworten
Ulrich
Rookie
Rookie
Beiträge: 16
Registriert: Do, 28. Jun 2012 9:12

ODBC MySQL

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC MySQL

Beitrag von brandelh »

ja, mit SQLexpress() und mit PowerBasic.
ODBC erlaubt auf jeden Fall das Schreiben, solange du genug RECHTE auf dem SQL-Server hast ;-)
Gruß
Hubert
Benutzeravatar
Rudolf
Programmier-Gott
Programmier-Gott
Beiträge: 1418
Registriert: Mo, 02. Jan 2006 23:03
Wohnort: Salzburg/Österreich
Kontaktdaten:

Re: ODBC MySQL

Beitrag 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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC MySQL

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Ulrich
Rookie
Rookie
Beiträge: 16
Registriert: Do, 28. Jun 2012 9:12

Re: ODBC MySQL

Beitrag 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
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC MySQL

Beitrag 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
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Ulrich
Rookie
Rookie
Beiträge: 16
Registriert: Do, 28. Jun 2012 9:12

Re: ODBC MySQL

Beitrag 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
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15688
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: ODBC MySQL

Beitrag 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)
Gruß
Hubert
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC MySQL

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: ODBC MySQL

Beitrag 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
gruss by OHR
Jimmy
Benutzeravatar
Fischkopp
UDF-Programmierer
UDF-Programmierer
Beiträge: 63
Registriert: Sa, 19. Jul 2014 10:31
Wohnort: Berlin

Re: ODBC MySQL

Beitrag 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
Grüße aus Berlin

Reiner
Ulrich
Rookie
Rookie
Beiträge: 16
Registriert: Do, 28. Jun 2012 9:12

Re: ODBC MySQL

Beitrag 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
Ulrich
Rookie
Rookie
Beiträge: 16
Registriert: Do, 28. Jun 2012 9:12

Re: ODBC MySQL

Beitrag 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?
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2823
Registriert: Fr, 08. Feb 2008 21:29
Hat sich bedankt: 95 Mal
Danksagung erhalten: 13 Mal

Re: ODBC MySQL

Beitrag 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.
Liebe Grüsse aus der Eifel,

Georg S. Lorrig
Redakteur der Wiki des Deutschprachigen Xbase-Entwickler e.V.
Antworten