Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Access XP : pb avec 1 argument ds un code d'utilisation de recordset

2 réponses
Avatar
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)

La fonction nbrevisco fonctionne très bien.

J'espère que quelqu'un pourra m'aider ...

D'avance merci.

Anthony

2 réponses

Avatar
Xavier HUE
Bonjour,

rststats.i = nbrevisco(i)


Puisque les zones de ton RecordSet se
nomment "1", "2",..."130" alors essaie

rststats.Fields(str(i)) = nbrevisco(i)

Cordialement.

Avatar
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