Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : SVP! SUPER URGENT! Aide sur requête et recordset! [ Archives Visual Basic / Bases de données ] (slayeraix)

mardi 22 octobre 2002 à 10:26:07 | SVP! SUPER URGENT! Aide sur requête et recordset!

slayeraix

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

mardi 22 octobre 2002 à 15:08:49 | Re : SVP! SUPER URGENT! Aide sur requête et recordset!

Yahan

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

-------------------------------
Réponse au message :
-------------------------------

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

jeudi 24 octobre 2002 à 09:48:18 | Re : SVP! SUPER URGENT! Aide sur requête et recordset!

slayeraix

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




-------------------------------
Réponse au message :
-------------------------------

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

-------------------------------
Réponse au message :
-------------------------------

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




Cette discussion est classé dans : table, prog, name, next, temporaire


Répondre à ce message

Sujets en rapport avec ce message

Insert dans ACCESS trop lent! URGENT!!! [ par slayeraix ] J ai un problème, j ai une procédure (remplir_liste) qui doit me remplir une table (TEMPORAIRE dans ma base ACCESS) en faisant un INSERT avec des requ Insert dans ACCESS trop lent! URGENT!!! [ par slayeraix ] J ai un problème, j ai une procédure (remplir_liste) qui doit me remplir une table (TEMPORAIRE dans ma base ACCESS) en faisant un INSERT avec des requ Enorme probleme avec les tables, please help!!!!! [ par crocmorts ] Salut, voilà, j'ai un enorme problème, si vous voulez j'ai 3 tablesexemple1ere(100L 2COL) 2iem(100L 1COL) 3em(idem)75|infirmiere Problèmes de boucle For next [ par fitzjames ] Bonjour,Je suis sur excel 2003, et j'ai un problème sur mes boucle for ...next. Ma macro doit mettre à jour à partir d'une liste mes feuilles si le nu NullReferenceException avec un tableau en VB.NET 2005 [ par bny ] Je suis en ce moment en train de faire un programme de questionnaire en VB.NET 2005 et j'essaie de prendre des numéros de questions aléatoires dans ma Savoir si une table temporaire existe [ par bob10 ] Salut tout le monde,Je développe une application en vb.net, et je travail avec des bases de données sous SQL server et j'aurais voulu savoir si il éta Erreur de syntaxe SQL [ par Fulgy ] Bonjour à tous, voilà mon problème:je copie la structure d'une table existante dans la même base que cette dernière avec un SELECT INTO puis un DELETE J ai besoin d aide!!!! affichage requete qui ne marche pas!!! [ par slayeraix ] J ai déjà envoyé 2 fois ma question sur le forum mais seulement 2 personne m ont répondus et mon probleme n est toujours pas réglé!!! Donc je relance Mise à jour de table (Base SQL 2005) [ par Marneus73 ] Bonjour à tous,Petite question, j'ai fait un petit prog (visionneuse) qui affiche des données contenues dans une base de donnée en SQL 2005. J'aimerai table temporaire sous vb [ par Microsux ] Bonjour,ma question est tres simple, ya-t-il moyen en vb de declarer et d'utiliser des tables temporaires stocké dans la memoire vive de l'ordi local


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Appels d'offres

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.