2010-04-27 2 views
1

J'ai créé une table liée à une table MySQL dans MS Access 2003. J'ai utilisé le pilote mysql-connector-odbc-5.1.6-win32 que j'ai trouvé sur le site MySQL. Lorsque je vois la table, je ne peux voir que 70 caractères dans un champ VARCHAR (255). Quelqu'un at-il eu de la chance en utilisant MySQL de MS Access?Champ MySQL tronqué lors des connexions depuis MS Access

+0

J'ai utilisé MySQL 4.x. Les seuls problèmes que j'ai jamais eu étaient avec des tables qui avaient des index de texte intégral, Access ne semble pas aimer. –

Répondre

0

Eh bien, c'est embarrassant. La table que je regardais a une colonne qui est une version tronquée de la colonne plus longue et je regardais celle-ci à la place.

+0

Oups! Je déteste quand ce genre de chose arrive! :) –

0

Juste une supposition, je ne sais pas si 70 était un nombre exact, mais:

255/4 = 63.75 (so 63) Cela signifie donc une limite de 255 octets permettrait seulement 63 caractères de 4 octets.

Je ne suis pas sûr si quelque part sur le MySQL < -> L'accès rend l'encodage bizarre.

Si votre table utilise un plus grand encodage de chaîne, peut-être que cela limite le nombre de caractères?

Je pourrais aussi me tromper totalement.

0

Ça fait longtemps que j'ai travaillé avec des tables MySQL à partir de MS Access, mais d'après ce dont je me souviens, je ne pense pas qu'Access utilise directement les définitions de champs de MySQL pour relier des tables. Je ne me souviens pas s'il s'agissait de tables ou de requêtes directes, mais je me souviens qu'il semblait parfois qu'Access se basait sur les définitions de champs des données contenues dans les premières lignes téléchargées.

Il se peut qu'un paramètre facultatif soit spécifié dans la chaîne de connexion pour vous aider à configurer les définitions de champ correctes. Consultez www.connectionstrings.com ou le site Web de MySQL pour plus d'informations. En fait, je n'ai pas lié les tables MySQL dans Access car les performances des requêtes qui reliaient deux tables étaient si horribles. Cependant, j'ai utilisé assez fréquemment des requêtes de transmission avec beaucoup de succès. Lors de l'utilisation des requêtes directes, le travail de la requête est effectué par le moteur MySQL et non par le moteur JET d'accès, ce qui entraîne généralement de meilleures performances car seules les données finales arrivent sur le client. Toutefois, vous perdez l'avantage WYSIWYG de l'édition de requête dans Access lorsque vous utilisez des requêtes directes.

Une solution complexe que j'utiliserais impliquerait l'utilisation d'une requête directe pour créer automatiquement une table que je pourrais périodiquement mettre à jour manuellement. Je devrais modifier manuellement la définition de la table lors de la configuration (puisque la requête n'a pas déroulé les définitions de champs), mais une fois que j'ai modifié la table, je pourrais mettre à jour la table avec des données MySQL. J'ai utilisé cette technique quand je devais faire beaucoup de choses compliquées dans Access et que je tirais des tonnes de données.

+0

Jet prendra une bonne décision et enverra la plupart des requêtes de données au serveur si le pilote ODBC lui fournit suffisamment de métadonnées. Je blâmerais le pilote ODBC pour des problèmes comme celui-ci, car Access avec SQL Server over ODBC est très efficace, ne tirant presque jamais toutes les données pour les requêtes qui peuvent être traitées sur le serveur. –

+0

Merci Ben. Je pense que je vais essayer les requêtes pass-thru. Dois-je installer le pilote ODBC sur toutes les machines client? Puis-je le faire sans avoir à créer un DSN pour chaque machine? – Paul

+0

J'ai été en mesure de rendre les tables liées sans DSN en exécutant le code trouvé ici: http://www.accessmvp.com/djsteele/DSNLessLinks.html Je n'ai toujours pas compris le problème avec le champ tronqué – Paul