OVH Cloud OVH Cloud

modification de table

7 réponses
Avatar
dams27_56
bonjour =E0 tous,

voil=E0, j'ai une table qui comporte des champs comme ceci:
toto 33|32|21
tata 12|13|14
et je souhaiterais dupliquer ces lignes avec du code ou des requ=EAtes.
j'ai d=E9j=E0 un code pour obtenir:
(je duplique ma ligne autant de fois que j'ai de | dans mon champ)
toto 33|32|31
toto 33|32|31
toto 33|32|31
tata 12|13|14
tata 12|13|14
tata 12|13|14
mais apr=E8s je n'arrive pas =E0 obtenir:
toto 33
toto 32
toto 31
tata 12
tata 13
tata 14

Quelqu'un aurait-il une id=E9e ou une solution =E0 mon probl=E8me, car l=E0
je suis vraiment bolqu=E9???

merci beaucoup =E0 tous...
cordialement

7 réponses

Avatar
ze Titi
Bonjour

Donne ton code existant, ça pourrait nous aider...


dans ton message
bonjour à tous,

voilà, j'ai une table qui comporte des champs comme ceci:
toto 33|32|21
tata 12|13|14
et je souhaiterais dupliquer ces lignes avec du code ou des requêtes.
j'ai déjà un code pour obtenir:
(je duplique ma ligne autant de fois que j'ai de | dans mon champ)
toto 33|32|31
toto 33|32|31
toto 33|32|31
tata 12|13|14
tata 12|13|14
tata 12|13|14
mais après je n'arrive pas à obtenir:
toto 33
toto 32
toto 31
tata 12
tata 13
tata 14

Quelqu'un aurait-il une idée ou une solution à mon problème, car là
je suis vraiment bolqué???

merci beaucoup à tous...
cordialement


--
Cordialement,

Ze Titi

Avatar
Fr
Bonjour,

A mon avis...
Le plus simple si tu ne veux pas te lancer dans de la programmation serait :
- de créer une nouvelle table vide qui contient tes 2 champs (nom et valeur)
- de créer une requête d'ajout de données qui insèrera uniquement les
enregistrements correspondants à la 1ère valeur
- modifier la requête pour insérer les enreg qui correspondent à la 2ème
donnée
- modifier la requête pour insérer les enreg qui correspondent à la 3ème
donnée
Pour récupérer la valeur à insérer, il faut utiliser les fonctions chaînes
de caractères qui te permettront de scinder ta chaîne en plusieurs valeurs.
Faut regarder du côté des fonctions left( ), right( ) et mid ( )

Françoise
ENITA Bordeaux - UF Sciences pour l'Ingénieur



a écrit dans le message de news:

bonjour à tous,

voilà, j'ai une table qui comporte des champs comme ceci:
toto 33|32|21
tata 12|13|14
et je souhaiterais dupliquer ces lignes avec du code ou des requêtes.
j'ai déjà un code pour obtenir:
(je duplique ma ligne autant de fois que j'ai de | dans mon champ)
toto 33|32|31
toto 33|32|31
toto 33|32|31
tata 12|13|14
tata 12|13|14
tata 12|13|14
mais après je n'arrive pas à obtenir:
toto 33
toto 32
toto 31
tata 12
tata 13
tata 14

Quelqu'un aurait-il une idée ou une solution à mon problème, car là
je suis vraiment bolqué???

merci beaucoup à tous...
cordialement
Avatar
DAMS
Bonjour,

voilà mon code:
Function NbOc(Chaine As String, Ch As String) As Long
Dim I As Long
NbOc = 0
For I = 1 To Len(Chaine)
If Mid$(Chaine, I, 1) = Ch Then NbOc = NbOc + 1
Next
End Function

Sub zz()
Dim bd As Database
Dim snap As DAO.Recordset
Dim strSQL As String, I As Long, nb As Long
Set bd = CurrentDb
Set snap = bd.OpenRecordset("select * from DRL", dbOpenSnapshot)
snap.MoveLast: snap.MoveFirst
While Not snap.EOF
nb = NbOc(snap("CHAMP2"), "|")
If nb > 0 Then
For I = 1 To nb
strSQL = "Insert into DRL(CHAMP1,CHAMP2) "
strSQL = strSQL & "Values('" & snap(0) & "','" &
snap(1) & "')"
CurrentDb.Execute strSQL
Next I
End If
snap.MoveNext
Wend
snap.Close
bd.Close
Set snap = Nothing
Set bd = Nothing
End Sub

juste une précision pour vous dire que le nbr de | est
variable...c'est ça le pb...

merci de votre aide
cordialement


Bonjour

Donne ton code existant, ça pourrait nous aider...


dans ton message
bonjour à tous,

voilà, j'ai une table qui comporte des champs comme ceci:
toto 33|32|21
tata 12|13|14
et je souhaiterais dupliquer ces lignes avec du code ou des requêtes.
j'ai déjà un code pour obtenir:
(je duplique ma ligne autant de fois que j'ai de | dans mon champ)
toto 33|32|31
toto 33|32|31
toto 33|32|31
tata 12|13|14
tata 12|13|14
tata 12|13|14
mais après je n'arrive pas à obtenir:
toto 33
toto 32
toto 31
tata 12
tata 13
tata 14

Quelqu'un aurait-il une idée ou une solution à mon problème, car là
je suis vraiment bolqué???

merci beaucoup à tous...
cordialement


--
Cordialement,

Ze Titi



Avatar
ze Titi
Bonjour DAMS

Du code qui me rappelle quelque chose... lol
Bon, changement de stratégie mais à tester (non garanti...)

Sub zz()
Dim bd As Database
Dim snap As DAO.Recordset
Dim strSQL As String, I As Long, nb As Long,aux as Variant
Set bd = CurrentDb
Set snap = bd.OpenRecordset("select * from DRL", dbOpenSnapshot)
snap.MoveLast: snap.MoveFirst
While Not snap.EOF
aux=split(snap!champ2,"|")
nb=ubound(aux)
for i=0 to nb-1
strSQL = "Insert into DRL(CHAMP1,CHAMP2) "
strSQL = strSQL & "Values('" & snap(0) & "','" & aux(i) & "')"
CurrentDb.Execute strSQL
snap.MoveNext
next
Wend
snap.Close
bd.Close
Set snap = Nothing
Set bd = Nothing
End Sub

dans ton message
du 01/12/2006,
Bonjour,

voilà mon code:
Function NbOc(Chaine As String, Ch As String) As Long
Dim I As Long
NbOc = 0
For I = 1 To Len(Chaine)
If Mid$(Chaine, I, 1) = Ch Then NbOc = NbOc + 1
Next
End Function

Sub zz()
Dim bd As Database
Dim snap As DAO.Recordset
Dim strSQL As String, I As Long, nb As Long
Set bd = CurrentDb
Set snap = bd.OpenRecordset("select * from DRL", dbOpenSnapshot)
snap.MoveLast: snap.MoveFirst
While Not snap.EOF
nb = NbOc(snap("CHAMP2"), "|")
If nb > 0 Then
For I = 1 To nb
strSQL = "Insert into DRL(CHAMP1,CHAMP2) "
strSQL = strSQL & "Values('" & snap(0) & "','" &
snap(1) & "')"
CurrentDb.Execute strSQL
Next I
End If
snap.MoveNext
Wend
snap.Close
bd.Close
Set snap = Nothing
Set bd = Nothing
End Sub

juste une précision pour vous dire que le nbr de | est
variable...c'est ça le pb...

merci de votre aide
cordialement


Bonjour

Donne ton code existant, ça pourrait nous aider...


dans ton message
bonjour à tous,

voilà, j'ai une table qui comporte des champs comme ceci:
toto 33|32|21
tata 12|13|14
et je souhaiterais dupliquer ces lignes avec du code ou des requêtes.
j'ai déjà un code pour obtenir:
(je duplique ma ligne autant de fois que j'ai de | dans mon champ)
toto 33|32|31
toto 33|32|31
toto 33|32|31
tata 12|13|14
tata 12|13|14
tata 12|13|14
mais après je n'arrive pas à obtenir:
toto 33
toto 32
toto 31
tata 12
tata 13
tata 14

Quelqu'un aurait-il une idée ou une solution à mon problème, car là
je suis vraiment bolqué???

merci beaucoup à tous...
cordialement


--
Cordialement,

Ze Titi



--
Voilou !
Bon code
Cordialement,

Ze Titi



Avatar
ze Titi
Ahhhhhhhhhhhh, quelle horreur, j'ai fait une erreur...

Sub zz()
Dim bd As Database
Dim snap As DAO.Recordset
Dim strSQL As String, I As Long, nb As Long,aux as Variant
Set bd = CurrentDb
Set snap = bd.OpenRecordset("select * from DRL", dbOpenSnapshot)
snap.MoveLast: snap.MoveFirst
While Not snap.EOF
aux=split(snap!champ2,"|")
nb=ubound(aux)
for i=0 to nb-1
strSQL = "Insert into DRL(CHAMP1,CHAMP2) "
strSQL = strSQL & "Values('" & snap(0) & "','" & aux(i) & "')"
CurrentDb.Execute strSQL
next
snap.MoveNext
Wend
snap.Close
bd.Close
Set snap = Nothing
Set bd = Nothing
End Sub

--
Voilou !
Bon code
Cordialement,

Ze Titi
Avatar
DAMS
merci beaucoup pour le code cela fonctionne mis à part qu'il ne
m'extrait pas le dernier champ. pour un champ qui contient 12|13|14, il
m'extrait le 12 le 13 mais pas le 14. est-ce que vous avez une
solution.

merci d'avance
cordialement


Ahhhhhhhhhhhh, quelle horreur, j'ai fait une erreur...

Sub zz()
Dim bd As Database
Dim snap As DAO.Recordset
Dim strSQL As String, I As Long, nb As Long,aux as Variant
Set bd = CurrentDb
Set snap = bd.OpenRecordset("select * from DRL", dbOpenSnapshot)
snap.MoveLast: snap.MoveFirst
While Not snap.EOF
aux=split(snap!champ2,"|")
nb=ubound(aux)
for i=0 to nb-1
strSQL = "Insert into DRL(CHAMP1,CHAMP2) "
strSQL = strSQL & "Values('" & snap(0) & "','" & aux(i) & "')"
CurrentDb.Execute strSQL
next
snap.MoveNext
Wend
snap.Close
bd.Close
Set snap = Nothing
Set bd = Nothing
End Sub

--
Voilou !
Bon code
Cordialement,

Ze Titi


Avatar
ze Titi
Bonjour DAMS

Remplace
for i=0 to nb-1
par
for i=0 to nb



dans ton message
merci beaucoup pour le code cela fonctionne mis à part qu'il ne
m'extrait pas le dernier champ. pour un champ qui contient 12|13|14, il
m'extrait le 12 le 13 mais pas le 14. est-ce que vous avez une
solution.

merci d'avance
cordialement


Ahhhhhhhhhhhh, quelle horreur, j'ai fait une erreur...

Sub zz()
Dim bd As Database
Dim snap As DAO.Recordset
Dim strSQL As String, I As Long, nb As Long,aux as Variant
Set bd = CurrentDb
Set snap = bd.OpenRecordset("select * from DRL", dbOpenSnapshot)
snap.MoveLast: snap.MoveFirst
While Not snap.EOF
aux=split(snap!champ2,"|")
nb=ubound(aux)
for i=0 to nb-1
strSQL = "Insert into DRL(CHAMP1,CHAMP2) "
strSQL = strSQL & "Values('" & snap(0) & "','" & aux(i) & "')"
CurrentDb.Execute strSQL
next
snap.MoveNext
Wend
snap.Close
bd.Close
Set snap = Nothing
Set bd = Nothing
End Sub

--
Voilou !
Bon code
Cordialement,

Ze Titi



--
Voilou !
Bon code
Cordialement,

Ze Titi