OVH Cloud OVH Cloud

Boucle For..next ?

5 réponses
Avatar
fth
Bonjour,
dans un recordset, je veux modifier un champs de chaque record.
Pour la condition, j'utilise If then

If IsNull(ACCEPTED) = True Then
ACCEPTED = 1
REFUSED = 0
BLACKLIST = 0

End If

mais il ne réagit que sur le record en cours. Normal.
je cherche à le faire sur toute la sélection et je pensais à la boucle for
next....
sans y arriver

Est-ce la bonne solution?
une autre idée?

D'avance merci

Frédéric

5 réponses

Avatar
Jessy Sempere [MVP]
Bonjour

Le mieux est d'utilise le Do ... Loop
Exemple :

Set rst = CurrentDb.OpenRecordset("tbtable", dbOpenDynaset)
with rst
if not .bof Then
.MoveFirst
Do until .eof
If .Fields("ACCEPTED") = True Then
.edit
.fields("ACCEPTED") = 1
.fields("REFUSED ") = 0
.fields("BLACKLIST ") = 0
.update
end if
.MoveNext
Loop
end if
End With
rst.Close: Set rst = Nothing

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
es$
Bonjour,
dans un recordset, je veux modifier un champs de chaque record.
Pour la condition, j'utilise If then

If IsNull(ACCEPTED) = True Then
ACCEPTED = 1
REFUSED = 0
BLACKLIST = 0

End If

mais il ne réagit que sur le record en cours. Normal.
je cherche à le faire sur toute la sélection et je pensais à la boucle for
next....
sans y arriver

Est-ce la bonne solution?
une autre idée?

D'avance merci

Frédéric




Avatar
fth
Re bonjour Jessy ..
Et merci pour la piste.

en fait, ma form est basée sur une query (QSelectAllFilter).
dans ton code, j'ai donc remplacé "tbtable" par "QSelectAllFilter"
mais ça ne fonctionne pas.
serait il mieux dès lors de définir une variable "tbtable" = docmd.runsql
(le code sql de QSelectAllFilter) ?

merci

frederic

"Jessy Sempere [MVP]" wrote in message
news:425cd764$
Bonjour

Le mieux est d'utilise le Do ... Loop
Exemple :

Set rst = CurrentDb.OpenRecordset("tbtable", dbOpenDynaset)
with rst
if not .bof Then
.MoveFirst
Do until .eof
If .Fields("ACCEPTED") = True Then
.edit
.fields("ACCEPTED") = 1
.fields("REFUSED ") = 0
.fields("BLACKLIST ") = 0
.update
end if
.MoveNext
Loop
end if
End With
rst.Close: Set rst = Nothing

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
es$
Bonjour,
dans un recordset, je veux modifier un champs de chaque record.
Pour la condition, j'utilise If then

If IsNull(ACCEPTED) = True Then
ACCEPTED = 1
REFUSED = 0
BLACKLIST = 0

End If

mais il ne réagit que sur le record en cours. Normal.
je cherche à le faire sur toute la sélection et je pensais à la boucle
for
next....
sans y arriver

Est-ce la bonne solution?
une autre idée?

D'avance merci

Frédéric








Avatar
Jessy Sempere [MVP]
Re,

Ta QSelectAllFilter à un sql...

Donc déclares une variable dans le code pour stocker le
sql et ensuite utilises cette variable comme recordset en gros :

Dim strRst as string
strRst = "Select ..."
Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset)
...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
uS2Q#
Re bonjour Jessy ..
Et merci pour la piste.

en fait, ma form est basée sur une query (QSelectAllFilter).
dans ton code, j'ai donc remplacé "tbtable" par "QSelectAllFilter"
mais ça ne fonctionne pas.
serait il mieux dès lors de définir une variable "tbtable" = docmd.runsql
(le code sql de QSelectAllFilter) ?

merci

frederic

"Jessy Sempere [MVP]" wrote in message
news:425cd764$
Bonjour

Le mieux est d'utilise le Do ... Loop
Exemple :

Set rst = CurrentDb.OpenRecordset("tbtable", dbOpenDynaset)
with rst
if not .bof Then
.MoveFirst
Do until .eof
If .Fields("ACCEPTED") = True Then
.edit
.fields("ACCEPTED") = 1
.fields("REFUSED ") = 0
.fields("BLACKLIST ") = 0
.update
end if
.MoveNext
Loop
end if
End With
rst.Close: Set rst = Nothing

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
es$
Bonjour,
dans un recordset, je veux modifier un champs de chaque record.
Pour la condition, j'utilise If then

If IsNull(ACCEPTED) = True Then
ACCEPTED = 1
REFUSED = 0
BLACKLIST = 0

End If

mais il ne réagit que sur le record en cours. Normal.
je cherche à le faire sur toute la sélection et je pensais à la boucle
for
next....
sans y arriver

Est-ce la bonne solution?
une autre idée?

D'avance merci

Frédéric












Avatar
fth
Salut Jessy,

au bout du compte, j'ai trouvé une solution.
j'espere que c'est la bonne.

Private Sub Command39_Click()

If IsNull([ACCEPTED]) = False Then

DoCmd.RunSQL ("UPDATE QSelectAllFilter SET QSelectAllFilter.ACCEPTED =
1, " & _
"QSelectAllFilter.REFUSED = 0, " & _
"QSelectAllFilter.BLACKLIST = 0;")



End If
"Jessy Sempere [MVP]" wrote in message
news:425cdf3f$
Re,

Ta QSelectAllFilter à un sql...

Donc déclares une variable dans le code pour stocker le
sql et ensuite utilises cette variable comme recordset en gros :

Dim strRst as string
strRst = "Select ..."
Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset)
...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
uS2Q#
Re bonjour Jessy ..
Et merci pour la piste.

en fait, ma form est basée sur une query (QSelectAllFilter).
dans ton code, j'ai donc remplacé "tbtable" par "QSelectAllFilter"
mais ça ne fonctionne pas.
serait il mieux dès lors de définir une variable "tbtable" = docmd.runsql
(le code sql de QSelectAllFilter) ?

merci

frederic

"Jessy Sempere [MVP]" wrote in message
news:425cd764$
Bonjour

Le mieux est d'utilise le Do ... Loop
Exemple :

Set rst = CurrentDb.OpenRecordset("tbtable", dbOpenDynaset)
with rst
if not .bof Then
.MoveFirst
Do until .eof
If .Fields("ACCEPTED") = True Then
.edit
.fields("ACCEPTED") = 1
.fields("REFUSED ") = 0
.fields("BLACKLIST ") = 0
.update
end if
.MoveNext
Loop
end if
End With
rst.Close: Set rst = Nothing

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
es$
Bonjour,
dans un recordset, je veux modifier un champs de chaque record.
Pour la condition, j'utilise If then

If IsNull(ACCEPTED) = True Then
ACCEPTED = 1
REFUSED = 0
BLACKLIST = 0

End If

mais il ne réagit que sur le record en cours. Normal.
je cherche à le faire sur toute la sélection et je pensais à la boucle
for
next....
sans y arriver

Est-ce la bonne solution?
une autre idée?

D'avance merci

Frédéric
















Avatar
Jessy Sempere [MVP]
Oui mais là tu agis sur tous les enregistrement alors que tu ne vérifies la
condition que sur celui où tu te trouves...

Sinon effectivement, tu peux passer par une requête mise à jour en
spécifiant ton
critère, du coup tu mettras à jour tous les enregistrements qui répondent à
ton
critère de mise à jour...

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:

Salut Jessy,

au bout du compte, j'ai trouvé une solution.
j'espere que c'est la bonne.

Private Sub Command39_Click()

If IsNull([ACCEPTED]) = False Then

DoCmd.RunSQL ("UPDATE QSelectAllFilter SET QSelectAllFilter.ACCEPTED > 1, " & _
"QSelectAllFilter.REFUSED = 0, " & _
"QSelectAllFilter.BLACKLIST = 0;")



End If
"Jessy Sempere [MVP]" wrote in message
news:425cdf3f$
Re,

Ta QSelectAllFilter à un sql...

Donc déclares une variable dans le code pour stocker le
sql et ensuite utilises cette variable comme recordset en gros :

Dim strRst as string
strRst = "Select ..."
Set rst = CurrentDb.OpenRecordset(strRst, dbOpenDynaset)
...

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message news:
uS2Q#
Re bonjour Jessy ..
Et merci pour la piste.

en fait, ma form est basée sur une query (QSelectAllFilter).
dans ton code, j'ai donc remplacé "tbtable" par "QSelectAllFilter"
mais ça ne fonctionne pas.
serait il mieux dès lors de définir une variable "tbtable" docmd.runsql
(le code sql de QSelectAllFilter) ?

merci

frederic

"Jessy Sempere [MVP]" wrote in message
news:425cd764$
Bonjour

Le mieux est d'utilise le Do ... Loop
Exemple :

Set rst = CurrentDb.OpenRecordset("tbtable", dbOpenDynaset)
with rst
if not .bof Then
.MoveFirst
Do until .eof
If .Fields("ACCEPTED") = True Then
.edit
.fields("ACCEPTED") = 1
.fields("REFUSED ") = 0
.fields("BLACKLIST ") = 0
.update
end if
.MoveNext
Loop
end if
End With
rst.Close: Set rst = Nothing

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"fth" <frederic.thiriauxSPAM!@matloc.be> a écrit dans le message
news:




es$
Bonjour,
dans un recordset, je veux modifier un champs de chaque record.
Pour la condition, j'utilise If then

If IsNull(ACCEPTED) = True Then
ACCEPTED = 1
REFUSED = 0
BLACKLIST = 0

End If

mais il ne réagit que sur le record en cours. Normal.
je cherche à le faire sur toute la sélection et je pensais à la
boucle





for
next....
sans y arriver

Est-ce la bonne solution?
une autre idée?

D'avance merci

Frédéric