Requete insertion a l'aide d'une boucle

Mr Capone Messages postés 21 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 19 juin 2005 - 27 janv. 2005 à 10:11
Mr Capone Messages postés 21 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 19 juin 2005 - 27 janv. 2005 à 11:33
Bonjour je souhaite inseré dans ma base (sql server) des données,
cependant le nombre de champ dans ma requete peut varier par le futur
(pour le moment un enregistrement fait 20 champs)...



Alors j'ai fait ma connection a ma base, ca marche



Ensuite j'ai l'enregistrement que je souhaite ajouter qui est une
chaine dont les champs sont séparés par ";" (exemple
1;2546;Netbios;Antivir;250;12/12/2004)

j'ai déclaré un tableau champ() dans lequel je range les valeurs des champs grace a ce bout de code



----------------------------------------------------------------------------------------------

j = 0 'nombre d'enrgistrement

i = 1

contenu = ""

While contenu <> chaine 'test de bout de chaine

contenu = contenu + Split(chaine, ";")(j) + ";"

champ(i) = Split(chaine, ";")(i - 1) 'récupération de la valeur du champ dans le tableau a l'indice i

j = j + 1

i = i + 1

Wend

----------------------------------------------------------------------------------------------



j'ai donc mon tableau chaine() avec chaque valeur de ma chaine rangé dedans et dont le nombre de champs est égale à j...



Jusqu'la tout va bien



desormais je souhaite inséré l'enrgistrement contenu dans champ() a l'aide d'une requete et donc d'une boucle, car le nombre de champ peut varier (et pas consequence "j" également)



j'avait essayé de faire ceci :



---------------------------------------------------------------------------------------------

cnx.BeginTrans 'cnx est le nom de ma connection



req = "Insert into test values ('"
& champ(i) & "', '" & champ(i + 1) & "','" &
champ(i + 2) & "', '" & champ(i + 3) & "', '" & champ(i
+ 4) & "', '" & champ(i + 5) & "', '" & champ(i + 6)
& "', '" & champ(i + 7) & "', '" & champ(i + 8) &
"', '" & champ(i + 9) & "')"



cnx.Execute sql

cnx.CommitTrans

----------------------------------------------------------------------------------------------



Donc ceci fonctionne mais que pour une chaine de 10 champs ,
ce que je souhaite c'est pouvoir a l'aide d'une boucle inséré mes "j"
champs... mais comment lui faire comprendre dans la boucle qu'il doit
se decaler apres avoir inseré le champ(1), puis se décaler a droite
apres avoir inséré le champ(2) afin que l'enregistrement soit inséré
dans ma base et chaque valeur dans son bon champ...



J'espere avoir été assez clair...



Si quelqun peut m'aider, en plus je suis sur que ca peut aider plusieurs personnes

Si il vous faut des informations suplémentaire n'hésitez pas...

2 réponses

cs_corsica Messages postés 147 Date d'inscription lundi 13 mai 2002 Statut Membre Dernière intervention 15 février 2010
27 janv. 2005 à 10:40
Dim Chaine as String
Dim Champs() as String
Dim Max_Champs as integer
Dim Min_Champs as integer
Dim i as integer

Chaine = "1;2546;Netbios;Antivir;250;12/12/2004"
Champs = Split(Chaine,";")
' Je split le tableau sur le ";"
Min_Champs = LBound(Champs)
Max_Champs = UBound(Champs)
' Je récupére le plus petit et le plus grand indice de mon tableau

cnx.BeginTrans
req = "Insert into test values ("
For i=Min_Champs to Max_Champs
Req = Req + "'" + Champs(i) & "',"
next j
Req = Mid$(Req ,1,Len(Req)-1) + ")"
' ça c pour enlever la derniére virgule sur le dernier champs
' et rajouter la paranthése de fin
cnx.Execute sql
cnx.CommitTrans

Voilà ...
Mais franchement , si tu dois faire évoluer ton nombre de champs dans la chaine , tu devras aussi faire évoluer le nombre de champs de ta table alors quel est l'intéret de faire comme çà ??? Je ne sais pas ... Enfin c pas grave , j'espère avoir répondu à ta question , @ +
0
Mr Capone Messages postés 21 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 19 juin 2005
27 janv. 2005 à 11:33
Merci pour cette réponse rapide, j'ai essayé ton code, je pense que le next j est en faite un next i non ??



Ensuite un probleme que je n'avait pas évoqué... et qui risque de
fortement posé probleme... le premier champ de ma table est un Numero
Auto... je n'ai donc pas a inseré de valeur dans ce premier champ... le
premier element de ma chaine en l'ocurence "1" ici est en faite la
valeur qui doit etre inseré dans le 2eme champ de ma table... ca me
parait complexe desormais...
0
Rejoignez-nous