Author | Topic: ODBC / MySQL / MsSQL | |
---|---|---|
![]() | Gerd Baumgarten | ODBC / MySQL / MsSQL on Fri, 05 Dec 2014 14:22:31 +0100 Hi, für einen WebShop Connect muss ich mich mit einem MySQL Server verbinden. Leider klappt das nicht so richtig. Anbei mein ODBC Testprogramm. Mit dem MsSQL Server funktioniert das Programm. Mit dem MySQL Server (entsprechenden ODBC-Connect String aktivieren) klappt es nicht. Es gibt probleme bei dbcreate(), Feldinhalte zu schreiben etc. Es klappt allerdings Felder zu lesen, reccount() u.a. Wie ist denn der Stand mit MySQL? Gibt es eine Möglichkeit anders vorzugehen? Grüße #include "pgdbe.ch" #include "odbcdbe.ch" #pragma library( "xbtbase1.lib" ) #pragma library( "xbtbase2.lib" ) PROCEDURE Main local aDbStruct := {} LOCAL cConnect, cField local nI, nSeconds LOCAL oSessionPG, oSessionODBC ? "ODBC Testprogramm" ? Load the PostgreSQL DatabaseEngine IF(!DbeLoad("pgdbe")) Alert( "Unable to load the PostgreSQL DatabaseEngine", {"Quit"} ) QUIT ENDIF ? "PGDBE geladen" Establish the PostgreSQL connection cConnect := "DBE=pgdbe;SERVER=localhost;DB=zoom_msp-it;UID=postgres;PWD=postgres" cConnect := "DBE=pgdbe;SERVER=localhost;DB=zoom_caf_pg;UID=postgres;PWD=postgres" oSessionPG := DacSession():New( cConnect ) Check for connection success IF oSessionPG:isConnected() ? "PGDBE Verbindung hergestellt" else ? oSessionPG:GetLastMessage() Alert( "Unable to establish connection to PostgreSQL server", {"Quit"} ) QUIT ENDIF ? "Tabelle anlegen" nCols := abs( 512 / 3 ) ? "Spalten : " + str( nCols, 4 ) for nI := 1 to nCols aadd( aDbStruct, { "STRING" + right( "0000" + ltrim( str( nI, 4 ) ), 4 ), "M", 10, 0 } ) aadd( aDbStruct, { "NUMBER" + right( "0000" + ltrim( str( nI, 4 ) ), 4 ), "N", 10, 3 } ) aadd( aDbStruct, { "MEMO" + right( "0000" + ltrim( str( nI, 4 ) ), 4 ), "M", 0, 0 } ) next dbcreate( "test", aDbStruct, oSessionPG ) ? "Tabelle ”ffnen" dbusearea( .t., oSessionPG, "test" ) nRows := 1024 ? "Zeilen : " + str( nRows, 4 ) nSeconds := seconds() ? "Startzeit : " + time() Zeilen bzw. Datens„tze for nI := 1 to nRows dispoutat( row() +2, 0, repl( chr( 219 ), abs( nI * 79 / nRows ) +1 ) ) dbappend() Spalten for nJ := 1 to nCols fieldput( fieldpos( "STRING" + right( "0000" + ltrim( str( nJ, 4 ) ), 4 ) ), "Testtext12" ) fieldput( fieldpos( "NUMBER" + right( "0000" + ltrim( str( nJ, 4 ) ), 4 ) ), 123.123 ) fieldput( fieldpos( "MEMO" + right( "0000" + ltrim( str( nJ, 4 ) ), 4 ) ), "Testtext12" ) next next dispoutat( row() +2, 0, space( 255 ) ) dispoutat( row() +3, 0, space( 255 ) ) ? "Endzeit : " + time() ? "Zeitdauer in Sekunden : " + str( seconds() - nSeconds ) ? "Zeitdauer pro Zeile : " + str( ( seconds() - nSeconds ) / nCols ) ? Load the ODBC DatabaseEngine IF(!DbeLoad("odbcdbe")) Alert( "Unable to load the ODBC DatabaseEngine", {"Quit"} ) QUIT ENDIF ? "ODBCDBE geladen" Establish the ODBC connection cConnect := "DBE=odbcdbe; " + ; "DRIVER={SQL Server Native Client 11.0}; " + ; "Server=localhost; " + ; "Database=zoom_msp-it; " + ; "UID=mssql; " + ; "PWD=mssql;" cConnect := "DBE=odbcdbe; " + ; "Driver={MySQL ODBC 5.1 Driver}; " + ; "Server=192.168.10.1; " + ; "Port=3306; " + ; "Database=dema; " + ; "User=dema; " + ; "Password=dema;" oSessionODBC := DacSession():New( cConnect ) Check for connection success IF oSessionODBC:isConnected() ? "ODBCDBE Verbindung hergestellt" else ? oSessionODBC:GetLastMessage() Alert( "Unable to establish connection to ODBC server", {"Quit"} ) QUIT ENDIF ? "Tabelle anlegen" nCols := abs( 512 / 3 ) ? "Spalten : " + str( nCols, 4 ) for nI := 1 to nCols aadd( aDbStruct, { "STRING" + right( "0000" + ltrim( str( nI, 4 ) ), 4 ), "M", 10, 0 } ) aadd( aDbStruct, { "NUMBER" + right( "0000" + ltrim( str( nI, 4 ) ), 4 ), "N", 10, 3 } ) aadd( aDbStruct, { "MEMO" + right( "0000" + ltrim( str( nI, 4 ) ), 4 ), "M", 0, 0 } ) next dbcreate( "test", aDbStruct, oSessionODBC ) ? "Tabelle ”ffnen" dbusearea( .t., oSessionODBC, "test" ) nRows := 1024 ? "Zeilen : " + str( nRows, 4 ) nSeconds := seconds() ? "Startzeit : " + time() Zeilen bzw. Datens„tze for nI := 1 to nRows dispoutat( row() +2, 0, repl( chr( 219 ), abs( nI * 79 / nRows ) +1 ) ) dbappend() Spalten for nJ := 1 to nCols fieldput( fieldpos( "STRING" + right( "0000" + ltrim( str( nJ, 4 ) ), 4 ) ), "Testtext mit 20 Zeichen" ) fieldput( fieldpos( "NUMBER" + right( "0000" + ltrim( str( nJ, 4 ) ), 4 ) ), 123.123 ) fieldput( fieldpos( "MEMO" + right( "0000" + ltrim( str( nJ, 4 ) ), 4 ) ), "Testtext mit 20 Zeichen" ) next next dispoutat( row() +2, 0, space( 255 ) ) dispoutat( row() +3, 0, space( 255 ) ) ? "Endzeit : " + time() ? "Zeitdauer in Sekunden : " + str( seconds() - nSeconds ) ? "Zeitdauer pro Zeile : " + str( ( seconds() - nSeconds ) / nCols ) Disconnect from server oSessionODBC:disconnect() oSessionPG:disconnect() ? RETURN |
![]() | Hubert Brandel | Re: ODBC / MySQL / MsSQL on Mon, 08 Dec 2014 10:18:54 +0100 Am 05.12.2014 14:22, schrieb Gerd Baumgarten: > MySQL Server (entsprechenden ODBC-Connect String aktivieren) klappt es > nicht. > cConnect := "DBE=odbcdbe; " + ; > "Driver={MySQL ODBC 5.1 Driver}; " + ; > "Server=192.168.10.1; " + ; > "Port=3306; " + ; > "Database=dema; " + ; > "User=dema; " + ; > "Password=dema;" als ich meinen MySQL server zuletzt aktualisiert habe, hatte ich ein Problem mit den 5.x ODBC Treibern, da sie UNICODE Daten wollten. Nach der ersten Verwirrung kamen dann neue Versionen und die ANSI Version hat ein "A" oder "Ansi" im Namen. Xbase++ benötigt die ANSI Version ! |
![]() | Gerd Baumgarten | Re: ODBC / MySQL / MsSQL on Mon, 08 Dec 2014 10:29:28 +0100 Danke für die Hilfe. Der MySQL-ODBC-Treiber 5.1 hat keine Unterscheidung, der in der Version 5.3 sehr wohl. Mit der ANSI Version kann ich die Daten sehen, ein browse() verhält sich leicht komisch. Wenn man die Sätze rauf und runter geht, so bekomme ich den 1. Satz öfter angezeigt und kann nicht mehr auf den letzten Satz stellen. Ein Update eines Feldes bringt: Internal data structures corrupted |
![]() | Hubert Brandel | Re: ODBC / MySQL / MsSQL on Tue, 09 Dec 2014 09:35:19 +0100 Am 08.12.2014 10:29, schrieb Gerd Baumgarten:> Der MySQL-ODBC-Treiber 5.1 hat keine Unterscheidung, der in der Version > 5.3 sehr wohl. Hat der aber auch ANSI oder nur stillschweigend UNICODE ? Ich kann mich nur erinnern, dass ich Anfangs den 3.x weiter nutzen musste um noch was zu sehen (meine Programmanmeldung lief auch auf die sql Datenbank und natürlich war das Kennwort nicht gleich |