OVH Cloud OVH Cloud

Décalage de contenus de champs

3 réponses
Avatar
Jmd
Bonjour à tous

J'ai une table contenant 8 champs texte.
Cette table a été exclusivement créée pour générer des arbres (TreeView).

T1,T2,T3,T4,T5,T6,T7,T8

Celui qui a rempli cette table (pensant bien faire) a rempli des champs en
position 7 et 8 en laissant des trous dans les contenus des champs.
Exemple : T1,T2,T3,T4 sont remplis T5 et T6 sont vides T7 et T8 sont
remplis.

Ce qui ne m'arrange pas du tout pour la création de mes arbres.
Qui aurait un exemple de requête qui ferait ceci :
- Champ 1 vide ?
- Champ 2 suivant vide ?
- Si champ 2 suivant non vide et champ 1 vide déplace le contenu de champ
2 vers champ 1 et vide champ2

Merci de votre aide.

Jmd

3 réponses

Avatar
Xavier HUE
Bonjour jmd,

Par requête, je pense que cela risque d'être lourd.
En effet, il faudrait gérer les colonnes une à une, les
trous de 1 à n colonnes, et réitérer la/les requêtes de
mise à jour.

Essaie cette petite procédure:

Sub Aligner()
Dim dB As DAO.Database
Dim Frd As DAO.Recordset
Dim bytChp1 As Byte
Dim bytChp2 As Byte

Set dB = CurrentDb
Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")

While Not Frd.BOF And Not Frd.EOF
Frd.Edit
bytChp1 = 1
While bytChp1 <= 7
If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ
Vide => Cherché non vide à droite
bytChp2 = bytChp1 + 1
While bytChp2 <= 8
If Not (IsNull(Frd.Fields("T" & bytChp2))) Then
Frd.Fields("T" & bytChp1) = Frd.Fields("T" &
bytChp2)
Frd.Fields("T" & bytChp2) = Null
bytChp1 = bytChp1 + 1
End If
bytChp2 = bytChp2 + 1
Wend
End If
bytChp1 = bytChp1 + 1
Wend
Frd.Update
Frd.MoveNext
Wend
End Sub

Cordialement.
Avatar
Jmd
Merci, j'intègre cette procédure et je reposte pour conclusions.
Jmd


"Xavier HUE" a écrit dans le message de
news:043e01c3cba2$e03b77c0$
Bonjour jmd,

Par requête, je pense que cela risque d'être lourd.
En effet, il faudrait gérer les colonnes une à une, les
trous de 1 à n colonnes, et réitérer la/les requêtes de
mise à jour.

Essaie cette petite procédure:

Sub Aligner()
Dim dB As DAO.Database
Dim Frd As DAO.Recordset
Dim bytChp1 As Byte
Dim bytChp2 As Byte

Set dB = CurrentDb
Set Frd = dB.OpenRecordset("SELECT * FROM TblArbre")

While Not Frd.BOF And Not Frd.EOF
Frd.Edit
bytChp1 = 1
While bytChp1 <= 7
If IsNull(Frd.Fields("T" & bytChp1)) Then 'Champ
Vide => Cherché non vide à droite
bytChp2 = bytChp1 + 1
While bytChp2 <= 8
If Not (IsNull(Frd.Fields("T" & bytChp2))) Then
Frd.Fields("T" & bytChp1) = Frd.Fields("T" &
bytChp2)
Frd.Fields("T" & bytChp2) = Null
bytChp1 = bytChp1 + 1
End If
bytChp2 = bytChp2 + 1
Wend
End If
bytChp1 = bytChp1 + 1
Wend
Frd.Update
Frd.MoveNext
Wend
End Sub

Cordialement.
Avatar
Jmd
Avec tous mes remerciements
Cette procédure a bien fonctionné.
Je suis plus spécialiste de Delphi et connais très peu VB. L'aide me fut
donc précieuse.

Cordialement
Jmd