Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée en
fichier partagé, les accès en lecture et en lecture-écriture se faisant
depuis les postes client avec des connections jet et/ou odbc (selon les cas
de queries). Le code VB6 sur chaque poste client a donc ses propres
workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en mode
bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et la
rendent illisible et irréparable. Par recoupements je soupçonne le module
ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire d'encadrer
par une transaction (ouvrir / fermer / rollback si besoin ) la circulation
des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée en
fichier partagé, les accès en lecture et en lecture-écriture se faisant
depuis les postes client avec des connections jet et/ou odbc (selon les cas
de queries). Le code VB6 sur chaque poste client a donc ses propres
workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en mode
bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et la
rendent illisible et irréparable. Par recoupements je soupçonne le module
ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire d'encadrer
par une transaction (ouvrir / fermer / rollback si besoin ) la circulation
des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée en
fichier partagé, les accès en lecture et en lecture-écriture se faisant
depuis les postes client avec des connections jet et/ou odbc (selon les cas
de queries). Le code VB6 sur chaque poste client a donc ses propres
workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en mode
bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et la
rendent illisible et irréparable. Par recoupements je soupçonne le module
ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire d'encadrer
par une transaction (ouvrir / fermer / rollback si besoin ) la circulation
des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Pulsar a écrit :Gilles Le Bret avait écrit le 29/08/2005 :Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée en
fichier partagé, les accès en lecture et en lecture-écriture se faisant
depuis les postes client avec des connections jet et/ou odbc (selon les
cas de queries). Le code VB6 sur chaque poste client a donc ses propres
workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en mode
bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et la
rendent illisible et irréparable. Par recoupements je soupçonne le module
ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire
d'encadrer par une transaction (ouvrir / fermer / rollback si besoin ) la
circulation des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires voir
passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux données
VB6 mais par du code pour alimenter un control grid et sauver le contenu
des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu te
retrouves avec des fonctions types qui seront utilisées partout dans ton
appli.
En plus, cette solution est plus efficace en thermes de performances et de
flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Pulsar a écrit :
Gilles Le Bret avait écrit le 29/08/2005 :
Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée en
fichier partagé, les accès en lecture et en lecture-écriture se faisant
depuis les postes client avec des connections jet et/ou odbc (selon les
cas de queries). Le code VB6 sur chaque poste client a donc ses propres
workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en mode
bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et la
rendent illisible et irréparable. Par recoupements je soupçonne le module
ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire
d'encadrer par une transaction (ouvrir / fermer / rollback si besoin ) la
circulation des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires voir
passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux données
VB6 mais par du code pour alimenter un control grid et sauver le contenu
des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu te
retrouves avec des fonctions types qui seront utilisées partout dans ton
appli.
En plus, cette solution est plus efficace en thermes de performances et de
flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Pulsar a écrit :Gilles Le Bret avait écrit le 29/08/2005 :Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée en
fichier partagé, les accès en lecture et en lecture-écriture se faisant
depuis les postes client avec des connections jet et/ou odbc (selon les
cas de queries). Le code VB6 sur chaque poste client a donc ses propres
workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en mode
bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et la
rendent illisible et irréparable. Par recoupements je soupçonne le module
ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire
d'encadrer par une transaction (ouvrir / fermer / rollback si besoin ) la
circulation des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires voir
passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux données
VB6 mais par du code pour alimenter un control grid et sauver le contenu
des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu te
retrouves avec des fonctions types qui seront utilisées partout dans ton
appli.
En plus, cette solution est plus efficace en thermes de performances et de
flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Gilles Le Bret avait écrit le 29/08/2005 :Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée
en fichier partagé, les accès en lecture et en lecture-écriture se
faisant depuis les postes client avec des connections jet et/ou odbc
(selon les cas de queries). Le code VB6 sur chaque poste client a donc
ses propres workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en
mode bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et
la rendent illisible et irréparable. Par recoupements je soupçonne le
module ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire
d'encadrer par une transaction (ouvrir / fermer / rollback si besoin )
la circulation des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux
données VB6 mais par du code pour alimenter un control grid et sauver le
contenu des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu
te retrouves avec des fonctions types qui seront utilisées partout dans
ton appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Gilles Le Bret avait écrit le 29/08/2005 :
Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée
en fichier partagé, les accès en lecture et en lecture-écriture se
faisant depuis les postes client avec des connections jet et/ou odbc
(selon les cas de queries). Le code VB6 sur chaque poste client a donc
ses propres workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en
mode bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et
la rendent illisible et irréparable. Par recoupements je soupçonne le
module ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire
d'encadrer par une transaction (ouvrir / fermer / rollback si besoin )
la circulation des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux
données VB6 mais par du code pour alimenter un control grid et sauver le
contenu des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu
te retrouves avec des fonctions types qui seront utilisées partout dans
ton appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Gilles Le Bret avait écrit le 29/08/2005 :Bonjour à tous et à toutes,
J'ai quelques soucis avec une base de données access (*.mdb) utilisée
en fichier partagé, les accès en lecture et en lecture-écriture se
faisant depuis les postes client avec des connections jet et/ou odbc
(selon les cas de queries). Le code VB6 sur chaque poste client a donc
ses propres workspaces.
Dans un des modules (long à réécrire) j'utilise le DBgrid (du VB6) en
mode bound connecté sur le ControlData (du VB6).
De temps en temps j'ai des incidents qui cassent la base de données et
la rendent illisible et irréparable. Par recoupements je soupçonne le
module ci-dessus.
Excusez la longueur.
Je cherche pour essayer d'empêcher ces incidents de se reproduire
d'encadrer par une transaction (ouvrir / fermer / rollback si besoin )
la circulation des données du grid vers le controldata puis vers la base.
Est-ce que cela peut se faire ?
merci d'avance des réponses
Gilles Le Bret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux
données VB6 mais par du code pour alimenter un control grid et sauver le
contenu des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu
te retrouves avec des fonctions types qui seront utilisées partout dans
ton appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux
données VB6 mais par du code pour alimenter un control grid et sauver le
contenu des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu
te retrouves avec des fonctions types qui seront utilisées partout dans
ton appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Oui, c'est bien ça...
Pour ma part, par contre j'ouvre et ferme la connexion au lancement et à
la fermeture de l'application. Les appelles de fonctions ouvrent et
ferment uniquement des recordset. Mais c'est à voir au cas par cas.
Gille, si tu le souhaites, je peux te poster qq exemples de fonction.
Pulsar.
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux
données VB6 mais par du code pour alimenter un control grid et sauver le
contenu des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu
te retrouves avec des fonctions types qui seront utilisées partout dans
ton appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Oui, c'est bien ça...
Pour ma part, par contre j'ouvre et ferme la connexion au lancement et à
la fermeture de l'application. Les appelles de fonctions ouvrent et
ferment uniquement des recordset. Mais c'est à voir au cas par cas.
Gille, si tu le souhaites, je peux te poster qq exemples de fonction.
Pulsar.
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux
données VB6 mais par du code pour alimenter un control grid et sauver le
contenu des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu
te retrouves avec des fonctions types qui seront utilisées partout dans
ton appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Oui, c'est bien ça...
Pour ma part, par contre j'ouvre et ferme la connexion au lancement et à
la fermeture de l'application. Les appelles de fonctions ouvrent et
ferment uniquement des recordset. Mais c'est à voir au cas par cas.
Gille, si tu le souhaites, je peux te poster qq exemples de fonction.
Pulsar.
bonjour et merci à vous deux,
c'est bien ce que pensais:
il n'y a pas de moyen d'encadrer le controldata dans un
begintrans/committrans
j'avais pensé écrire une fonction pour cela dans un module de classe , mais
je ne vois pas quel évènement de controldata utiliser...ou bien mieux le
remplacer par un composant controldata du commerce qui fasse ce genre de
travail.
en fait le module qui pose problème c'est le 1er module écrit il y a 4 ans de
cette appli et il va donc falloir le réécrire avec des transactions comme le
reste de l'appli = ... 3 semaines de boulot car il est assez complexe .
par contre à la <> de ce que vous dites, au lancement de l'appli j'ouvre les
connections et à la sortie je les ferme.
vous défendez plutôt le principe d'ouvrir avant chaque recordset et de fermer
après ? c'est cela ?
une question: que signifie AMHA ?
sinon je suis curieux de voir les fonctions de 'Pulsar' et je l'en remercie
par avance.
Gilles LebretSalut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux données
VB6 mais par du code pour alimenter un control grid et sauver le contenu
des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu te
retrouves avec des fonctions types qui seront utilisées partout dans ton
appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Oui, c'est bien ça...
Pour ma part, par contre j'ouvre et ferme la connexion au lancement et à la
fermeture de l'application. Les appelles de fonctions ouvrent et ferment
uniquement des recordset. Mais c'est à voir au cas par cas.
Gille, si tu le souhaites, je peux te poster qq exemples de fonction.
Pulsar.
bonjour et merci à vous deux,
c'est bien ce que pensais:
il n'y a pas de moyen d'encadrer le controldata dans un
begintrans/committrans
j'avais pensé écrire une fonction pour cela dans un module de classe , mais
je ne vois pas quel évènement de controldata utiliser...ou bien mieux le
remplacer par un composant controldata du commerce qui fasse ce genre de
travail.
en fait le module qui pose problème c'est le 1er module écrit il y a 4 ans de
cette appli et il va donc falloir le réécrire avec des transactions comme le
reste de l'appli = ... 3 semaines de boulot car il est assez complexe .
par contre à la <> de ce que vous dites, au lancement de l'appli j'ouvre les
connections et à la sortie je les ferme.
vous défendez plutôt le principe d'ouvrir avant chaque recordset et de fermer
après ? c'est cela ?
une question: que signifie AMHA ?
sinon je suis curieux de voir les fonctions de 'Pulsar' et je l'en remercie
par avance.
Gilles Lebret
Salut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux données
VB6 mais par du code pour alimenter un control grid et sauver le contenu
des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu te
retrouves avec des fonctions types qui seront utilisées partout dans ton
appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Oui, c'est bien ça...
Pour ma part, par contre j'ouvre et ferme la connexion au lancement et à la
fermeture de l'application. Les appelles de fonctions ouvrent et ferment
uniquement des recordset. Mais c'est à voir au cas par cas.
Gille, si tu le souhaites, je peux te poster qq exemples de fonction.
Pulsar.
bonjour et merci à vous deux,
c'est bien ce que pensais:
il n'y a pas de moyen d'encadrer le controldata dans un
begintrans/committrans
j'avais pensé écrire une fonction pour cela dans un module de classe , mais
je ne vois pas quel évènement de controldata utiliser...ou bien mieux le
remplacer par un composant controldata du commerce qui fasse ce genre de
travail.
en fait le module qui pose problème c'est le 1er module écrit il y a 4 ans de
cette appli et il va donc falloir le réécrire avec des transactions comme le
reste de l'appli = ... 3 semaines de boulot car il est assez complexe .
par contre à la <> de ce que vous dites, au lancement de l'appli j'ouvre les
connections et à la sortie je les ferme.
vous défendez plutôt le principe d'ouvrir avant chaque recordset et de fermer
après ? c'est cela ?
une question: que signifie AMHA ?
sinon je suis curieux de voir les fonctions de 'Pulsar' et je l'en remercie
par avance.
Gilles LebretSalut,
Le moteur de BD d'Access n'est pas transactionnel.
AMHA il faudra tout gérer depuis du code et/ou des tables temporaires
voir passer à MSDE.
Une solution serait de ne plus utiliser les contrôles d'accès aux données
VB6 mais par du code pour alimenter un control grid et sauver le contenu
des données modifié par une fonction appelée depuis un événement
particulier. Cela se traduit par une réécriture de ton module, mais tu te
retrouves avec des fonctions types qui seront utilisées partout dans ton
appli.
En plus, cette solution est plus efficace en thermes de performances et
de flexibilité (tu fais ce que tu veux à partir du code).
Pulsar.
Bonjour,
Pour aller dans ton sens :
Voir la réponse de Jean-Marc sur le sujet:
http://groups.google.com/group/microsoft.public.fr.vb/browse_thread/thread/4362cc55572efe9b/555c096ecaccebd5#555c096ecaccebd5
A+
Christophe
Oui, c'est bien ça...
Pour ma part, par contre j'ouvre et ferme la connexion au lancement et à la
fermeture de l'application. Les appelles de fonctions ouvrent et ferment
uniquement des recordset. Mais c'est à voir au cas par cas.
Gille, si tu le souhaites, je peux te poster qq exemples de fonction.
Pulsar.
bonjour et merci à vous deux,
c'est bien ce que pensais:
il n'y a pas de moyen d'encadrer le controldata dans un
begintrans/committrans
j'avais pensé écrire une fonction pour cela dans un module de classe , mais
je ne vois pas quel évènement de controldata utiliser...ou bien mieux le
remplacer par un composant controldata du commerce qui fasse ce genre de
travail.
en fait le module qui pose problème c'est le 1er module écrit il y a 4 ans
de cette appli et il va donc falloir le réécrire avec des transactions comme
le reste de l'appli = ... 3 semaines de boulot car il est assez complexe .
par contre à la <> de ce que vous dites, au lancement de l'appli j'ouvre les
connections et à la sortie je les ferme.
vous défendez plutôt le principe d'ouvrir avant chaque recordset et de
fermer après ? c'est cela ?
une question: que signifie AMHA ?
sinon je suis curieux de voir les fonctions de 'Pulsar' et je l'en remercie
par avance.
Gilles Lebret
bonjour et merci à vous deux,
c'est bien ce que pensais:
il n'y a pas de moyen d'encadrer le controldata dans un
begintrans/committrans
j'avais pensé écrire une fonction pour cela dans un module de classe , mais
je ne vois pas quel évènement de controldata utiliser...ou bien mieux le
remplacer par un composant controldata du commerce qui fasse ce genre de
travail.
en fait le module qui pose problème c'est le 1er module écrit il y a 4 ans
de cette appli et il va donc falloir le réécrire avec des transactions comme
le reste de l'appli = ... 3 semaines de boulot car il est assez complexe .
par contre à la <> de ce que vous dites, au lancement de l'appli j'ouvre les
connections et à la sortie je les ferme.
vous défendez plutôt le principe d'ouvrir avant chaque recordset et de
fermer après ? c'est cela ?
une question: que signifie AMHA ?
sinon je suis curieux de voir les fonctions de 'Pulsar' et je l'en remercie
par avance.
Gilles Lebret
bonjour et merci à vous deux,
c'est bien ce que pensais:
il n'y a pas de moyen d'encadrer le controldata dans un
begintrans/committrans
j'avais pensé écrire une fonction pour cela dans un module de classe , mais
je ne vois pas quel évènement de controldata utiliser...ou bien mieux le
remplacer par un composant controldata du commerce qui fasse ce genre de
travail.
en fait le module qui pose problème c'est le 1er module écrit il y a 4 ans
de cette appli et il va donc falloir le réécrire avec des transactions comme
le reste de l'appli = ... 3 semaines de boulot car il est assez complexe .
par contre à la <> de ce que vous dites, au lancement de l'appli j'ouvre les
connections et à la sortie je les ferme.
vous défendez plutôt le principe d'ouvrir avant chaque recordset et de
fermer après ? c'est cela ?
une question: que signifie AMHA ?
sinon je suis curieux de voir les fonctions de 'Pulsar' et je l'en remercie
par avance.
Gilles Lebret
Voila quelques exemples, mettre tout ça dans un module :
Je ne peux pas tout te donner... Mais ça pourra te donner base de départ.
Il reste à intégrer tes fonctions de vérification.
Attribute VB_Name = "M_Fonctions"
Option Explicit
Public db As DAO.Database
Public Sub FillComboBox(P_ComboBox As ComboBox, P_strTable As String,
PstrKeyField As String, P_strField As String, P_strFieldValue As String,
P_strValue As String)
' Remplissage d'une ComboBox avec des données de la bases Access
' P_ComboBox : Nom de la ComboBox à remplir
' P_strTable : Table dont sont extraies les données
' P_strKeyField : Champ utilisé comme clé pour chaque enregistrement
' P_strField : Champ utilisé pour remplir la ComboBox
' P_strFieldValue : Champ utilisé pour filtrer les données utilisées
' P_strValue : Valeur prise par le champ P_strFieldValue
On Error GoTo err_FillComboBox
Dim lngLine As Long
Dim MrtTable As DAO.Recordset
If P_strValue = "" Then
Set MrtTable = db.OpenRecordset("SELECT " & P_strField & "," &
P_strKeyField & " FROM " & P_strTable & " ORDER BY " & P_strField & ";")
Else
Set MrtTable = db.OpenRecordset("SELECT " & P_strField & "," &
P_strKeyField & " FROM " & P_strTable & " WHERE " & P_strFieldValue & "
='" & P_strValue & "' ORDER BY " & P_strField & ";")
End If
P_ComboBox.Clear
If MrtTable.RecordCount > 0 Then
MrtTable.MoveLast
MrtTable.MoveFirst
For lngLine = 1 To MrtTable.RecordCount
P_ComboBox.AddItem MrtTable(P_strField)
P_ComboBox.ItemData(P_ComboBox.NewIndex) =
MrtTable(P_strKeyField)
MrtTable.MoveNext
Next lngLine
End If
exit_FillComboBox:
On Error Resume Next
MrtTable.Close
Set MrtTable = Nothing
Exit Sub
err_FillComboBox:
MsgBox Error
Resume
GoTo exit_FillComboBox
End Sub
--------------------------------
Public Function IniDataBase() As Integer
' Initialisation de la base
On Error GoTo err_IniDataBase
Dim strPassword As String
IniDataBase = 0
G_Login = False
strPassword = getstring(HKEY_LOCAL_MACHINE, "softwaregestion des
suspens1.0", "BDDPassword")
strPassword = Convert(strPassword)
On Error Resume Next
Set db = DAO.OpenDatabase(App.Path & "" & "data.mdb", False, False,
";pwd=" & strPassword)
If Err.Number = 3031 Then
MsgBox "Vous n'avez pas les droits pour ouvrir la base de
données.", 16, "Erreur !"
IniDataBase = -1
Exit Function
End If
If Err.Number = 3356 Then
MsgBox Error, 16, "Erreur !"
IniDataBase = -1
Exit Function
End If
If Err.Number <> 0 Then MsgBox Error
On Error GoTo err_IniDataBase
G_NbElements = 1
ReDim G_tabCle(G_NbElements)
ReDim G_tabChecked(G_NbElements)
frmLogin.Show vbModal
If G_Login = False Then
IniDataBase = -1
End If
exit_IniDataBase:
On Error Resume Next
Exit Function
err_IniDataBase:
IniDataBase = -1
MsgBox Error
GoTo exit_IniDataBase
End Function
----------------------------
Public Function DeleteRecord(P_Table As String, P_strField, P_lngKey As
Long, P_strMessage As String) As Boolean
' Efface un ou plusieurs enregistrements d'une table
' P_Table : Table dans laquelle un ou plusieurs entregistrements doivent
être effacés
' P_strField : Nom du champ clé utilisé
' P_lngKey : Valeur prise par la clé
On Error GoTo Err_DeleteRecord
' Supprime un enregistrement dans une table
If P_strMessage = "" Then
Dim QryDeleteRecord As QueryDef
Set QryDeleteRecord = db.CreateQueryDef("", "DELETE * FROM " &
P_Table & " WHERE " & P_strField & "=" & P_lngKey & ";")
QryDeleteRecord.Execute dbFailOnError
DeleteRecord = True
Else
If MsgBox(P_strMessage, vbYesNo) = vbYes Then
Dim QryDeleteRecord2 As QueryDef
Set QryDeleteRecord2 = db.CreateQueryDef("", "DELETE * FROM " &
P_Table & " WHERE " & P_strField & "=" & P_lngKey & ";")
QryDeleteRecord2.Execute dbFailOnError
DeleteRecord = True
End If
End If
Exit_DeleteRecord:
On Error Resume Next
QryDeleteRecord.Close
Set QryDeleteRecord = Nothing
Exit Function
Err_DeleteRecord:
MsgBox Error
GoTo Exit_DeleteRecord
End Function
----------------------------
Donc ici, tu as une fonction pour remplir une liste déroulante.
Une autre pour créer la connexion, il en faut une similaire pour la
fermer.
Une fonction pour supprimer des enregistrements d'une table.
Elle sont toutes 'public' afin d'y accéder depuis tout le projet...
La 1er et la seconde, sont bien des fonctions 'type' qui permettent d'être
utilisées dans n'importé quel projet une fois qu'elles sont correctement
programmées.
Il faut que tu t'inspires de ces exemple pour coder les fonctions qui
mettent à jour la base (sur la même principe, ouverture d'un recordset,
sauvegarde des données dans les controls vers les champs de
l'enregistrement...)
Les problèmes de conflit d'accès sont très limités. Mais par contre, si
deux utilisateurs font des modifications sur le même enregistrement, ils
ne sauront pas qu'ils sont deux dessus, et c'est seulement le dernier
changement qui est pris en compte dans la base.
Si tu cherches une solution à ce dernier problème, il faut développer une
vraie application client serveur...
Si cela n'est pas claire, fais moi signe
Pulsar.
Voila un dernier exemple pour remplir un treeview.
Public Function FillTreeView(P_TreeView As TreeView, P_strTable As String,
P_strKeyField As String, P_strField As String, P_strParentField As String,
P_strSortField, P_strRoot As String)
' Remplissage d'un treview
' P_TreeView : Nom du treeView à remplir
' P_strTable : Nom de la table utilisée pour remplir le treeview
' P_strKeyField : Champ clé utilisé pour identifier chaque Item
' P_strField : Champ utilisé comme text à afficher dans le treeview
' P_strParentField : Champ utilisé pour contenir la clé identifiant le
père
' P_strSortField : Champ utilisé pour trier les données
' P_strRoot : Nom de la racine du treeView
On Error GoTo Err_FillTreeView
Dim lngLine As Long
Dim TreeviewNode As Node
If P_strSortField = "" Then P_strSortField = P_strKeyField
If P_strRoot <> "" Then
P_TreeView.Nodes.Clear
Set TreeviewNode = P_TreeView.Nodes.Add(, , "R", P_strRoot, 1)
End If
Dim MrtTable As DAO.Recordset
If P_strParentField = "" Then Set MrtTable = db.OpenRecordset("SELECT "
& P_strKeyField & "," & P_strField & " FROM " & P_strTable & " ORDER BY "
& P_strSortField & ";")
If P_strParentField <> "" Then Set MrtTable = db.OpenRecordset("SELECT
" & P_strKeyField & "," & P_strField & "," & P_strParentField & " FROM " &
P_strTable & " ORDER BY " & P_strSortField & ";")
If MrtTable.RecordCount <> 0 Then
MrtTable.MoveLast
MrtTable.MoveFirst
For lngLine = 1 To MrtTable.RecordCount
If P_strParentField = "" Then Set TreeviewNode =
P_TreeView.Nodes.Add("R", tvwChild, "P" & MrtTable.Fields(P_strKeyField),
MrtTable.Fields(P_strField), 3, 4)
If P_strParentField <> "" Then Set TreeviewNode =
P_TreeView.Nodes.Add("P" & MrtTable.Fields(P_strParentField), tvwChild,
"P" & MrtTable.Fields(P_strParentField) & "_F" &
MrtTable.Fields(P_strKeyField), MrtTable.Fields(P_strField), 2)
MrtTable.MoveNext
Next lngLine
End If
Exit_FillTreeView:
On Error Resume Next
MrtTable.Close
Set MrtTable = Nothing
Exit Function
Err_FillTreeView:
MsgBox Error
GoTo Exit_FillTreeView
End Function
--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Voila quelques exemples, mettre tout ça dans un module :
Je ne peux pas tout te donner... Mais ça pourra te donner base de départ.
Il reste à intégrer tes fonctions de vérification.
Attribute VB_Name = "M_Fonctions"
Option Explicit
Public db As DAO.Database
Public Sub FillComboBox(P_ComboBox As ComboBox, P_strTable As String,
PstrKeyField As String, P_strField As String, P_strFieldValue As String,
P_strValue As String)
' Remplissage d'une ComboBox avec des données de la bases Access
' P_ComboBox : Nom de la ComboBox à remplir
' P_strTable : Table dont sont extraies les données
' P_strKeyField : Champ utilisé comme clé pour chaque enregistrement
' P_strField : Champ utilisé pour remplir la ComboBox
' P_strFieldValue : Champ utilisé pour filtrer les données utilisées
' P_strValue : Valeur prise par le champ P_strFieldValue
On Error GoTo err_FillComboBox
Dim lngLine As Long
Dim MrtTable As DAO.Recordset
If P_strValue = "" Then
Set MrtTable = db.OpenRecordset("SELECT " & P_strField & "," &
P_strKeyField & " FROM " & P_strTable & " ORDER BY " & P_strField & ";")
Else
Set MrtTable = db.OpenRecordset("SELECT " & P_strField & "," &
P_strKeyField & " FROM " & P_strTable & " WHERE " & P_strFieldValue & "
='" & P_strValue & "' ORDER BY " & P_strField & ";")
End If
P_ComboBox.Clear
If MrtTable.RecordCount > 0 Then
MrtTable.MoveLast
MrtTable.MoveFirst
For lngLine = 1 To MrtTable.RecordCount
P_ComboBox.AddItem MrtTable(P_strField)
P_ComboBox.ItemData(P_ComboBox.NewIndex) =
MrtTable(P_strKeyField)
MrtTable.MoveNext
Next lngLine
End If
exit_FillComboBox:
On Error Resume Next
MrtTable.Close
Set MrtTable = Nothing
Exit Sub
err_FillComboBox:
MsgBox Error
Resume
GoTo exit_FillComboBox
End Sub
--------------------------------
Public Function IniDataBase() As Integer
' Initialisation de la base
On Error GoTo err_IniDataBase
Dim strPassword As String
IniDataBase = 0
G_Login = False
strPassword = getstring(HKEY_LOCAL_MACHINE, "softwaregestion des
suspens1.0", "BDDPassword")
strPassword = Convert(strPassword)
On Error Resume Next
Set db = DAO.OpenDatabase(App.Path & "" & "data.mdb", False, False,
";pwd=" & strPassword)
If Err.Number = 3031 Then
MsgBox "Vous n'avez pas les droits pour ouvrir la base de
données.", 16, "Erreur !"
IniDataBase = -1
Exit Function
End If
If Err.Number = 3356 Then
MsgBox Error, 16, "Erreur !"
IniDataBase = -1
Exit Function
End If
If Err.Number <> 0 Then MsgBox Error
On Error GoTo err_IniDataBase
G_NbElements = 1
ReDim G_tabCle(G_NbElements)
ReDim G_tabChecked(G_NbElements)
frmLogin.Show vbModal
If G_Login = False Then
IniDataBase = -1
End If
exit_IniDataBase:
On Error Resume Next
Exit Function
err_IniDataBase:
IniDataBase = -1
MsgBox Error
GoTo exit_IniDataBase
End Function
----------------------------
Public Function DeleteRecord(P_Table As String, P_strField, P_lngKey As
Long, P_strMessage As String) As Boolean
' Efface un ou plusieurs enregistrements d'une table
' P_Table : Table dans laquelle un ou plusieurs entregistrements doivent
être effacés
' P_strField : Nom du champ clé utilisé
' P_lngKey : Valeur prise par la clé
On Error GoTo Err_DeleteRecord
' Supprime un enregistrement dans une table
If P_strMessage = "" Then
Dim QryDeleteRecord As QueryDef
Set QryDeleteRecord = db.CreateQueryDef("", "DELETE * FROM " &
P_Table & " WHERE " & P_strField & "=" & P_lngKey & ";")
QryDeleteRecord.Execute dbFailOnError
DeleteRecord = True
Else
If MsgBox(P_strMessage, vbYesNo) = vbYes Then
Dim QryDeleteRecord2 As QueryDef
Set QryDeleteRecord2 = db.CreateQueryDef("", "DELETE * FROM " &
P_Table & " WHERE " & P_strField & "=" & P_lngKey & ";")
QryDeleteRecord2.Execute dbFailOnError
DeleteRecord = True
End If
End If
Exit_DeleteRecord:
On Error Resume Next
QryDeleteRecord.Close
Set QryDeleteRecord = Nothing
Exit Function
Err_DeleteRecord:
MsgBox Error
GoTo Exit_DeleteRecord
End Function
----------------------------
Donc ici, tu as une fonction pour remplir une liste déroulante.
Une autre pour créer la connexion, il en faut une similaire pour la
fermer.
Une fonction pour supprimer des enregistrements d'une table.
Elle sont toutes 'public' afin d'y accéder depuis tout le projet...
La 1er et la seconde, sont bien des fonctions 'type' qui permettent d'être
utilisées dans n'importé quel projet une fois qu'elles sont correctement
programmées.
Il faut que tu t'inspires de ces exemple pour coder les fonctions qui
mettent à jour la base (sur la même principe, ouverture d'un recordset,
sauvegarde des données dans les controls vers les champs de
l'enregistrement...)
Les problèmes de conflit d'accès sont très limités. Mais par contre, si
deux utilisateurs font des modifications sur le même enregistrement, ils
ne sauront pas qu'ils sont deux dessus, et c'est seulement le dernier
changement qui est pris en compte dans la base.
Si tu cherches une solution à ce dernier problème, il faut développer une
vraie application client serveur...
Si cela n'est pas claire, fais moi signe
Pulsar.
Voila un dernier exemple pour remplir un treeview.
Public Function FillTreeView(P_TreeView As TreeView, P_strTable As String,
P_strKeyField As String, P_strField As String, P_strParentField As String,
P_strSortField, P_strRoot As String)
' Remplissage d'un treview
' P_TreeView : Nom du treeView à remplir
' P_strTable : Nom de la table utilisée pour remplir le treeview
' P_strKeyField : Champ clé utilisé pour identifier chaque Item
' P_strField : Champ utilisé comme text à afficher dans le treeview
' P_strParentField : Champ utilisé pour contenir la clé identifiant le
père
' P_strSortField : Champ utilisé pour trier les données
' P_strRoot : Nom de la racine du treeView
On Error GoTo Err_FillTreeView
Dim lngLine As Long
Dim TreeviewNode As Node
If P_strSortField = "" Then P_strSortField = P_strKeyField
If P_strRoot <> "" Then
P_TreeView.Nodes.Clear
Set TreeviewNode = P_TreeView.Nodes.Add(, , "R", P_strRoot, 1)
End If
Dim MrtTable As DAO.Recordset
If P_strParentField = "" Then Set MrtTable = db.OpenRecordset("SELECT "
& P_strKeyField & "," & P_strField & " FROM " & P_strTable & " ORDER BY "
& P_strSortField & ";")
If P_strParentField <> "" Then Set MrtTable = db.OpenRecordset("SELECT
" & P_strKeyField & "," & P_strField & "," & P_strParentField & " FROM " &
P_strTable & " ORDER BY " & P_strSortField & ";")
If MrtTable.RecordCount <> 0 Then
MrtTable.MoveLast
MrtTable.MoveFirst
For lngLine = 1 To MrtTable.RecordCount
If P_strParentField = "" Then Set TreeviewNode =
P_TreeView.Nodes.Add("R", tvwChild, "P" & MrtTable.Fields(P_strKeyField),
MrtTable.Fields(P_strField), 3, 4)
If P_strParentField <> "" Then Set TreeviewNode =
P_TreeView.Nodes.Add("P" & MrtTable.Fields(P_strParentField), tvwChild,
"P" & MrtTable.Fields(P_strParentField) & "_F" &
MrtTable.Fields(P_strKeyField), MrtTable.Fields(P_strField), 2)
MrtTable.MoveNext
Next lngLine
End If
Exit_FillTreeView:
On Error Resume Next
MrtTable.Close
Set MrtTable = Nothing
Exit Function
Err_FillTreeView:
MsgBox Error
GoTo Exit_FillTreeView
End Function
--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Voila quelques exemples, mettre tout ça dans un module :
Je ne peux pas tout te donner... Mais ça pourra te donner base de départ.
Il reste à intégrer tes fonctions de vérification.
Attribute VB_Name = "M_Fonctions"
Option Explicit
Public db As DAO.Database
Public Sub FillComboBox(P_ComboBox As ComboBox, P_strTable As String,
PstrKeyField As String, P_strField As String, P_strFieldValue As String,
P_strValue As String)
' Remplissage d'une ComboBox avec des données de la bases Access
' P_ComboBox : Nom de la ComboBox à remplir
' P_strTable : Table dont sont extraies les données
' P_strKeyField : Champ utilisé comme clé pour chaque enregistrement
' P_strField : Champ utilisé pour remplir la ComboBox
' P_strFieldValue : Champ utilisé pour filtrer les données utilisées
' P_strValue : Valeur prise par le champ P_strFieldValue
On Error GoTo err_FillComboBox
Dim lngLine As Long
Dim MrtTable As DAO.Recordset
If P_strValue = "" Then
Set MrtTable = db.OpenRecordset("SELECT " & P_strField & "," &
P_strKeyField & " FROM " & P_strTable & " ORDER BY " & P_strField & ";")
Else
Set MrtTable = db.OpenRecordset("SELECT " & P_strField & "," &
P_strKeyField & " FROM " & P_strTable & " WHERE " & P_strFieldValue & "
='" & P_strValue & "' ORDER BY " & P_strField & ";")
End If
P_ComboBox.Clear
If MrtTable.RecordCount > 0 Then
MrtTable.MoveLast
MrtTable.MoveFirst
For lngLine = 1 To MrtTable.RecordCount
P_ComboBox.AddItem MrtTable(P_strField)
P_ComboBox.ItemData(P_ComboBox.NewIndex) =
MrtTable(P_strKeyField)
MrtTable.MoveNext
Next lngLine
End If
exit_FillComboBox:
On Error Resume Next
MrtTable.Close
Set MrtTable = Nothing
Exit Sub
err_FillComboBox:
MsgBox Error
Resume
GoTo exit_FillComboBox
End Sub
--------------------------------
Public Function IniDataBase() As Integer
' Initialisation de la base
On Error GoTo err_IniDataBase
Dim strPassword As String
IniDataBase = 0
G_Login = False
strPassword = getstring(HKEY_LOCAL_MACHINE, "softwaregestion des
suspens1.0", "BDDPassword")
strPassword = Convert(strPassword)
On Error Resume Next
Set db = DAO.OpenDatabase(App.Path & "" & "data.mdb", False, False,
";pwd=" & strPassword)
If Err.Number = 3031 Then
MsgBox "Vous n'avez pas les droits pour ouvrir la base de
données.", 16, "Erreur !"
IniDataBase = -1
Exit Function
End If
If Err.Number = 3356 Then
MsgBox Error, 16, "Erreur !"
IniDataBase = -1
Exit Function
End If
If Err.Number <> 0 Then MsgBox Error
On Error GoTo err_IniDataBase
G_NbElements = 1
ReDim G_tabCle(G_NbElements)
ReDim G_tabChecked(G_NbElements)
frmLogin.Show vbModal
If G_Login = False Then
IniDataBase = -1
End If
exit_IniDataBase:
On Error Resume Next
Exit Function
err_IniDataBase:
IniDataBase = -1
MsgBox Error
GoTo exit_IniDataBase
End Function
----------------------------
Public Function DeleteRecord(P_Table As String, P_strField, P_lngKey As
Long, P_strMessage As String) As Boolean
' Efface un ou plusieurs enregistrements d'une table
' P_Table : Table dans laquelle un ou plusieurs entregistrements doivent
être effacés
' P_strField : Nom du champ clé utilisé
' P_lngKey : Valeur prise par la clé
On Error GoTo Err_DeleteRecord
' Supprime un enregistrement dans une table
If P_strMessage = "" Then
Dim QryDeleteRecord As QueryDef
Set QryDeleteRecord = db.CreateQueryDef("", "DELETE * FROM " &
P_Table & " WHERE " & P_strField & "=" & P_lngKey & ";")
QryDeleteRecord.Execute dbFailOnError
DeleteRecord = True
Else
If MsgBox(P_strMessage, vbYesNo) = vbYes Then
Dim QryDeleteRecord2 As QueryDef
Set QryDeleteRecord2 = db.CreateQueryDef("", "DELETE * FROM " &
P_Table & " WHERE " & P_strField & "=" & P_lngKey & ";")
QryDeleteRecord2.Execute dbFailOnError
DeleteRecord = True
End If
End If
Exit_DeleteRecord:
On Error Resume Next
QryDeleteRecord.Close
Set QryDeleteRecord = Nothing
Exit Function
Err_DeleteRecord:
MsgBox Error
GoTo Exit_DeleteRecord
End Function
----------------------------
Donc ici, tu as une fonction pour remplir une liste déroulante.
Une autre pour créer la connexion, il en faut une similaire pour la
fermer.
Une fonction pour supprimer des enregistrements d'une table.
Elle sont toutes 'public' afin d'y accéder depuis tout le projet...
La 1er et la seconde, sont bien des fonctions 'type' qui permettent d'être
utilisées dans n'importé quel projet une fois qu'elles sont correctement
programmées.
Il faut que tu t'inspires de ces exemple pour coder les fonctions qui
mettent à jour la base (sur la même principe, ouverture d'un recordset,
sauvegarde des données dans les controls vers les champs de
l'enregistrement...)
Les problèmes de conflit d'accès sont très limités. Mais par contre, si
deux utilisateurs font des modifications sur le même enregistrement, ils
ne sauront pas qu'ils sont deux dessus, et c'est seulement le dernier
changement qui est pris en compte dans la base.
Si tu cherches une solution à ce dernier problème, il faut développer une
vraie application client serveur...
Si cela n'est pas claire, fais moi signe
Pulsar.
Voila un dernier exemple pour remplir un treeview.
Public Function FillTreeView(P_TreeView As TreeView, P_strTable As String,
P_strKeyField As String, P_strField As String, P_strParentField As String,
P_strSortField, P_strRoot As String)
' Remplissage d'un treview
' P_TreeView : Nom du treeView à remplir
' P_strTable : Nom de la table utilisée pour remplir le treeview
' P_strKeyField : Champ clé utilisé pour identifier chaque Item
' P_strField : Champ utilisé comme text à afficher dans le treeview
' P_strParentField : Champ utilisé pour contenir la clé identifiant le
père
' P_strSortField : Champ utilisé pour trier les données
' P_strRoot : Nom de la racine du treeView
On Error GoTo Err_FillTreeView
Dim lngLine As Long
Dim TreeviewNode As Node
If P_strSortField = "" Then P_strSortField = P_strKeyField
If P_strRoot <> "" Then
P_TreeView.Nodes.Clear
Set TreeviewNode = P_TreeView.Nodes.Add(, , "R", P_strRoot, 1)
End If
Dim MrtTable As DAO.Recordset
If P_strParentField = "" Then Set MrtTable = db.OpenRecordset("SELECT "
& P_strKeyField & "," & P_strField & " FROM " & P_strTable & " ORDER BY "
& P_strSortField & ";")
If P_strParentField <> "" Then Set MrtTable = db.OpenRecordset("SELECT
" & P_strKeyField & "," & P_strField & "," & P_strParentField & " FROM " &
P_strTable & " ORDER BY " & P_strSortField & ";")
If MrtTable.RecordCount <> 0 Then
MrtTable.MoveLast
MrtTable.MoveFirst
For lngLine = 1 To MrtTable.RecordCount
If P_strParentField = "" Then Set TreeviewNode =
P_TreeView.Nodes.Add("R", tvwChild, "P" & MrtTable.Fields(P_strKeyField),
MrtTable.Fields(P_strField), 3, 4)
If P_strParentField <> "" Then Set TreeviewNode =
P_TreeView.Nodes.Add("P" & MrtTable.Fields(P_strParentField), tvwChild,
"P" & MrtTable.Fields(P_strParentField) & "_F" &
MrtTable.Fields(P_strKeyField), MrtTable.Fields(P_strField), 2)
MrtTable.MoveNext
Next lngLine
End If
Exit_FillTreeView:
On Error Resume Next
MrtTable.Close
Set MrtTable = Nothing
Exit Function
Err_FillTreeView:
MsgBox Error
GoTo Exit_FillTreeView
End Function
--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Bonjour,
AMHA : A Mon Humble Avis
Concernant le code celui posté par pulsar te conviendra mieux car c'est de
l'ADO. Utilisant pour ma part DAO je ne te soummet rien.
Mais sur le principe "module de classe" voilà comment je procède:
Une Classe nommée InterfaceBaseDeDonnee gère les accès à la BD, le
compactage etc...
Cette classe comporte des méthodes renvoyant une collection d'objets.
Ces objets sont définis dans des classes leurs structures étant définie
pour les besoin du programme, indépendament de la Base de données.
Appel d'une méthode de l'interface:
initialise l'objet base de donnée "ouverture"
Initialise un querydef (ou TableDef + seek)
initialise un recordset
Initialise une collection
Parcours le recordset
Initialise un objetProgramme
et transfert dans la collection
detruit objetProgramme
loop
detruit recordset
detruit querydef
close Base de donnée
Methode = collection
detruit collection
Fin methode
Ensuite tu utilises ta collection dans le programme pour faire ce que tu
veux affiche dans une liste ou autre (pour ma part je suis assez fan du
treeview et du listview).
Si tu veux supprimer n enregistrement de ta base:
Dans le programme tu crés une collection d'objet à détruire
puis tu passe cette collection à l'interface dans la méthode détruire qui
va bien.
Ceci a plusieurs avantages:
En cas de changement de type de BD ou de code (passage à DAO par exemple)
Seul les méthodes de l'interface sont à réecrire.
D'un point de vue transaction:
La base de donnée n'est ouverte que le temps de la méthode.
Pour une appli multi utilisateurs, j'ai jamais fait.
A+
Christophe
Bonjour,
AMHA : A Mon Humble Avis
Concernant le code celui posté par pulsar te conviendra mieux car c'est de
l'ADO. Utilisant pour ma part DAO je ne te soummet rien.
Mais sur le principe "module de classe" voilà comment je procède:
Une Classe nommée InterfaceBaseDeDonnee gère les accès à la BD, le
compactage etc...
Cette classe comporte des méthodes renvoyant une collection d'objets.
Ces objets sont définis dans des classes leurs structures étant définie
pour les besoin du programme, indépendament de la Base de données.
Appel d'une méthode de l'interface:
initialise l'objet base de donnée "ouverture"
Initialise un querydef (ou TableDef + seek)
initialise un recordset
Initialise une collection
Parcours le recordset
Initialise un objetProgramme
et transfert dans la collection
detruit objetProgramme
loop
detruit recordset
detruit querydef
close Base de donnée
Methode = collection
detruit collection
Fin methode
Ensuite tu utilises ta collection dans le programme pour faire ce que tu
veux affiche dans une liste ou autre (pour ma part je suis assez fan du
treeview et du listview).
Si tu veux supprimer n enregistrement de ta base:
Dans le programme tu crés une collection d'objet à détruire
puis tu passe cette collection à l'interface dans la méthode détruire qui
va bien.
Ceci a plusieurs avantages:
En cas de changement de type de BD ou de code (passage à DAO par exemple)
Seul les méthodes de l'interface sont à réecrire.
D'un point de vue transaction:
La base de donnée n'est ouverte que le temps de la méthode.
Pour une appli multi utilisateurs, j'ai jamais fait.
A+
Christophe
Bonjour,
AMHA : A Mon Humble Avis
Concernant le code celui posté par pulsar te conviendra mieux car c'est de
l'ADO. Utilisant pour ma part DAO je ne te soummet rien.
Mais sur le principe "module de classe" voilà comment je procède:
Une Classe nommée InterfaceBaseDeDonnee gère les accès à la BD, le
compactage etc...
Cette classe comporte des méthodes renvoyant une collection d'objets.
Ces objets sont définis dans des classes leurs structures étant définie
pour les besoin du programme, indépendament de la Base de données.
Appel d'une méthode de l'interface:
initialise l'objet base de donnée "ouverture"
Initialise un querydef (ou TableDef + seek)
initialise un recordset
Initialise une collection
Parcours le recordset
Initialise un objetProgramme
et transfert dans la collection
detruit objetProgramme
loop
detruit recordset
detruit querydef
close Base de donnée
Methode = collection
detruit collection
Fin methode
Ensuite tu utilises ta collection dans le programme pour faire ce que tu
veux affiche dans une liste ou autre (pour ma part je suis assez fan du
treeview et du listview).
Si tu veux supprimer n enregistrement de ta base:
Dans le programme tu crés une collection d'objet à détruire
puis tu passe cette collection à l'interface dans la méthode détruire qui
va bien.
Ceci a plusieurs avantages:
En cas de changement de type de BD ou de code (passage à DAO par exemple)
Seul les méthodes de l'interface sont à réecrire.
D'un point de vue transaction:
La base de donnée n'est ouverte que le temps de la méthode.
Pour une appli multi utilisateurs, j'ai jamais fait.
A+
Christophe