8.3 Support ODBC avec MySQL
8 Les interfaces pour MySQL
Manuel de Référence MySQL 4.1 : Version Française
. Comment installer MyODBC . Comment remplir les différents champs dans le programme d'administrateur ODBC . Paramètres de connexion de MyODBC . Comment reporter les problèmes avec ODBC ->Programmes qui fonctionnent avec MyODBC . Comment obtenir la valeur d'une colonne AUTO_INCREMENT avec ODBC . Rapporter des problèmes avec MyODBC
|
8.3.5 Programmes qui fonctionnent avec MyODBC La majorité des programmes devraient fonctionner avec
MyODBC
, mais tous
ceux que nous avons listés ici sont ceux que nous avons testé nous même, ou dont
nous avons reçu la confirmation de la part d'utilisateurs :
-
Programme
-
Commentaire
-
Access
-
Pour le faire fonctionner avec Access :
-
Si vous utilisez Access 2000, vous devez installer la dernière
Microsoft MDAC (
Microsoft Data Access
Components
) (version 2.6 ou plus récente) depuis http://www.microsoft.com/data/ .
Cela va corriger le bug suivant d'Access : lorsque vous exportez des données
vers MySQL, les noms de la table et des colonnes ne sont pas spécifiés.
Un autre moyen de pallier à ce bug est de passer en
MyODBC version 2.50.33 et MySQL version
3.23.x, qui, ensemble, forment un correctif à ce bug!Vous devriez aussi installer le Microsoft Jet 4.0 Service Pack 5 (SP5)
disponible à http://support.microsoft.com/support/kb/articles/Q239/1/14.ASP .
Cela va corriger certains cas ou les colonnes étaient marquées comme effacées (
#deleted#
)
dans Access.Notez que si vous utilisez MySQL version 3.22, vous devez appliquer le patch
MDAC et utiliser MyODBC 2.50.32 ou 2.50.34 et plus récent pour corriger ce bug.
-
Pour toutes les versions d'Access, vous devez activer l'option MyODBC
appelée
Return matching rows
. Pour Access 2.0, vous devez aussi activer
Simulate ODBC 1.0
.
-
Vous devez avoir un timestamp dans toutes les tables que vous voulez pouvoir
modifier. Pour une meilleure portabilité,
TIMESTAMP(14)
ou un simple
TIMESTAMP
est recommandé au lieu de
TIMESTAMP(X)
.
-
Vous devez avoir une clé primaire dans la table. Sinon, les nouvelles lignes
et les lignes modifiées peuvent être marquées comme effacées
#DELETED#
.
-
N'utilisez que les champs
DOUBLE
. Access échoue lors des comparaisons
entre les champs en simple précision. Le symptôme est généralement que les nouvelles
lignes ou les lignes modifiées sont marquées comme effacées (
#DELETED#
), ou
que vous ne pouvez plus trouver les nouvelles lignes ou les lignes modifiées.
-
Si vous reliez des tables via MyODBC, dont l'une des colonnes est de type
BIGINT
,
les résultats sont affichés comme effacés (
#DELETED
). La solution
est :
-
Avoir au moins une colonne de type
TIMESTAMP
comme type de données, et
de préférence
TIMESTAMP(14)
.
-
Vérifiez l'option de connexion
'Change BIGINT columns to INT'
dans l'administrateur
ODBC DSN.
-
Effacez le lien de table dans Access, et recréez le.
Les anciennes lignes seront toujours marquées comme
#DELETED#
, mais les
nouvelles lignes seront affichées correctement.
-
Si vous butez toujours dans l'erreur
Another user has changed your data
après
avoir ajouté une colonne
TIMESTAMP
, le truc suivant peut vous aider : N'utilisez pas la vue de
table
au format tableur. A la place, créez un formulaire
avec les champs que vous souhaitez, et utilisez ce formulaire comme vue de la table.
Vous devez utiliser la propriété
DefaultValue
pour la colonne
TIMESTAMP
,
avec la valeur
NOW()
. C'est une bonne idée de cacher la colonne
TIMESTAMP
à vos utilisateurs, pour qu'ils ne soient pas perturbés.
-
Dans certains cas, Access peut générer des requêtes SQL illégales, que
MySQL ne peut comprendre. Vous pouvez corriger cela en sélectionnant
"Query|SQLSpecific|Pass-Through"
dans le menu Access.
-
Access sur NT va indiquer que les colonnes
BLOB
sont des
OLE OBJECTS
. Si
vous voulez avoir des colonnes de type
MEMO
à la place, vous devez changer le type
de la colonne en
TEXT
avec
ALTER TABLE
.
-
Access ne peut pas toujours gérer correctement les colonnes
DATE
. Sis vous avez des
problèmes avec, changez ces colonnes en type
DATETIME
.
-
Si vous avec une colonne Access de type
BYTE
, Access va essayer
de l'exporter sous la forme d'un
TINYINT
au lieu d'un
TINYINT UNSIGNED
.
Cela va vous donner des problèmes si vous avez des valeurs supérieures à 127!
-
ADO
-
Lorsque vous programmez avec l'API ADO et
MyODBC
vous devez faire attention
aux propriétés par défaut qui ne sont pas supportées par MySQL. Par exemple,
utiliser la propriété
CursorLocation Property
comme
adUseServer
va
retourner des valeurs de -1 pour
RecordCount Property
. Pour avoir la véritable
valeur, vous devez utiliser la valeur
adUseClient
, comme dans le code VB ci-contre :
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
|
Un autre palliatif est d'utiliser la commande
SELECT COUNT(*)
,
pour connaître le nombre exact de lignes.
-
Active server pages (ASP)
-
Vous devez utiliser l'option
Return matching rows
.
-
Applications BDE
-
Pour faire fonctionner ces applications, vous devez activer les options
Don't optimize column widths
et
Return matching rows
.
-
Borland Builder 4
-
Lorsque vous démarrez une requête, vous pouvez utiliser la propriété
Active
ou utiliser la méthode
Open
. Notez que
Active
va commencer en générant automatiquement une requête
SELECT * FROM ...
qui
peut ne pas être pratique avec de grosses tables!
-
ColdFusion (On Unix)
-
Les informations suivantes sont reprises de la documentation ColdFusion :Utilisez les informations suivantes pour configurer le serveur ColdFusion Server
sous Linux pour utiliser le pilote unixODBC avec
MyODBC
pour les
serveurs MySQL. Allaire a vérifié que
MyODBC
version 2.50.26
fonctionne avec MySQL version 3.22.27 et ColdFusion pour Linux. (toute nouvelle
version doit aussi fonctionner). Vous pouvez télécharger
MyODBC
à
http://www.mysql.com/downloads/api-myodbc.html
ColdFusion version 4.5.1 vous permet d'utiliser l'administrateur ColdFusion
pour ajouter des serveurs MySQL. Toutefois, le pilote n'est pas inclus dans
ColdFusion version 4.5.1. Auparavant, le pilote MySQL était disponible dans
le menu déroulant. Vous devez compiler et copier le pilote
MyODBC
dans
/opt/coldfusion/lib/libmyodbc.so
.
Le dossier Contrib contient le programme
mydsn-xxx.zip
qui vous permet
de compiler et supprimer des fichiers d'enregistrement DSN pour MyODBC sur les
applications Coldfusion.
-
DataJunction
-
Vous devez le modifier pour qu'il exporte des
VARCHAR
plutôt que des
ENUM
,
car il exporte ces derniers d'une manière qui pose des problèmes à MySQL.
-
Excel
-
Fonctionne. Quelques conseils :
-
Si vous avez des problèmes avec les dates, essayez de les sélectionner comme des
chaînes, en utilisant la fonction
CONCAT()
. Par exemple :
select CONCAT(rise_time), CONCAT(set_time) from sunrise_sunset;
|
Les valeurs lues sous forme de chaînes seront correctement relues par
Excel97.
Le but de la fonction
CONCAT()
est de faire croire à ODBC que cette colonne
est de type ``string''. Sans la fonction
CONCAT()
, ODBC sait que la colonne
est de type heure, et Excel ne le comprendra pas.
Notez qu'il y a un bug dans Excel, car il convertit automatiquement une chaîne
en heure. Cela serait bien si la source était un fichier texte, mais c'est
totalement idiot si la source est une connexion ODBC qui fournit les types
exacts.
-
Word
-
Pour lire des données depuis MySQL vers des documents Word ou Excel, vous devez
utiliser le pilote
MyODBC
et l'aide Add-in Microsoft Query.Par exemple, pour créer une base de données avec une table contenant 2 colonnes
de type texte :
-
Insérez des lignes avec le client
mysql
.
-
Créez un fichier DSN en utilisant le gestionnaire ODBC, par exemple,
my
pour la base ci-dessus.
-
Ouvrez Word.
-
Créez un nouveau document vide.
-
Utilisez la barre "Database", pressez sur le bouton d'insertion.
-
Pressez sur le bouton "Get Data".
-
Sur la droite de l'écran, choisissez le bouton "Ms Query".
-
Dans ce écran, créez une nouvelle source de données avec "New Data Source" et en utilisant le fichier
DSN
my
.
-
Sélectionner une nouvelle requête.
-
Sélectionnez les colonnes que vous souhaitez.
-
Faîtes votre filtre.
-
Faîtes votre tri.
-
Sélectionnez "Return Data" de Microsoft Word.
-
Cliquez sur "Finish".
-
Cliquez sur le bouton "Insert data" et sélectionnez les lignes.
-
Cliquez sur "OK" et vous verrez vous lignes dans votre document Word.
-
odbcadmin
-
Programme de test pour ODBC.
-
Delphi
-
Vous devez utiliser BDE version 3.2 ou plus récent. Utilisez l'option
Don't optimize column width
lors de la connexion à MySQL.De plus, voici un code Delphi pratique, pour configurer une entrée ODBC et
une entrée BDE pour
MyODBC
(l'entrée BDE requiert le BDE
Alias Editor qui est gratuit sur les pages "Delphi Super Page" près de chez
vous. (Merci à Bryan Brunton bryan@flesherfab.com pour cela ) :
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);
|
-
C++ Builder
-
Testé avec BDE version 3.0. Le seul problème connu est que lorsque la structure
d'une table change, les champs de requêtes ne changent pas. BDE ne semble
pas reconnaître les clés primaires, mais uniquement l'index PRIMARY, même si
cela n'a jamais été un problème.
-
Vision
-
Vous devriez utiliser l'option
Return matching rows
.
-
Visual Basic
-
Pour être capable de modifier une table, vous devez définir une clé primaire.Visual Basic avec ADO ne peut pas gérer les grands entiers. Cela signifie que
les requêtes comme
SHOW PROCESSLIST
ne vont pas fonctionner correctement. Le
correctif consiste à ajouter l'option
OPTION=16834
dans la chaîne de connexion
ODBC pour d'utiliser l'option
Change BIGINT columns to INT
de MyODBC.
Vous pouvez aussi utiliser l'option
Return matching rows
.
-
VisualInterDev
-
Si vous rencontrez l'erreur
[Microsoft][ODBC Driver Manager] Driver does
not support this parameter
, la raison est que vous avez un grand entier
BIGINT
dans votre résultat. Essayez d'utiliser l'option
Change BIGINT
columns to INT
de MyODBC.
-
Visual Objects
-
Vous devez utiliser l'option
Don't optimize column widths
.
|