Access XP : pb avec 1 argument ds un code d'utilisation de recordset
2 réponses
AA
Bonjour,
mon problème est le suivant. Pour certaines raisons je suis obligé d'avoir
une table (stats) avec les infos suivantes :
- numdoc
- datedoc
- 1
- 2
- 3
- ...
- 130
Dans un formulaire j'utilise du code qui ressemble à ça :
Dim i As Integer
Dim rststats, s As Recordset
Set bd = CurrentDb()
Set rststats = bd.Openrecordset("stats")
For i = 1 To 130
rststats.AddNew
rststats.i = nbrevisco(i)
rststats.Update
Next i
avec pour la fonction nbrevisco :
Function nbrevisco(valvisco As Integer) As Integer
nbrevisco = DCount("*", "essaiprod", "visco = " & valvisco)
End Function
Mon but est donc d'éviter d'avoir 130 lignes de code (autant que de champs
existants) et d'avoir au lieu de ça un traitement en boucle pour chacun de
mes champs (1,..., 130 sont des entiers) en passant l'argument i. Or quelque
soit la syntaxe utilisée j'ai un message d'erreur. Mon code fonctionne très
bien si je mets tout sous la forme :
rststats.1 = nbrevisco(1)
...
rststats.130 = nbrevisco(130)
Puisque les zones de ton RecordSet se nomment "1", "2",..."130" alors essaie
rststats.Fields(str(i)) = nbrevisco(i)
Cordialement.
Eric
Bonjour Anthony
En complément de la réponse donnée par Xavier, je corrigerai ainsi, si tu veux remplir les 130 champs (numérotés de 1 à 130) d'un enregistrement.
Dim i As Integer Dim rststats As Recordset
Set bd = CurrentDb() Set rststats = bd.Openrecordset("stats") rststats.AddNew '<--- ici la demande d'ajout hors de la boucle For i = 1 To 130 rststats.Fields(str(i)) = nbrevisco(i) Next i rststats.Update '<--- là, la mise à jour & l'ajout
car avec ton code tu ajoutes 130 enregistrements et seul le champ référencé par i va être renseigné par ta fonction nbrevisco(i) à chaque passage. A moins que ca ne soit le but recherché.
A+ Eric
PS : A toi de voir s'il faut boucler sur le recordset pour remplir tous les enregistrements du recordset
"AA" écrivait news:c65lr9$bbk$:
Bonjour,
mon problème est le suivant. Pour certaines raisons je suis obligé d'avoir une table (stats) avec les infos suivantes : - numdoc - datedoc - 1 - 2 - 3 - ... - 130
Dans un formulaire j'utilise du code qui ressemble à ça :
Dim i As Integer Dim rststats, s As Recordset
Set bd = CurrentDb() Set rststats = bd.Openrecordset("stats") For i = 1 To 130 rststats.AddNew rststats.i = nbrevisco(i) rststats.Update Next i
avec pour la fonction nbrevisco : Function nbrevisco(valvisco As Integer) As Integer nbrevisco = DCount("*", "essaiprod", "visco = " & valvisco) End Function
Mon but est donc d'éviter d'avoir 130 lignes de code (autant que de champs existants) et d'avoir au lieu de ça un traitement en boucle pour chacun de mes champs (1,..., 130 sont des entiers) en passant l'argument i. Or quelque soit la syntaxe utilisée j'ai un message d'erreur. Mon code fonctionne très bien si je mets tout sous la forme : rststats.1 = nbrevisco(1) ... rststats.130 = nbrevisco(130)
La fonction nbrevisco fonctionne très bien.
J'espère que quelqu'un pourra m'aider ...
D'avance merci.
Anthony
Bonjour Anthony
En complément de la réponse donnée par Xavier, je corrigerai ainsi,
si tu veux remplir les 130 champs (numérotés de 1 à 130) d'un
enregistrement.
Dim i As Integer
Dim rststats As Recordset
Set bd = CurrentDb()
Set rststats = bd.Openrecordset("stats")
rststats.AddNew '<--- ici la demande d'ajout hors de la boucle
For i = 1 To 130
rststats.Fields(str(i)) = nbrevisco(i)
Next i
rststats.Update '<--- là, la mise à jour & l'ajout
car avec ton code tu ajoutes 130 enregistrements et seul le champ référencé
par i va être renseigné par ta fonction nbrevisco(i) à chaque passage. A
moins que ca ne soit le but recherché.
A+
Eric
PS : A toi de voir s'il faut boucler sur le recordset pour remplir tous les
enregistrements du recordset
mon problème est le suivant. Pour certaines raisons je suis obligé
d'avoir une table (stats) avec les infos suivantes :
- numdoc
- datedoc
- 1
- 2
- 3
- ...
- 130
Dans un formulaire j'utilise du code qui ressemble à ça :
Dim i As Integer
Dim rststats, s As Recordset
Set bd = CurrentDb()
Set rststats = bd.Openrecordset("stats")
For i = 1 To 130
rststats.AddNew
rststats.i = nbrevisco(i)
rststats.Update
Next i
avec pour la fonction nbrevisco :
Function nbrevisco(valvisco As Integer) As Integer
nbrevisco = DCount("*", "essaiprod", "visco = " & valvisco)
End Function
Mon but est donc d'éviter d'avoir 130 lignes de code (autant que de
champs existants) et d'avoir au lieu de ça un traitement en boucle
pour chacun de mes champs (1,..., 130 sont des entiers) en passant
l'argument i. Or quelque soit la syntaxe utilisée j'ai un message
d'erreur. Mon code fonctionne très bien si je mets tout sous la forme
: rststats.1 = nbrevisco(1)
...
rststats.130 = nbrevisco(130)
En complément de la réponse donnée par Xavier, je corrigerai ainsi, si tu veux remplir les 130 champs (numérotés de 1 à 130) d'un enregistrement.
Dim i As Integer Dim rststats As Recordset
Set bd = CurrentDb() Set rststats = bd.Openrecordset("stats") rststats.AddNew '<--- ici la demande d'ajout hors de la boucle For i = 1 To 130 rststats.Fields(str(i)) = nbrevisco(i) Next i rststats.Update '<--- là, la mise à jour & l'ajout
car avec ton code tu ajoutes 130 enregistrements et seul le champ référencé par i va être renseigné par ta fonction nbrevisco(i) à chaque passage. A moins que ca ne soit le but recherché.
A+ Eric
PS : A toi de voir s'il faut boucler sur le recordset pour remplir tous les enregistrements du recordset
"AA" écrivait news:c65lr9$bbk$:
Bonjour,
mon problème est le suivant. Pour certaines raisons je suis obligé d'avoir une table (stats) avec les infos suivantes : - numdoc - datedoc - 1 - 2 - 3 - ... - 130
Dans un formulaire j'utilise du code qui ressemble à ça :
Dim i As Integer Dim rststats, s As Recordset
Set bd = CurrentDb() Set rststats = bd.Openrecordset("stats") For i = 1 To 130 rststats.AddNew rststats.i = nbrevisco(i) rststats.Update Next i
avec pour la fonction nbrevisco : Function nbrevisco(valvisco As Integer) As Integer nbrevisco = DCount("*", "essaiprod", "visco = " & valvisco) End Function
Mon but est donc d'éviter d'avoir 130 lignes de code (autant que de champs existants) et d'avoir au lieu de ça un traitement en boucle pour chacun de mes champs (1,..., 130 sont des entiers) en passant l'argument i. Or quelque soit la syntaxe utilisée j'ai un message d'erreur. Mon code fonctionne très bien si je mets tout sous la forme : rststats.1 = nbrevisco(1) ... rststats.130 = nbrevisco(130)