Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requete Access attachée à des bases de données MySQL

6 réponses
Avatar
Freegate
Bonjour,

J'ai une base de donnée access 2002 connectée via odbc sur un serveur mysql
Mes différentes recherches sur internet m'ont laissé supposer les éléments
suivants :

un "SELECT * FROM Client WHERE col1=10" à partir d'une requete access
entraine le téléchargement en local de toute la table client puis Microsoft
jet exécute en local le "col1=10".

Ma question Comment paramétrer ACCESS, pour que le serveur distant Mysql
puisse exécuter le "col1=10" et renvoyer vers le réseau uniquement les
enregistrements répondant au critère "col1=10" ?

Je sais qu'il existe également le principe des requetes SQL direct. J'ai
effectué un test en créant d'abord une requete SQL direct "SELECT * FROM
Client" puis une requete graphique "SELECT * FROM Client". Il y en a pour
151 enregistrements.

Suprise !!!! le résultat de la requete graphique s'affiche en 2 sec. alors
que la SQL direct prend 4 sec. pour s"afficher.Je m'interroge donc sur
l'intéret des requetes SL Direct, après ce surprenant test. Vous en pensez
quoi ? Est-ce normal d'avoir un résultat de ce genre ?

Merci beaucoup pour vos lumières

6 réponses

Avatar
J-Pierre
Bonsoir,

Le pilote ODBC mySQL n'est pas livré en standard par MS, en tout cas, je ne l'ai pas sur ma machine. Où as-tu trouvé cette info
relative au fonctionnement du pilote ? Pour autant que je sache, il n'y a aucun paramétrage d'Access relatif au fonctionnement d'un
pilote ODBC, mais je dis peut-être une connerie, j'en dis souvent :-)

De toutes façons, si pour récupérer 150 lignes de ta table, ça prend entre 2 et 4 secondes, et que ça ne provient pas d'un problème
de surchage serveur ou réseau, il vaudrait sans doute mieux changer le serveur ou le client, ces 2 là ne font pas un bon couple.

J-Pierre

"Freegate" a écrit dans le message de news: 44771503$0$6667$
Bonjour,

J'ai une base de donnée access 2002 connectée via odbc sur un serveur mysql
Mes différentes recherches sur internet m'ont laissé supposer les éléments
suivants :

un "SELECT * FROM Client WHERE col1" à partir d'une requete access
entraine le téléchargement en local de toute la table client puis Microsoft
jet exécute en local le "col1".

Ma question Comment paramétrer ACCESS, pour que le serveur distant Mysql
puisse exécuter le "col1" et renvoyer vers le réseau uniquement les
enregistrements répondant au critère "col1" ?

Je sais qu'il existe également le principe des requetes SQL direct. J'ai
effectué un test en créant d'abord une requete SQL direct "SELECT * FROM
Client" puis une requete graphique "SELECT * FROM Client". Il y en a pour
151 enregistrements.

Suprise !!!! le résultat de la requete graphique s'affiche en 2 sec. alors
que la SQL direct prend 4 sec. pour s"afficher.Je m'interroge donc sur
l'intéret des requetes SL Direct, après ce surprenant test. Vous en pensez
quoi ? Est-ce normal d'avoir un résultat de ce genre ?

Merci beaucoup pour vos lumières




Avatar
3stone
Salut,

"Freegate"
| J'ai une base de donnée access 2002 connectée via odbc sur un serveur mysql
<snip>


Regarde ici pour un pilote ODBC :
http://dev.mysql.com/doc/refman/5.0/en/odbc-connector.html


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/
Avatar
freegate
"3stone" a écrit dans le message de news:

Salut,

"Freegate"
| J'ai une base de donnée access 2002 connectée via odbc sur un serveur
mysql
<snip>


Regarde ici pour un pilote ODBC :
http://dev.mysql.com/doc/refman/5.0/en/odbc-connector.html


--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
Conseils MPFA: http://www.mpfa.info/



Je suis parti de ce site pour faire tout ma configuration Access - MYSQL.

Pour résumer le poste client doit installer le driver "myODBC" afin que
l'application access puisse attaquer le serveur Mysql via ODBC.

les 2s. s'expliquent par le fait que la base Mysql est internet accessible
par une ligne adsl 512 kbps. Ces 2 sec ne me choquent pas. Mon pb vient du
fait que j'aimerais qu'access récupère uniquement les enregistrements
filtrés plutot que de récupérer toute la table puis ensuite d'appliquer le
filtre.

Malheureusement le site
http://dev.mysql.com/doc/refman/5.0/en/odbc-connector.html ne se penche pas
sur ce détail.

Avatar
J-Pierre
Bonjour,

"freegate" a écrit dans le message de news: 4478f2bb$0$18326$

Je suis parti de ce site pour faire tout ma configuration Access - MYSQL.

Pour résumer le poste client doit installer le driver "myODBC" afin que l'application access puisse attaquer le serveur Mysql via
ODBC.

les 2s. s'expliquent par le fait que la base Mysql est internet accessible par une ligne adsl 512 kbps. Ces 2 sec ne me choquent
pas.


Moi, je veux bien, mais dans un environnement multi-utilisateurs, ça va rapidement choquer tes utilisateurs. Ce serait quand même
bien de déterminer le pourquoi du comment. En particulier, je suppose que col1 est bien défini comme index dans mySQL ? J'ose à
peine poser la question :-(((((

Utilises-tu un VPN pour accéder à ta base ? Si non, comment fais-tu ?

Mon pb vient du fait que j'aimerais qu'access récupère uniquement les enregistrements filtrés plutot que de récupérer toute la
table puis ensuite d'appliquer le filtre.


Quelques questions:-)

Comment accèdes-tu aux données ? source d'un formulaire ? requête ? code VBA exécutant une requête SQL ? Si oui, utilises-tu ADO (ce
qui me semble obligatoire ) ? As-tu essayé toutes ces différentes méthodes ?

Comment sais-tu qu'Access reçoit les 151 lignes ?

As-tu la possibilité de voir la requête que reçoit mySQL ? Et si la condition WHERE a bien été passée au serveur ? Qui, si oui,
serait LE coupable.

As-tu essayé de créer un autre type de base (par exemple Access ou SQLserver pour voir si tu as le même problème ?

J-Pierre


Malheureusement le site http://dev.mysql.com/doc/refman/5.0/en/odbc-connector.html ne se penche pas sur ce détail.








Avatar
freegate
"J-Pierre" a écrit dans le message de
news:
| Bonjour,
|
| "freegate" a écrit dans le message de news:
4478f2bb$0$18326$
| >
| Moi, je veux bien, mais dans un environnement multi-utilisateurs, ça va
rapidement choquer tes utilisateurs. Ce serait quand même
| bien de déterminer le pourquoi du comment. En particulier, je suppose que
col1 est bien défini comme index dans mySQL ? J'ose à
| peine poser la question :-(((((
|

Chaque table a une clé primaire, Chaque clé étrangère est indexé ainsi que
tous les champs qui servent de filtre pour les requetes

| Utilises-tu un VPN pour accéder à ta base ? Si non, comment fais-tu ?

euh j'en n'ai pas besoin. Les bases du genre Mysql, Sql server sont prévu
pour etre accessibles depuis internet de la même façon qu'en local. Il
suffit d'avoir fournir au client qui se connectera à cette base (Access,
Page PHP ou Asp) une adresse IP, un nom d'utilisateur, un mot de passe et
éventuellement le port de communication du serveur SQL. A prori le VPN
servirait pour sécurisé le flux transmis en le cryptant. Mais mes données ne
sont pas critiques, ni secret défense. Je vise d'abord la perfomance avant
la sécurité

| Comment accèdes-tu aux données ? source d'un formulaire ? requête ? code
VBA exécutant une requête SQL ? Si oui, utilises-tu ADO (ce
| qui me semble obligatoire ) ? As-tu essayé toutes ces différentes méthodes
?

Sur le poste client, j'installe MyODBC qui se charge ensuite de relier le
poste de travail et la base de donnée distante. Puis dans Access (fichier
mdb) j'attache les tables que me donne MyODBC. Une fois que les tables sont
liées, je peux faire créer des requetes graphiques, des formulaires se
basant sur des tables liées, des requetes DIRECT SQL, de l'ADO.

| Comment sais-tu qu'Access reçoit les 151 lignes ?

Car la table MySql a 151 enregistrements et dans Access je les vois toutes
soit via une requete graphique soit en double cliquant sur la table liée. A
vrai dire je ne vois pas ou tu veux en venir ?

| As-tu la possibilité de voir la requête que reçoit mySQL ? Et si la
condition WHERE a bien été passée au serveur ? Qui, si oui,
| serait LE coupable.

Non je n'ai pas cette possibilité à ma connaissance. Mais tout porte à
croire que le serveur distant ne recoit pas la condition sinon il renverrait
uniquement les enregistrements demandés.


| As-tu essayé de créer un autre type de base (par exemple Access ou
SQLserver pour voir si tu as le même problème ?

Le principe est le même avec une base de type SQL server ou Mysql ou Oracle.
Si la requete Access n'est pas paramétrée correctement SQL server ou Mysql
ou Oracle renverra tous les enregsitrements de la table puis access fera
l'évaluation pour savoir si les critères de la requete sont respectés. Pour
empecher cela, il est nécessaire de paramétrer Access d'une certaine façon,
ou de faire une requete spéciale qui incite le serveur distant à renvoyer
directement le résultat filtré de la requete. Malheureusement les sites qui
me donnent cette info ne disent pas comment faire ce paramétrage ?
Avatar
J-Pierre
Bonjour,

"freegate" a écrit dans le message de news: 447a5b11$0$20152$

| Comment sais-tu qu'Access reçoit les 151 lignes ?

Car la table MySql a 151 enregistrements et dans Access je les vois toutes
soit via une requete graphique soit en double cliquant sur la table liée. A
vrai dire je ne vois pas ou tu veux en venir ?



J'essaie de déterminer qui est le coupable, et comme je n'ai aucune expérience avec mySQL, je tâtonne....

Quand je demandais "Comment sais-tu qu'Access reçoit les 151 lignes ?", je pensais bien sûr au cas où tu exécutes une requête avec
sélection. Dans ton premier post, tu as dit:

"un "SELECT * FROM Client WHERE col1" à partir d'une requete access entraine le téléchargement en local de toute la table client
puis Microsoft
jet exécute en local le "col1"."

Ce qui veut dire que dans ton formulaire, tu ne vois que les lignes avec col1. D'où ma question. Comment sais-tu qu'Access a reçu
151 lignes pour n'afficher que celles que tu veux sélectionner puisque le recordSet du formulaire ne contient que les lignes
sélectionnées ?


| As-tu essayé de créer un autre type de base (par exemple Access ou
SQLserver pour voir si tu as le même problème ?

Le principe est le même avec une base de type SQL server ou Mysql ou Oracle.
Si la requete Access n'est pas paramétrée correctement SQL server ou Mysql
ou Oracle renverra tous les enregsitrements de la table puis access fera
l'évaluation pour savoir si les critères de la requete sont respectés. Pour
empecher cela, il est nécessaire de paramétrer Access d'une certaine façon,
ou de faire une requete spéciale qui incite le serveur distant à renvoyer
directement le résultat filtré de la requete. Malheureusement les sites qui
me donnent cette info ne disent pas comment faire ce paramétrage ?

As-tu réellement codé "Col1", ou bien as-tu en réalité quelque chose comme "Col1 = Forms!monForm!monChamp ?" que le pilote ODBC

ne reconnaît pas ?

Avec mySQL, je ne sais pas, mais avec SQLServer, si une requête est mal paramétrée, en retour, tu reçois un code erreur, pas des
lignes... Et puis, "mal paramétrée", ça n'existe pas, soit ta requête contient une condition SQL WHERE (valide, le résultat est
filtré, pas valide tu as une erreur) soit il n'y a pas de condition WHERE et tu reçois toute la table. Il faut donc déterminer qui
bouffe la commission, Access qui ne passe pas le Where au pilote ODBC ou le pilote ODBC qui ne le passe pas au serveur...

Dans le pire des cas, si tu n'y arrives vraiment pas, et si tu penses que ça peut t'aider, et si tu en as envie, et si ce n'est pas
trop confidentiel, tu peux m'envoyer ta base Access, j'installerai le pilote mySQL et j'essaierai.

J-Pierre