Services webmasters
Partenaires
Jeux concours gratuits
 
Comment reporter les problèmes avec ODBC
<<<
Programmes qui fonctionnent avec MyODBC Comment obtenir la valeur d'une colonne AUTO_INCREMENT avec ODBC
>>>

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.php

    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 .

<< Programmes qui fonctionnent avec MyODBC >>
Comment reporter les problèmes avec ODBC Support ODBC avec MySQL Comment obtenir la valeur d'une colonne AUTO_INCREMENT avec ODBC
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -