Je g=E8re une application avec des volumes de donn=E9es tr=E8s=20
importants qui m'ont amen=E9 =E0 organiser les donn=E9es de la=20
mani=E8re suivante :
- une bd principale=20
- des bd d=E9pendantes contenant chacune une table unique=20
(taille 1-1,5 giga) qui reprend les d=E9tails relatifs =E0 une=20
ann=E9e.=20
En pratique, cela donne les db : dbD=E9tails1998,=20
dbD=E9tails1999,...., dbD=E9tails2003 et chacune de ces db=20
contient une table tblD=E9tails (sans mill=E9sime dans le nom).
Les mises =E0 jour sont effectu=E9es trimestriellement =E0=20
partir de fichiers textes non formatt=E9s volumineux (+/-=20
1,5 giga) et contenant des donn=E9es se rapportant =E0=20
plusieurs ann=E9es.
Je souhaite traiter l'ensemble des donn=E9es en un seul=20
traitement et =E9viter des traitements par ann=E9es (jusque 4-
5 ans en arri=E8re).
Pour des motifs de bonne pratique, de compacit=E9 du code et=20
de maintenance, tout est trait=E9 par la m=EAme proc=E9dure.=20
L'application est test=E9e.
Subsiste un probl=E8me : la mise =E0 jour sp=E9cifique des=20
tables tblD=E9tails contenues dans les bdD=E9tailsAAAA=20
annualis=E9es.
Ce n'est pas un probl=E8me d'acc=E8s ou d'=E9criture, tout cela=20
fonctionne. Les db et les recordsets sont d=E9clar=E9s et=20
ouverts. Ils sont exploitables individuellement en=20
imposant une contrainte sur l'ann=E9e dans les tests.
Les tables tblD=E9tails sont ouvertes via des recordsets=20
sp=E9cifiques en d=E9but de module : rstD=E9tails1999, ...,=20
rstD=E9tails2003 donc sur un intervalle raisonnable de 5 ans.
La mise =E0 jour d'un record se fait via un code de type :
With rstD=E9tails <<<<=3D=3D=3D=3D=3D=3D=3D
!valeur1 =3D ...
!valeur2 =3D ...
...
End With
Comment faire pour ne pas devoir coder l'intruction With=20
pour chaque ann=E9e, ce qui entra=EEnerait la r=E9p=E9tition du=20
code et l'inflation du code avec chaque nouvelle ann=E9e.
Cela implique que je puisse, au coup par coup (via select=20
case, switch ou autre instruction) utiliser With avec une=20
r=E9f=E9rence au recordset de l'ann=E9e =E0 traiter et affecter le=20
recordset-cible =E0 cette r=E9f=E9rence.
Je suis en panne =E0 ce niveau.
J'ai essay=E9 (et me suis peut-=EAtre tromp=E9) :=20
- rstD=E9tails =3D rstD=E9tails1999
With rstD=E9tails
- d=E9clarer objD=E9tails as objet, lui affecter=20
rstD=E9tails1999 et l'utiliser avec With
- With rstD=E9tails et concat=E9nation de l'ann=E9e.
- With au sein d'un select case ou d'une instruction If
Pour rappel, il est d=E9conseill=E9 de sortir d'une structure=20
With. Sinon je pourrais toujours essayer :
With
appel routine
End With
Quelqu'un a-t-il LA solution?
Je passe certainement =E0 c=F4t=E9 de quelque chose de simple.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Raymond [mvp]
"Michel Gesnot" a exposé le 19/11/2003 :
Je gère une application avec des volumes de données très importants qui m'ont amené à organiser les données de la manière suivante : ---------------------------
Bonjour Michel.
En général, lorsqu'on utilise des tables sur des années glissantes on ne nomme pas les tables par leur année. on fait Table_0 pour l'année en cours table_1 pour l'année -1 table_2 pour l'année -2 ... table_5 pour l'année -5
en début de procédure, on calcule l'indice de la table en fonction de l'année de la date de référence. on conserve cet indice pour chaque appel de recordset. Le nom exact de la table n'est utilisé que pour l'open, sinon ensuite c'est l'objet qui est utilisé quel que soit le nom de la table. Set Rs = CurrentDb.OpenRecordset("table_" & indice)
C'est un début d'idée.
-- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.kynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA
"Michel Gesnot" a exposé le 19/11/2003 :
Je gère une application avec des volumes de données très
importants qui m'ont amené à organiser les données de la
manière suivante :
---------------------------
Bonjour Michel.
En général, lorsqu'on utilise des tables sur des années glissantes on ne
nomme pas les tables par leur année. on fait
Table_0 pour l'année en cours
table_1 pour l'année -1
table_2 pour l'année -2
...
table_5 pour l'année -5
en début de procédure, on calcule l'indice de la table en fonction de
l'année de la date de référence. on conserve cet indice pour chaque appel
de recordset. Le nom exact de la table n'est utilisé que pour l'open, sinon
ensuite c'est l'objet qui est utilisé quel que soit le nom de la table.
Set Rs = CurrentDb.OpenRecordset("table_" & indice)
C'est un début d'idée.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.kynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA
Je gère une application avec des volumes de données très importants qui m'ont amené à organiser les données de la manière suivante : ---------------------------
Bonjour Michel.
En général, lorsqu'on utilise des tables sur des années glissantes on ne nomme pas les tables par leur année. on fait Table_0 pour l'année en cours table_1 pour l'année -1 table_2 pour l'année -2 ... table_5 pour l'année -5
en début de procédure, on calcule l'indice de la table en fonction de l'année de la date de référence. on conserve cet indice pour chaque appel de recordset. Le nom exact de la table n'est utilisé que pour l'open, sinon ensuite c'est l'objet qui est utilisé quel que soit le nom de la table. Set Rs = CurrentDb.OpenRecordset("table_" & indice)
C'est un début d'idée.
-- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.kynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA
Raymond, merci d'intervenir.
OK pour les indices que je n'ai pas encore mis en place, mais j'avais voulu être explicite dans la première version.
C'est une solution intéressante et jouable, puique si je décide d'un intervalle de 5 ans, je répète ma routine à cinq reprises dans une structure select case par ex. et la taille de mon programme reste stable. Il me suffit de paramétrer l'affectation des recordets au démarrage de l'application de mise à jour.
Reste le problème théorique, et ce serait intellectuellement et programmatiquement frustrant de ne pas trouver la réponse.
L'instrucion With doit être suivie d'une variable objet ou variant. Comment faire pour que cette variable référencie le recordset de mon choix? sans recourir à des ouvertures et fermetures de recordset à répétition?
En tout cas, je vais déjà réagir selon tes conseils. Merci
Michel
-----Message d'origine----- "Michel Gesnot" a exposé le 19/11/2003 :
Je gère une application avec des volumes de données très
importants qui m'ont amené à organiser les données de la
manière suivante : ---------------------------
Bonjour Michel.
En général, lorsqu'on utilise des tables sur des années glissantes on ne
nomme pas les tables par leur année. on fait Table_0 pour l'année en cours table_1 pour l'année -1 table_2 pour l'année -2 .... table_5 pour l'année -5
en début de procédure, on calcule l'indice de la table en fonction de
l'année de la date de référence. on conserve cet indice pour chaque appel
de recordset. Le nom exact de la table n'est utilisé que pour l'open, sinon
ensuite c'est l'objet qui est utilisé quel que soit le nom de la table.
Set Rs = CurrentDb.OpenRecordset("table_" & indice)
C'est un début d'idée.
-- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.kynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA
.
Raymond, merci d'intervenir.
OK pour les indices que je n'ai pas encore mis en place,
mais j'avais voulu être explicite dans la première version.
C'est une solution intéressante et jouable, puique si je
décide d'un intervalle de 5 ans, je répète ma routine à
cinq reprises dans une structure select case par ex. et la
taille de mon programme reste stable.
Il me suffit de paramétrer l'affectation des recordets au
démarrage de l'application de mise à jour.
Reste le problème théorique, et ce serait
intellectuellement et programmatiquement frustrant de ne
pas trouver la réponse.
L'instrucion With doit être suivie d'une variable objet ou
variant.
Comment faire pour que cette variable référencie le
recordset de mon choix? sans recourir à des ouvertures et
fermetures de recordset à répétition?
En tout cas, je vais déjà réagir selon tes conseils.
Merci
Michel
-----Message d'origine-----
"Michel Gesnot" a exposé le 19/11/2003 :
Je gère une application avec des volumes de données
très
importants qui m'ont amené à organiser les données de
la
manière suivante :
---------------------------
Bonjour Michel.
En général, lorsqu'on utilise des tables sur des années
glissantes on ne
nomme pas les tables par leur année. on fait
Table_0 pour l'année en cours
table_1 pour l'année -1
table_2 pour l'année -2
....
table_5 pour l'année -5
en début de procédure, on calcule l'indice de la table en
fonction de
l'année de la date de référence. on conserve cet indice
pour chaque appel
de recordset. Le nom exact de la table n'est utilisé que
pour l'open, sinon
ensuite c'est l'objet qui est utilisé quel que soit le
nom de la table.
Set Rs = CurrentDb.OpenRecordset("table_" & indice)
C'est un début d'idée.
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.kynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA
OK pour les indices que je n'ai pas encore mis en place, mais j'avais voulu être explicite dans la première version.
C'est une solution intéressante et jouable, puique si je décide d'un intervalle de 5 ans, je répète ma routine à cinq reprises dans une structure select case par ex. et la taille de mon programme reste stable. Il me suffit de paramétrer l'affectation des recordets au démarrage de l'application de mise à jour.
Reste le problème théorique, et ce serait intellectuellement et programmatiquement frustrant de ne pas trouver la réponse.
L'instrucion With doit être suivie d'une variable objet ou variant. Comment faire pour que cette variable référencie le recordset de mon choix? sans recourir à des ouvertures et fermetures de recordset à répétition?
En tout cas, je vais déjà réagir selon tes conseils. Merci
Michel
-----Message d'origine----- "Michel Gesnot" a exposé le 19/11/2003 :
Je gère une application avec des volumes de données très
importants qui m'ont amené à organiser les données de la
manière suivante : ---------------------------
Bonjour Michel.
En général, lorsqu'on utilise des tables sur des années glissantes on ne
nomme pas les tables par leur année. on fait Table_0 pour l'année en cours table_1 pour l'année -1 table_2 pour l'année -2 .... table_5 pour l'année -5
en début de procédure, on calcule l'indice de la table en fonction de
l'année de la date de référence. on conserve cet indice pour chaque appel
de recordset. Le nom exact de la table n'est utilisé que pour l'open, sinon
ensuite c'est l'objet qui est utilisé quel que soit le nom de la table.
Set Rs = CurrentDb.OpenRecordset("table_" & indice)
C'est un début d'idée.
-- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.kynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA
.
Raymond [mvp]
"" a exprimé avec précision :
Raymond, merci d'intervenir.
OK pour les indices que je n'ai pas encore mis en place, mais j'avais voulu être explicite dans la première version.
C'est une solution intéressante et jouable, puique si je décide d'un intervalle de 5 ans, je répète ma routine à cinq reprises dans une structure select case par ex. et la taille de mon programme reste stable. Il me suffit de paramétrer l'affectation des recordets au démarrage de l'application de mise à jour.
Reste le problème théorique, et ce serait intellectuellement et programmatiquement frustrant de ne pas trouver la réponse.
L'instrucion With doit être suivie d'une variable objet ou variant. Comment faire pour que cette variable référencie le recordset de mon choix? sans recourir à des ouvertures et fermetures de recordset à répétition?
.
question complémentaire. Quand tu mets à jour tes tables ou que tu travailles dessus, travailles-tu sur les 5 ou travailles-tu sur une seule année à la fois ? Si tu travailles sur une seule année tu n'auras qu'un seul recordset donc un seul objet. Si tu travailles sur les 5 ans, il n'est pas prouvé que 5 ouvertures de recordset soient lentes. si tu veux utiliser le même objet pour tous les recordset il faut passer pour une fonction dans laquelle tu auras un objet recordset qui sera chargé à la valeur de l'objet passé en paramètre. pour appeler la fonction, il faudra indiquer le recordset dans le paramètre. Tu peux aussi indiquer le nom du recordset dans l'appel de ta fonction et c'est ta fonction qui ouvrira elle-même le recordset. dans ce dernier cas, le plus simple, tu n'as besoin que d'une seule routine piur traiter toutes les années.
c'est assez clair ?
-- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.kynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA
"anonymous@discussions.microsoft.com" a exprimé avec précision :
Raymond, merci d'intervenir.
OK pour les indices que je n'ai pas encore mis en place,
mais j'avais voulu être explicite dans la première version.
C'est une solution intéressante et jouable, puique si je
décide d'un intervalle de 5 ans, je répète ma routine à
cinq reprises dans une structure select case par ex. et la
taille de mon programme reste stable.
Il me suffit de paramétrer l'affectation des recordets au
démarrage de l'application de mise à jour.
Reste le problème théorique, et ce serait
intellectuellement et programmatiquement frustrant de ne
pas trouver la réponse.
L'instrucion With doit être suivie d'une variable objet ou
variant.
Comment faire pour que cette variable référencie le
recordset de mon choix? sans recourir à des ouvertures et
fermetures de recordset à répétition?
.
question complémentaire.
Quand tu mets à jour tes tables ou que tu travailles dessus, travailles-tu
sur les 5 ou travailles-tu sur une seule année à la fois ?
Si tu travailles sur une seule année tu n'auras qu'un seul recordset donc
un seul objet.
Si tu travailles sur les 5 ans, il n'est pas prouvé que 5 ouvertures de
recordset soient lentes.
si tu veux utiliser le même objet pour tous les recordset il faut passer
pour une fonction dans laquelle tu auras un objet recordset qui sera chargé
à la valeur de l'objet passé en paramètre. pour appeler la fonction, il
faudra indiquer le recordset dans le paramètre.
Tu peux aussi indiquer le nom du recordset dans l'appel de ta fonction et
c'est ta fonction qui ouvrira elle-même le recordset. dans ce dernier cas,
le plus simple, tu n'as besoin que d'une seule routine piur traiter toutes
les années.
c'est assez clair ?
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access2003.free.fr/
http://users.kynet.be/mpfa/charte.htm pour une meilleure
efficacité de tes interventions sur MPFA
OK pour les indices que je n'ai pas encore mis en place, mais j'avais voulu être explicite dans la première version.
C'est une solution intéressante et jouable, puique si je décide d'un intervalle de 5 ans, je répète ma routine à cinq reprises dans une structure select case par ex. et la taille de mon programme reste stable. Il me suffit de paramétrer l'affectation des recordets au démarrage de l'application de mise à jour.
Reste le problème théorique, et ce serait intellectuellement et programmatiquement frustrant de ne pas trouver la réponse.
L'instrucion With doit être suivie d'une variable objet ou variant. Comment faire pour que cette variable référencie le recordset de mon choix? sans recourir à des ouvertures et fermetures de recordset à répétition?
.
question complémentaire. Quand tu mets à jour tes tables ou que tu travailles dessus, travailles-tu sur les 5 ou travailles-tu sur une seule année à la fois ? Si tu travailles sur une seule année tu n'auras qu'un seul recordset donc un seul objet. Si tu travailles sur les 5 ans, il n'est pas prouvé que 5 ouvertures de recordset soient lentes. si tu veux utiliser le même objet pour tous les recordset il faut passer pour une fonction dans laquelle tu auras un objet recordset qui sera chargé à la valeur de l'objet passé en paramètre. pour appeler la fonction, il faudra indiquer le recordset dans le paramètre. Tu peux aussi indiquer le nom du recordset dans l'appel de ta fonction et c'est ta fonction qui ouvrira elle-même le recordset. dans ce dernier cas, le plus simple, tu n'as besoin que d'une seule routine piur traiter toutes les années.
c'est assez clair ?
-- @+ Raymond Access MVP http://access.seneque.free.fr/ http://access2003.free.fr/ http://users.kynet.be/mpfa/charte.htm pour une meilleure efficacité de tes interventions sur MPFA