[+/-]
Die meisten Programme sollten mit MyODBC gut harmonieren, doch für die folgenden gibt es bestimmte Hinweise und Tipps zur Verbesserung der Arbeit mit MyODBC und dem betreffenden Programm.
Bei allen Anwendungen sollten Sie immer darauf achten, die jeweils neuesten Versionen von MyODBC-Treibern, ODBC-Manager und den von der Anwendung benutzten Bibliotheken und Schnittstellen einzusetzen. Wenn Sie beispielsweise unter Windows die neueste Version der Microsoft Data Access Components (MDAC) verwenden, wird die Kompatibilität mit ODBC im Allgemeinen und mit dem MyODBC-Treiber im Besonderen besser.
[+/-]
Die meisten Microsoft-Anwendungen wurden mit MyODBC getestet, einschließlich Microsoft Office, Microsoft Access und den verschiedenen von ASP und Microsoft Visual Studio unterstützten Programmiersprachen.
Wenn Sie mit MyODBC Probleme haben, aber Ihr Programm auch mit OLEDB funktioniert, sollten Sie den OLEDB-Treiber ausprobieren.
Die Integration von Microsoft Access und MySQL können Sie mit MyODBC wie folgt verbessern:
Für alle Access-Versionen sollten Sie die MyODBC-Option
Übereinstimmende Zeilen zurückgeben
einschalten. Für Access 2.0 sollten Sie zusätzlich die
Option Simulate ODBC 1.0
aktivieren.
Alle Tabellen, die für Aktualisierungen zur Verfügung
stehen sollen, müssen eine
TIMESTAMP
-Spalte haben. Um die
größtmögliche Portierbarkeit zu erzielen, sollten Sie
keine Länge in der Spaltendeklaration angeben (dies
wird von MySQL-Versionen vor 4.1 nicht unterstützt).
Jede MySQL-Tabelle, die mit Access benutzt werden soll,
benötigt einen Primärschlüssel. Ist dieser nicht
vorhanden, können neu eingefügte oder aktualisierte
Zeilen als #DELETED#
erscheinen.
Verwenden Sie nur
DOUBLE
-Float-Felder. Access kann
keine Float-Werte mit einfacher Genauigkeit vergleichen.
Infolgedessen können neu eingefügte oder aktualisierte
Zeilen als #DELETED#
erscheinen, oder
Sie können Zeilen nicht finden oder aktualisieren.
Wenn Sie MyODBC zum Verknüpfen einer Tabelle verwenden,
die eine BIGINT
-Spalte hat, werden
die Ergebnisse als #DELETED#
angezeigt. Der Workaround hierfür ist:
Sie richten eine oder mehrere Dummy-Spalten mit dem
Datentyp TIMESTAMP
ein.
Sie wählen die Option Change BIGINT
columns to INT
im Verbindungsdialog vom
ODBC DSN Administrator.
Sie löschen die Tabellenverknüpfung aus Access und legen sie neu an.
Eventuell werden alte Einträge immer noch als
#DELETED#
angezeigt, während neu
eingefügte/aktualisierte Einträge richtig angezeigt
werden.
Wenn Sie nach dem Hinzufügen einer
TIMESTAMP
-Spalte immer noch den
Fehler Another user has changed your
data
bekommen, können Sie sich mit folgendem
Trick behelfen:
Verwenden Sie keine
table
-Datenblattansicht, sondern
legen Sie ein Formular mit den gewünschten Feldern an
und benutzen dann die
form
-Datenblattansicht. Die
Eigenschaft DefaultValue
der
TIMESTAMP
-Spalte setzen Sie auf
NOW()
. Am besten verbergen Sie die
TIMESTAMP
-Spalte, um die Benutzer
nicht zu verwirren.
In manchen Fällen generiert Access SQL-Anweisungen, die
MySQL nicht versteht. Dann wählen Sie
"Query|SQLSpecific|Pass-Through"
aus
dem Access-Menü.
Auf Windows NT meldet Access
BLOB
-Spalten als OLE
OBJECTS
. Wenn Sie stattdessen
MEMO
-Spalten wünschen, wandeln Sie
mit einem ALTER TABLE
die
BLOB
-Spalten in
TEXT
-Spalten um.
Access kommt nicht immer mit der
DATE
-Spalte von MySQL zurecht. Wenn
Sie deswegen Probleme haben, ändern Sie die Spalten in
DATETIME
-Spalten um.
Access versucht, BYTE
-Spalten als
TINYINT
statt als TINYINT
UNSIGNED
zu exportieren. Das führt zu
Problemen, wenn die Spalte größere Werte als 127
enthält.
Wenn Sie in Access äußerst große (long) Tabellen
gespeichert haben, kann es lange dauern, sie zu öffnen.
Oder es geht Ihnen der virtuelle Speicher aus, sodass
Sie einen ODBC Query Failed
-Fehler
bekommen und die Tabelle sich gar nicht mehr öffnen
lässt. Dies können Sie mit folgenden Optionen beheben:
Return Matching Rows (2)
Allow BIG Results (8)
In der Summe ergibt das 10
(OPTION=10
).
Einige externe Fachbeiträge und Tipps zu Access, ODBC und MyODBC sind recht nützlich:
ODBC-Anwendungen für Access optimieren
Eine Liste von Tools für die Verwendung mit Access und ODBC-Datenquellen gibt es unter converters.
Wenn Sie Probleme mit dem Importieren von Daten in Microsoft Excel haben, insbesondere bei numerischen Werten sowie Datums- und Uhrzeitwerten, so liegt das wahrscheinlich an einem Excel-Bug: Der Datentyp für Einfügungen in Arbeitsblatt-Zellen wird anhand des Spaltentyps der Quelldaten bestimmt. Das führt dazu, dass Excel den Inhalt nicht richtig identifiziert, was sich sowohl auf das Anzeigeformat als auch auf Berechnungen auswirkt.
Dies beheben Sie, indem Sie in Ihren Anfragen die
CONCAT()
-Funktion einsetzen. So zwingen
Sie Excel, den Wert als String zu behandeln: Excel parst
dann den String und erkennt die darin enthaltenen Daten
richtig.
Dennoch können manche Daten dann immer noch falsch
formatiert werden, auch wenn die Quelldaten unverändert
bleiben. Die Excel-Option Zellen
formatieren
ändert das Format der angezeigten
Informationen.
Um eine Tabelle aktualisieren zu können, müssen Sie zuerst einen Primärschlüssel für die Tabelle definieren.
Visual Basic mit ADO kann mit großen Integern nicht
umgehen. Das führt dazu, dass manche Anfragen, wie etwa
SHOW PROCESSLIST
, nicht richtig
funktionieren. Dies beheben Sie mit
OPTION=16384
im ODBC-Verbindungs-String
oder indem Sie im MyODBC-Verbindungsbildschirm die Option
Change BIGINT columns to INT
aktivieren.
Zugleich sollten Sie dann auch die Option Return
matching rows
einschalten.
Wenn Ihre Ergebnismenge einen BIGINT
enthält, kann der Fehler [Microsoft][ODBC Driver
Manager] Driver does not support this parameter
auftreten. Versuchen Sie in diesem Fall, die Option
Change BIGINT columns to INT
im
MyODBC-Verbindungsbildschirm einzuschalten.
Wenn Sie die ADO-API und MyODBC verwenden, müssen Sie auf
einige Standardeigenschaften achten, die vom MySQL Server
nicht unterstützt werden. Wenn Sie beispielsweise
CursorLocation Property
als
adUseServer
verwenden, bekommen Sie für
die RecordCount Property
das Ergebnis
–1 heraus. Um den richtigen Wert zu erhalten, müssen
Sie diese Eigenschaft auf adUseClient
setzen, wie es im nachfolgenden VB-Code getan wird:
Dim myconn As New ADODB.Connection Dim myrs As New Recordset Dim mySQL As String Dim myrows As Long myconn.Open "DSN=MyODBCsample" mySQL = "SELECT * from user" myrs.Source = mySQL Set myrs.ActiveConnection = myconn myrs.CursorLocation = adUseClient myrs.Open myrows = myrs.RecordCount myrs.Close myconn.Close
Ein anderer Workaround besteht darin, eine SELECT
COUNT(*)
-Anweisung für ähnliche Abfragen zu
verwenden, um die richtige Zeilenzahl zu erhalten.
Um die Anzahl der von einer bestimmten SQL-Anweisung in ADO
betroffenen Zeilen zu ermitteln, setzen Sie die Eigenschaft
RecordsAffected
in der
ADO-Execute-Methode. Mehr über Execute-Methoden erfahren
Sie unter
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdmthcnnexecute.asp.
Weitere Informationen gibt es unter ActiveX Data Objects (ADO) Frequently Asked Questions.
Sie sollten die Option Return matching
rows
im DSN aktivieren.
Weitere Informationen über den Zugriff auf MySQL mit ASP und MyODBC finden Sie in folgenden Fachbeiträgen:
Eine Liste häufig gestellter Fragen (FAQ) zu ASP finden Sie unter http://support.microsoft.com/default.aspx?scid=/Support/ActiveServer/faq/data/adofaq.asp.
Folgende Beiträge bieten Hilfe zu Visual Basic und ASP:
MySQL
BLOB columns and Visual Basic 6 von Mike Hillyer
(<mike@openwin.org>
).
How
to map Visual basic data type to MySQL types von
Mike Hillyer (<mike@openwin.org>
).
[+/-]
Für alle Borland-Anwendungen, in denen die Borland Database Engine (BDE) benutzt wird, gelten folgende Hinweise zur Verbesserung der Kompatibilität:
Aktualisieren Sie auf BDE 3.2 oder neuer.
Aktivieren Sie die Option Don't optimize column
widths
im DSN.
Aktivieren Sie die Option Return matching
rows
im DSN.
Wenn Sie eine Anfrage starten, können Sie die Eigenschaft
Active
oder die Methode
Open
einsetzen. Das Starten mit
Active
verläuft so, dass automatisch
eine SELECT * FROM ...
-Anfrage abgesetzt
wird. Das kann nach hinten losgehen, wenn Ihre Tabellen zu
groß sind.
Der nachfolgende Delphi-Code kann sehr nützlich sein, um
sowohl einen ODBC- als auch einen BDE-Eintrag für MyODBC zu
erstellen. Für den BDE-Eintrag ist ein BDE Alias Editor
erforderlich, den Sie kostenlos bei einer Delphi Super Page
in Ihrer Nähe bekommen können (Danke an Bryan Brunton
<bryan@flesherfab.com>
für dieses Programm):
fReg:= TRegistry.Create; fReg.OpenKey('\Software\ODBC\ODBC.INI\DocumentsFab', True); fReg.WriteString('Database', 'Documents'); fReg.WriteString('Description', ' '); fReg.WriteString('Driver', 'C:\WINNT\System32\myodbc.dll'); fReg.WriteString('Flag', '1'); fReg.WriteString('Password', ''); fReg.WriteString('Port', ' '); fReg.WriteString('Server', 'xmark'); fReg.WriteString('User', 'winuser'); fReg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True); fReg.WriteString('DocumentsFab', 'MySQL'); fReg.CloseKey; fReg.Free; Memo1.Lines.Add('DATABASE NAME='); Memo1.Lines.Add('USER NAME='); Memo1.Lines.Add('ODBC DSN=DocumentsFab'); Memo1.Lines.Add('OPEN MODE=READ/WRITE'); Memo1.Lines.Add('BATCH COUNT=200'); Memo1.Lines.Add('LANGDRIVER='); Memo1.Lines.Add('MAX ROWS=-1'); Memo1.Lines.Add('SCHEMA CACHE DIR='); Memo1.Lines.Add('SCHEMA CACHE SIZE=8'); Memo1.Lines.Add('SCHEMA CACHE TIME=-1'); Memo1.Lines.Add('SQLPASSTHRU MODE=SHARED AUTOCOMMIT'); Memo1.Lines.Add('SQLQRYMODE='); Memo1.Lines.Add('ENABLE SCHEMA CACHE=FALSE'); Memo1.Lines.Add('ENABLE BCD=FALSE'); Memo1.Lines.Add('ROWSET SIZE=20'); Memo1.Lines.Add('BLOBS TO CACHE=64'); Memo1.Lines.Add('BLOB SIZE=32'); AliasEditor.Add('DocumentsFab','MySQL',Memo1.Lines);
Ist getestet mit BDE 3.0. Das einzige bekannte Problem ist:
Wenn sich das Tabellenschema ändert, werden die Felder der
Anfrage nicht aktualisiert. Allerdings erkennt BDE offenbar
auch keine Primärschlüssel, sondern nur den Index mit dem
Namen PRIMARY
, was allerdings bisher noch
keine Probleme verursacht hat.
Die folgenden Informationen wurden der ColdFusion-Dokumentation entnommen:
Anhand der folgenden Informationen konfigurieren Sie den
ColdFusion Server für Linux für die Benutzung des
unixODBC
-Treibers mit MyODBC für
MySQL-Datenquellen. Allaire hat sichergestellt, dass MyODBC
2.50.26 mit MySQL 3.22.27 und ColdFusion für Linux
funktioniert. (Auch alle neueren Versionen müssten
funktionieren.) Sie können MyODBC unter folgender Adresse
herunterladen:
http://dev.mysql.com/downloads/connector/odbc/.
Die ColdFusion-Version 4.5.1 ermöglicht es, die
MySQL-Datenquelle mit ColdFusion Administrator zu laden.
Allerdings wird der Treiber mit der ColdFusion-Version 4.5.1
nicht mitgeliefert. Bevor der MySQL-Treiber in der
Dropdown-Liste der ODBC-Datenquellen auftaucht, müssen Sie
den MyODBC-Treiber bauen und in
/opt/coldfusion/lib/libmyodbc.so
kopieren.
Das Contrib-Verzeichnis enthält das Programm
mydsn-
,
mit dem Sie die DSN-Registrierungsdatei für den
MyODBC-Treiber in ColdFusion-Anwendungen erstellen und
entfernen können.
xxx
.zip
Weitere Informationen und Hinweise für die Benutzung von ColdFusion und MyODBC finden Sie auf folgenden externen Sites:
MySQL ColdFusion unixODBC MyODBC and Solaris - how to succeed
ColdFusion (auf Solaris und NT mit Service Pack 5), How-to: MySQL and ColdFusion
Troubleshooting Data Sources and Database Connectivity for Unix Platforms
Open Office (http://www.openoffice.org) How-to: MySQL + OpenOffice. How-to: OpenOffice + MyODBC + unixODBC (englisch)
Sambar Server (http://www.sambarserver.info) How-to: MyODBC + SambarServer + MySQL
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.