SVP! SUPER URGENT! Aide sur requête et recordset!

Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003
-
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003
-
J ai vraiment besoin d aide!

Je ne comprends pas, il faut que quelqu un m aide, merci!

Donc je travaille sur VB avec derrière une base de données ACCESS.

Dans ma base ACCESS :

J ai une table PROGRAM (champs : PROG_NAME),
une table NEXT (champs : PROG_NAME et NEXT_PROG_NAME) et j ai une table TEMPORAIRE(champs : PROG_NAME et NEXT_PROG_NAME) qui doit être remplie à l aide d'une procédure sous VB.

En fait pour que vous compreniez mieux je vais expliquer de quoi parle mon appli :
en fait il s agit d une base de donnée de programmes dans un ordre bien précis (c est comme un arbre généalogique avec plusieurs branches avec au sommet de ces branches un 1er prog qui a 0 ou 1 ou plusieurs progs qui lui même a 0 ou 1 ou plusieurs prog, et ainsi de suite....

Donc PROG_NAME de la table PROGRAM = PROG_NAME de la table NEXT.
La tabe PROGRAM rencense tous les noms de prog et la table NEXT sert à voir quel est le prog suivant d'un prog.

Un exemple : le prog ACL001 appele le prog ACL002, donc dans la table NEXT il y aura une ligne avec en PROG_NAME=ACL001 et en NEXT_PROG_NAME=ACL002.

Mais le prog ACL002 à plusieurs prog suivants : ACL003, ACL004 et ACL005, donc dans la table NEXT il y aura une ligne avec en PROG_NAME=ACL002 et NEXT_PROG_NAME=ACL003, une autre ligne avec en PROG_NAME=ACL002 et NEXT_PROG_NAME=ACL004 et encore une autre avec en PROG_NAME=ACL002 et NEXT_PROG_NAME=ACL005.

Donc un NEXT_PROG_NAME peux devenir un PROG_NAME dans la table NEXT si celui ci à des suivants.

Il y a autre chose à faire attention : un prog peux avoir un prog suivant (donc un NEXT_PROG_NAME dans la table NEXT) mais qui est plus haut dans la hiérarchie de l arbre, voici un exemple :

reprenons les prog dont j ai parlé plus haut :

Le prog ACL005 peux avoir comme prog suivant ACL001 et revient donc en arriere ce qui fait une boucle. Donc dans la table NEXT il y aura une ligne avec en PROG_NAME=ACL005 et en NEXT_PROG_NAME=ACL001.

En résumé je dois donc insérer dans la table TEMPORAIRE les suivants des suivants des suivants, des suivants, etc.... jusqu il n y ai plus de suivants

Voilà, donc j ai une procédure (remplir_liste) dans mon code VB qui doit remplir la table TEMPORAIRE dans ACCESS à partir d un nom de prog rempli dans un formulaire VB dans un textbox (progname).

Je dois me servir de recordset.

Je dois faire en sorte qu il m insère dans la table TEMPORAIRE toute la chaine des prog en disant que tant qu il y a des NEXT_PROG_NAME dans la table NEXT par rapport au prog tapé dans mon formulaire VB dans le textbox progname (PROG_NAME dans la table NEXT) il m insère les lignes dans la table TEMPORAIRE, et ensuite il vérifie si il y a des NEXT_PROG_NAME dans la table NEXT par rapport au NEXT_PROG_NAME qui viennent d etre insérés de la table TEMPORAIRE (qui deviennent des PROG_NAME dans la table NEXT si il y a des NEXT_PROG_NAME correspondants) pour m insérer les lignes dans la table TEMPORAIRE, et ainsi de suite....

Mais attention, il peut m insérer dans la table TEMPORAIRE un PROG_NAME de même nom car comme j ai dit plus haut un prog peut avoir plusieurs prog suivants (NEXT_PROG_NAME donc) et donc avoir plusieurs lignes de PROG_NAME avec le meme nom. Mais par contre si un prog plus loin dans la hierarchie revient en arriere (comme ACL005 qui appele ACL001 et qui revient donc en arriere) cela va faire une boucle infini et donc cela plantera au bout d un moment. Donc il ne faut pas qu il m insère une ligne avec un PROG_NAME qui a déjà été inséré plus haut dans la table TEMPRORAIRE. Voilà tout le problème.

Je vous donne mon code qui ne marche pas mais qui vous donnera une idée.....

Public Sub remplir_liste()
Dim requete, requete1, requete_insertion As String
Dim liste As Variant
Dim MaBase As Database
Dim rs As Recordset

'Ouverture et definition de la base.
Set MaBase = DBEngine.Workspaces(0).OpenDatabase(nom_base)

MaBase.Execute "DELETE * FROM TEMPORAIRE"

requete = "SELECT NEXT_PROG_NAME FROM NEXT WHERE PROG_NAME='" & progname.Text & "'"

Set rs = MaBase.OpenRecordset(requete)

If Not rs.EOF Then
MaBase.Execute "INSERT INTO TEMPORAIRE SELECT PROG_NAME, NEXT_PROG_NAME FROM NEXT WHERE PROG_NAME='" & progname.Text & "'"
requete1 = "SELECT NEXT_PROG_NAME FROM NEXT WHERE PROG_NAME IN (" & requete & ")"

Set rs = MaBase.OpenRecordset(requete)

Do Until rs.EOF
requete_insertion = "INSERT INTO TEMPORAIRE SELECT PROG_NAME, NEXT_PROG_NAME FROM NEXT WHERE PROG_NAME IN (" & requete & ") AND PROG_NAME NOT IN (SELECT PROG_NAME FROM TEMPORAIRE)"

MaBase.Execute requete_insertion

requete = "SELECT NEXT_PROG_NAME FROM NEXT WHERE PROG_NAME IN (" & requete & ") " '(Ici si je rajoute AND PROG_NAME NOT IN (SELECT PROG_NAME FROM TEMPORAIRE) alors cela marche mais il ne m insère pas tout, il s arrete au bout du 2nde ou 3eme insert, je sais plus exctement)

requete1 = "SELECT NEXT_PROG_NAME FROM NEXT WHERE PROG_NAME IN (" & requete & ") AND PROG_NAME NOT IN (SELECT PROG_NAME FROM TEMPORAIRE)"

Set rs = MaBase.OpenRecordset(requete1)

Loop

End If

End Sub

Voilà, donc SVP AIDEZ MOI c est tres URGENT et tres IMPORTANT, je bloque depuis un tres gros moment dessus et je commence à avoir mal à la tête.... merci à tous ceux qui me réponde. (P.S : si quelqu un réussi à trouver, merci de faire un copier coller du code comme il doit etre écris exactement, merci encore)...

Laurent

2 réponses

Messages postés
37
Date d'inscription
jeudi 17 octobre 2002
Statut
Membre
Dernière intervention
27 octobre 2002

c'est long a lire trop long

et si tu essayait chaque requete directement dans access puis toutjours directement dans access les unes imbriqués aux autres pour voir si déja il n'y a pas un soucis à ce niveau.

courage
Messages postés
31
Date d'inscription
vendredi 19 juillet 2002
Statut
Membre
Dernière intervention
25 novembre 2003

c bon j ai réussi à trouver d ou venait l erreur, en fait je plaçais mal mes 4 derniers recordset ce qui faisait que je faisait mes requetes selon le nom d un prog mais qui n etait pas encore affiché! la variable etait à blanc, voilà donc merci quand meme