Bonjour à tous,
Salut
J'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew, et je les met à jour avec
la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la place de .AddNew ou .Edit,
Par contre, là où je pense que c'est moins bon, c'est dans la restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des données d'une base
J'ai donc par un moment pensé à rappatrier d'abord localement les données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à gérer ... Cependant si c'est
la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes données en local, comment tu
De même, dans mes formulaires, pour les zones de liste, je les alimente en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.
En somme :
Si je reste avec mon architecture (Access en client serveur + DAO), quelle est la bonne méthode à
utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras jamais des temps de réponse
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')
Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté "serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose
- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server, Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de l'ordinateur) sur chaque
- Un DSN est il nécessairement une connexion ODBC ?
Oui.
D'avance un grand merci ...
Laurent
Bonjour à tous,
Salut
J'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew, et je les met à jour avec
la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la place de .AddNew ou .Edit,
Par contre, là où je pense que c'est moins bon, c'est dans la restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des données d'une base
J'ai donc par un moment pensé à rappatrier d'abord localement les données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à gérer ... Cependant si c'est
la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes données en local, comment tu
De même, dans mes formulaires, pour les zones de liste, je les alimente en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.
En somme :
Si je reste avec mon architecture (Access en client serveur + DAO), quelle est la bonne méthode à
utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras jamais des temps de réponse
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')
Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté "serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose
- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server, Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de l'ordinateur) sur chaque
- Un DSN est il nécessairement une connexion ODBC ?
Oui.
D'avance un grand merci ...
Laurent
Bonjour à tous,
Salut
J'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew, et je les met à jour avec
la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la place de .AddNew ou .Edit,
Par contre, là où je pense que c'est moins bon, c'est dans la restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des données d'une base
J'ai donc par un moment pensé à rappatrier d'abord localement les données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à gérer ... Cependant si c'est
la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes données en local, comment tu
De même, dans mes formulaires, pour les zones de liste, je les alimente en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.
En somme :
Si je reste avec mon architecture (Access en client serveur + DAO), quelle est la bonne méthode à
utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras jamais des temps de réponse
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')
Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté "serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose
- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server, Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de l'ordinateur) sur chaque
- Un DSN est il nécessairement une connexion ODBC ?
Oui.
D'avance un grand merci ...
Laurent
Bonjour à tous,
SalutJ'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew,
et je les met à jour avec
la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la
place de .AddNew ou .Edit,
le SQL est bien plus performant d'une part et d'autre part si tu passes
sur serveur de type SGBDR
là le SQL est obligatoire sinon t'as aucun intérêt à migrer.Par contre, là où je pense que c'est moins bon, c'est dans la
restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un
état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que
l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti
énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des
données d'une base
distante, le moteur Jet te renvoie la totalité des données et ensuite il
exécute en local tes
sélections. A l'inverse avec un serveur de type SGDBR en ADO, le serveur
te renvoie juste ce dont
tu as besoin en gros ne passe sur le réseau que le résultat de ton SELECT.
Je te fais pas dire
l'écart des performances.
J'ai donc par un moment pensé à rappatrier d'abord localement les
données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à
gérer ... Cependant si c'est
la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes
données en local, comment tu
vas suivre les mises à jour faites par les autres utilisateurs ?
De même, dans mes formulaires, pour les zones de liste, je les alimente
en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la
table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.En somme :
Si je reste avec mon architecture (Access en client serveur + DAO),
quelle est la bonne méthode à
utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras
jamais des temps de réponse
acceptables avec Access serveur.
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté
"serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server,
Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout
le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables
dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de
l'ordinateur) sur chaque
machine qui pointeras vers ton serveur et ta base.
La gestion d'une connexion basée sur un DSN c'est plus simple.
L'idéal c'est une connexion dite DSN-Less avec une chaine de connexion
propre au serveur que tu
choisiras. Il en existe des tas.- Un DSN est il nécessairement une connexion ODBC ?
Oui.D'avance un grand merci ...
Laurent
--
Ouala
Bye
Buddy
PS : retirer 123 pour m'envoyer un email.
Bonjour à tous,
Salut
J'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew,
et je les met à jour avec
la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la
place de .AddNew ou .Edit,
le SQL est bien plus performant d'une part et d'autre part si tu passes
sur serveur de type SGBDR
là le SQL est obligatoire sinon t'as aucun intérêt à migrer.
Par contre, là où je pense que c'est moins bon, c'est dans la
restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un
état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que
l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti
énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des
données d'une base
distante, le moteur Jet te renvoie la totalité des données et ensuite il
exécute en local tes
sélections. A l'inverse avec un serveur de type SGDBR en ADO, le serveur
te renvoie juste ce dont
tu as besoin en gros ne passe sur le réseau que le résultat de ton SELECT.
Je te fais pas dire
l'écart des performances.
J'ai donc par un moment pensé à rappatrier d'abord localement les
données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à
gérer ... Cependant si c'est
la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes
données en local, comment tu
vas suivre les mises à jour faites par les autres utilisateurs ?
De même, dans mes formulaires, pour les zones de liste, je les alimente
en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la
table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.
En somme :
Si je reste avec mon architecture (Access en client serveur + DAO),
quelle est la bonne méthode à
utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras
jamais des temps de réponse
acceptables avec Access serveur.
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')
Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté
"serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose
- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server,
Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout
le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables
dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de
l'ordinateur) sur chaque
machine qui pointeras vers ton serveur et ta base.
La gestion d'une connexion basée sur un DSN c'est plus simple.
L'idéal c'est une connexion dite DSN-Less avec une chaine de connexion
propre au serveur que tu
choisiras. Il en existe des tas.
- Un DSN est il nécessairement une connexion ODBC ?
Oui.
D'avance un grand merci ...
Laurent
--
Ouala
Bye
Buddy
PS : retirer 123 pour m'envoyer un email.
Bonjour à tous,
SalutJ'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew,
et je les met à jour avec
la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la
place de .AddNew ou .Edit,
le SQL est bien plus performant d'une part et d'autre part si tu passes
sur serveur de type SGBDR
là le SQL est obligatoire sinon t'as aucun intérêt à migrer.Par contre, là où je pense que c'est moins bon, c'est dans la
restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un
état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que
l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti
énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des
données d'une base
distante, le moteur Jet te renvoie la totalité des données et ensuite il
exécute en local tes
sélections. A l'inverse avec un serveur de type SGDBR en ADO, le serveur
te renvoie juste ce dont
tu as besoin en gros ne passe sur le réseau que le résultat de ton SELECT.
Je te fais pas dire
l'écart des performances.
J'ai donc par un moment pensé à rappatrier d'abord localement les
données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à
gérer ... Cependant si c'est
la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes
données en local, comment tu
vas suivre les mises à jour faites par les autres utilisateurs ?
De même, dans mes formulaires, pour les zones de liste, je les alimente
en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la
table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.En somme :
Si je reste avec mon architecture (Access en client serveur + DAO),
quelle est la bonne méthode à
utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras
jamais des temps de réponse
acceptables avec Access serveur.
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté
"serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server,
Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout
le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables
dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de
l'ordinateur) sur chaque
machine qui pointeras vers ton serveur et ta base.
La gestion d'une connexion basée sur un DSN c'est plus simple.
L'idéal c'est une connexion dite DSN-Less avec une chaine de connexion
propre au serveur que tu
choisiras. Il en existe des tas.- Un DSN est il nécessairement une connexion ODBC ?
Oui.D'avance un grand merci ...
Laurent
--
Ouala
Bye
Buddy
PS : retirer 123 pour m'envoyer un email.
Salut Buddy,
Merci pour tes réponses, ça me satisfait !
Par contre, sur un point je ne trouve pas ça très clair, voir plus bas :
"Buddy" a écrit dans le message de
news:Bonjour à tous,
SalutJ'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew, et je les met à jour
avec la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la place de .AddNew ou
.Edit, le SQL est bien plus performant d'une part et d'autre part si tu passes sur serveur de
type SGBDR là le SQL est obligatoire sinon t'as aucun intérêt à migrer.Par contre, là où je pense que c'est moins bon, c'est dans la restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des données d'une base
distante, le moteur Jet te renvoie la totalité des données et ensuite il exécute en local tes
sélections. A l'inverse avec un serveur de type SGDBR en ADO, le serveur te renvoie juste ce
dont tu as besoin en gros ne passe sur le réseau que le résultat de ton SELECT. Je te fais pas
dire l'écart des performances.
Voila : tu dis que le problème vient du fait que Jet doit récupérer
l'intégralité de la table en local pour traiter la requête, sur ce point ok.
Mais ce n'était pas mon problème de base. Moi je disais que si quelqu'un
avait par exemple un état d'ouvert à l'écran (depuis 5 minutes par exemple),
les accès pour un autre utlissateur sur un autre poste, se trouvaient très
ralentis. En cela je ne vois pas en quoi le fait que l'intégralité de la
table soit rappatriée en local mette plus de temps si quelqu'un a déjà
accédé à la table (et par là j'entend que le transfert de l'intégralité de
la table a été terminé depuis plusieurs minutes) ou pas.
Peut être pour illustrer mieux ma question : tu sais quand quelqu'un ouvre
un état dont les données sont puisées sur une base 'serveur', il y a un
fichier .ldb qui se créé. Et bien quand l'état est fermé par le client, le
fichier .ldb est supprimé. Je sais à quoi correpond le fichier .ldb, mais
j'avais donc l'impression que de maintenir l'état ouvert 'bloquait' en qq
sorte des accès concurrents ou tout du moins les ralentissait fortement, en
tout cas c'est ce que j'ai constaté... et donc le fait que les données
soient rappatriées en local n'explique pas ces ralentissements.J'ai donc par un moment pensé à rappatrier d'abord localement les données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à gérer ... Cependant si
c'est la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes données en local, comment
tu vas suivre les mises à jour faites par les autres utilisateurs ?
De même, dans mes formulaires, pour les zones de liste, je les alimente en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.En somme :
Si je reste avec mon architecture (Access en client serveur + DAO), quelle est la bonne méthode
à utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras jamais des temps de
réponse acceptables avec Access serveur.
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté "serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server, Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout le reste.- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de l'ordinateur) sur chaque
machine qui pointeras vers ton serveur et ta base.
La gestion d'une connexion basée sur un DSN c'est plus simple.
L'idéal c'est une connexion dite DSN-Less avec une chaine de connexion propre au serveur que tu
choisiras. Il en existe des tas.- Un DSN est il nécessairement une connexion ODBC ?
Oui.D'avance un grand merci ...
Laurent
--
Ouala
Bye
Buddy
PS : retirer 123 pour m'envoyer un email.
Salut Buddy,
Merci pour tes réponses, ça me satisfait !
Par contre, sur un point je ne trouve pas ça très clair, voir plus bas :
"Buddy" <brouhaha123@libertysurf.fr> a écrit dans le message de
news:mn.75407d6188fbc4a2.47826@libertysurf.fr...
Bonjour à tous,
Salut
J'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew, et je les met à jour
avec la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la place de .AddNew ou
.Edit, le SQL est bien plus performant d'une part et d'autre part si tu passes sur serveur de
type SGBDR là le SQL est obligatoire sinon t'as aucun intérêt à migrer.
Par contre, là où je pense que c'est moins bon, c'est dans la restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des données d'une base
distante, le moteur Jet te renvoie la totalité des données et ensuite il exécute en local tes
sélections. A l'inverse avec un serveur de type SGDBR en ADO, le serveur te renvoie juste ce
dont tu as besoin en gros ne passe sur le réseau que le résultat de ton SELECT. Je te fais pas
dire l'écart des performances.
Voila : tu dis que le problème vient du fait que Jet doit récupérer
l'intégralité de la table en local pour traiter la requête, sur ce point ok.
Mais ce n'était pas mon problème de base. Moi je disais que si quelqu'un
avait par exemple un état d'ouvert à l'écran (depuis 5 minutes par exemple),
les accès pour un autre utlissateur sur un autre poste, se trouvaient très
ralentis. En cela je ne vois pas en quoi le fait que l'intégralité de la
table soit rappatriée en local mette plus de temps si quelqu'un a déjà
accédé à la table (et par là j'entend que le transfert de l'intégralité de
la table a été terminé depuis plusieurs minutes) ou pas.
Peut être pour illustrer mieux ma question : tu sais quand quelqu'un ouvre
un état dont les données sont puisées sur une base 'serveur', il y a un
fichier .ldb qui se créé. Et bien quand l'état est fermé par le client, le
fichier .ldb est supprimé. Je sais à quoi correpond le fichier .ldb, mais
j'avais donc l'impression que de maintenir l'état ouvert 'bloquait' en qq
sorte des accès concurrents ou tout du moins les ralentissait fortement, en
tout cas c'est ce que j'ai constaté... et donc le fait que les données
soient rappatriées en local n'explique pas ces ralentissements.
J'ai donc par un moment pensé à rappatrier d'abord localement les données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à gérer ... Cependant si
c'est la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes données en local, comment
tu vas suivre les mises à jour faites par les autres utilisateurs ?
De même, dans mes formulaires, pour les zones de liste, je les alimente en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.
En somme :
Si je reste avec mon architecture (Access en client serveur + DAO), quelle est la bonne méthode
à utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras jamais des temps de
réponse acceptables avec Access serveur.
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')
Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté "serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose
- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server, Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout le reste.
- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de l'ordinateur) sur chaque
machine qui pointeras vers ton serveur et ta base.
La gestion d'une connexion basée sur un DSN c'est plus simple.
L'idéal c'est une connexion dite DSN-Less avec une chaine de connexion propre au serveur que tu
choisiras. Il en existe des tas.
- Un DSN est il nécessairement une connexion ODBC ?
Oui.
D'avance un grand merci ...
Laurent
--
Ouala
Bye
Buddy
PS : retirer 123 pour m'envoyer un email.
Salut Buddy,
Merci pour tes réponses, ça me satisfait !
Par contre, sur un point je ne trouve pas ça très clair, voir plus bas :
"Buddy" a écrit dans le message de
news:Bonjour à tous,
SalutJ'utilise DAO pour ajouter des enregistrements, avec la méthode AddNew, et je les met à jour
avec la méthode Edit. Sur ces points, je pense que c'est propre.
J'utiliserai plutôt une requête SQL du genre INSERT INTO ou UPDATE à la place de .AddNew ou
.Edit, le SQL est bien plus performant d'une part et d'autre part si tu passes sur serveur de
type SGBDR là le SQL est obligatoire sinon t'as aucun intérêt à migrer.Par contre, là où je pense que c'est moins bon, c'est dans la restitution de données. En effet,
par exemple, j'utilise Me.RecordSource = "SELECT .... " pour remplir un état. Et j'ai
l'impression que cela est très pénalisant, dans la mesure où tant que l'état est ouvert, le
recordset est maintenu sur la table. Ce qui fait que ça ralenti énormément si quelqu'un veut
aussi requêter sur cette table. Est ce que je me trompe ?
Non, le problème avec Access, c'est que à chaque fois que tu extraits des données d'une base
distante, le moteur Jet te renvoie la totalité des données et ensuite il exécute en local tes
sélections. A l'inverse avec un serveur de type SGDBR en ADO, le serveur te renvoie juste ce
dont tu as besoin en gros ne passe sur le réseau que le résultat de ton SELECT. Je te fais pas
dire l'écart des performances.
Voila : tu dis que le problème vient du fait que Jet doit récupérer
l'intégralité de la table en local pour traiter la requête, sur ce point ok.
Mais ce n'était pas mon problème de base. Moi je disais que si quelqu'un
avait par exemple un état d'ouvert à l'écran (depuis 5 minutes par exemple),
les accès pour un autre utlissateur sur un autre poste, se trouvaient très
ralentis. En cela je ne vois pas en quoi le fait que l'intégralité de la
table soit rappatriée en local mette plus de temps si quelqu'un a déjà
accédé à la table (et par là j'entend que le transfert de l'intégralité de
la table a été terminé depuis plusieurs minutes) ou pas.
Peut être pour illustrer mieux ma question : tu sais quand quelqu'un ouvre
un état dont les données sont puisées sur une base 'serveur', il y a un
fichier .ldb qui se créé. Et bien quand l'état est fermé par le client, le
fichier .ldb est supprimé. Je sais à quoi correpond le fichier .ldb, mais
j'avais donc l'impression que de maintenir l'état ouvert 'bloquait' en qq
sorte des accès concurrents ou tout du moins les ralentissait fortement, en
tout cas c'est ce que j'ai constaté... et donc le fait que les données
soient rappatriées en local n'explique pas ces ralentissements.J'ai donc par un moment pensé à rappatrier d'abord localement les données sur la base locale,
puis requêter sur ces tables locales. Mais ça me paraît plus lourd à gérer ... Cependant si
c'est la solution ...
Trop fastidieux et bonjour l'usine à gaz ! Et puis si tu rapatrie tes données en local, comment
tu vas suivre les mises à jour faites par les autres utilisateurs ?
De même, dans mes formulaires, pour les zones de liste, je les alimente en données avec une
chaîne SQL. Et là aussi, même effet, ça "maintient" un recordset sur la table tant que le
formulaire est ouvert ...
Si tu passe sur SGBDR, tes temps de réponse seront incomparables.En somme :
Si je reste avec mon architecture (Access en client serveur + DAO), quelle est la bonne méthode
à utliser afin de na pas bloquer des recordsets sur les tables ?
Mais tu ne vas pas rester avec ton architecture, rêves pas. Tu n'auras jamais des temps de
réponse acceptables avec Access serveur.
Ais je intérêt à passer en ADO, avec un serveur MSDE par exemple ?
A ton avis ??? :')Et pouvez vous me confirmer que :
- DAO permet l'accès aux données seulement si on est en Access côté "serveur"
DAO est en fin de règne, à ce rythme il ne va plus permettre grand chose- ADO n'a d'intérêt que si on utlise un SGBDR type SQL Server, Sybase,MySQL, Oracle ...
En général la règle est simple : DAO quand c'est access et ADO pour tout le reste.- En ADO, vaut il mieux passer par un DSN ODBC, et attacher les tables dans la base client, ou
bien écrire les chaînes de connexion "à la main" sans DSN ODBC
Il faudra créer un DSN système (accessible par tous les utilisateurs de l'ordinateur) sur chaque
machine qui pointeras vers ton serveur et ta base.
La gestion d'une connexion basée sur un DSN c'est plus simple.
L'idéal c'est une connexion dite DSN-Less avec une chaine de connexion propre au serveur que tu
choisiras. Il en existe des tas.- Un DSN est il nécessairement une connexion ODBC ?
Oui.D'avance un grand merci ...
Laurent
--
Ouala
Bye
Buddy
PS : retirer 123 pour m'envoyer un email.