OVH Cloud OVH Cloud

No current record

3 réponses
Avatar
Ado
Bonjour,
J'ai un petit probleme avec mon code :
Sub AllocateExperts()
Dim db As DAO.Database: Set db = CurrentDb
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst = db.OpenRecordset("SELECT PROP_NUM, PANEL_ID, RAPPORTEUR, EXPERT1,
EXPERT2 FROM T_FP6_PROPOSALS ", dbOpenDynaset)
Set rst2 = db.OpenRecordset("SELECT EXPERT_ID, EXPERTISE, ORGANISATION FROM
T_FP6_EXPERTS", dbOpenDynaset)

With rst
While rst.EOF = False
1
If rst.Fields(2).Value <> 0 Then
rst.MoveNext
GoTo 1
Else
End If
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
If rst.Fields(1).Value = rst2.Fields(1).Value Then

.Edit
!RAPPORTEUR = rst2.Fields(0).Value
.Update

rst.MoveNext
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
Else
GoTo 1
End If
Wend
End With
End Sub

Il me donne toujours un message que il n'y a plus de record ??
pourtant au début du code il y a la fonction eof pour qu'il se remet au
début, mais il me semble qu'il ne tient pas compte!!

Merci pour votre aide.

3 réponses

Avatar
Gafish
Bonjour,

C'est pas facile de saisir l'identation dans ton code.
Mais j'ai l'impression que sur la fin, il y a des cas ou tu peux faire deux
rs2.MoveNext de suite sans tester pour le deuxième le EOF. Non ?

Arnaud

"Ado" a écrit dans le message de news:

Bonjour,
J'ai un petit probleme avec mon code :
Sub AllocateExperts()
Dim db As DAO.Database: Set db = CurrentDb
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst = db.OpenRecordset("SELECT PROP_NUM, PANEL_ID, RAPPORTEUR,
EXPERT1,
EXPERT2 FROM T_FP6_PROPOSALS ", dbOpenDynaset)
Set rst2 = db.OpenRecordset("SELECT EXPERT_ID, EXPERTISE, ORGANISATION
FROM
T_FP6_EXPERTS", dbOpenDynaset)

With rst
While rst.EOF = False
1
If rst.Fields(2).Value <> 0 Then
rst.MoveNext
GoTo 1
Else
End If
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
If rst.Fields(1).Value = rst2.Fields(1).Value Then

.Edit
!RAPPORTEUR = rst2.Fields(0).Value
.Update

rst.MoveNext
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
Else
GoTo 1
End If
Wend
End With
End Sub

Il me donne toujours un message que il n'y a plus de record ??
pourtant au début du code il y a la fonction eof pour qu'il se remet au
début, mais il me semble qu'il ne tient pas compte!!

Merci pour votre aide.


Avatar
Ilan
Bonjour,
essaie peut-etre ce code.
A)
J'ai ajoute des criteres de recherches dans les recordset
1) RAPPORTEUR = 0 puisque seul la valeur de ce champ t'interesse
2) Ordre de tri base sur la valeur de PANEL_ID pour rst
et EXPERTISE pour rst2
B)
Description du code :
TANT QUE Fin rst2 n'est pas atteinte
aller au premier enregistrement de rst
chercher dans rst le 1er enregistrement
(avec rst!PANEL_ID=rst2!EXPERTISE)
SI l'enregistrement est trouve
ALORS
FAIRE TANT QUE Fin rst n'est pas atteinte
SI rst!PANEL_ID est different de rst2!EXPERTISE
ALORS sortir BOUCLE FAIRE TANT QUE
FIN SI
mettre a jour rst avec rst!RAPPORTEUR=rst2!EXPERT_ID
aller a l'enregistrement suivant de rst
BOUCLE FAIRE TANT QUE
FIN SI
aller a l'enregistrement suivant de rst2
FIN TANT QUE

Sub AllocateExperts()
Dim db As DAO.Database: Set db = CurrentDb
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst = db.OpenRecordset("SELECT PROP_NUM, PANEL_ID, RAPPORTEUR, EXPERT1," _
& "EXPERT2 FROM T_FP6_PROPOSALS WHERE RAPPORTEUR=0 ORDER BY PANEL_ID",
dbOpenDynaset)
Set rst2 = db.OpenRecordset("SELECT EXPERT_ID, EXPERTISE, ORGANISATION FROM" _
& "T_FP6_EXPERTS ORDER BY EXPERTISE", dbOpenDynaset)

If rst.BOF And rst.EOF Then MsgBox "La tableT_FP6_EXPERTS est vide !!": Exit
Sub

While Not rst2.EOF
rst.FindFirst ("PANEL_ID=" & rst2!EXPERTISE)
If Not rst.NoMatch Then
Do While Not rst.EOF
If rst!PANEL_ID <> rst2!EXPERTISE Then Exit Do
rst.Edit
rst!RAPPORTEUR = rst2!EXPERT_ID
rst.Update
rst.MoveNext
Loop
End If
rst.MoveFirst
rst2.MoveNext
Wend
rst.Close
rst2.Close
End Sub



Bonjour,

C'est pas facile de saisir l'identation dans ton code.
Mais j'ai l'impression que sur la fin, il y a des cas ou tu peux faire deux
rs2.MoveNext de suite sans tester pour le deuxième le EOF. Non ?

Arnaud

"Ado" a écrit dans le message de news:

Bonjour,
J'ai un petit probleme avec mon code :
Sub AllocateExperts()
Dim db As DAO.Database: Set db = CurrentDb
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst = db.OpenRecordset("SELECT PROP_NUM, PANEL_ID, RAPPORTEUR,
EXPERT1,
EXPERT2 FROM T_FP6_PROPOSALS ", dbOpenDynaset)
Set rst2 = db.OpenRecordset("SELECT EXPERT_ID, EXPERTISE, ORGANISATION
FROM
T_FP6_EXPERTS", dbOpenDynaset)

With rst
While rst.EOF = False
1
If rst.Fields(2).Value <> 0 Then
rst.MoveNext
GoTo 1
Else
End If
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
If rst.Fields(1).Value = rst2.Fields(1).Value Then

.Edit
!RAPPORTEUR = rst2.Fields(0).Value
.Update

rst.MoveNext
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
Else
GoTo 1
End If
Wend
End With
End Sub

Il me donne toujours un message que il n'y a plus de record ??
pourtant au début du code il y a la fonction eof pour qu'il se remet au
début, mais il me semble qu'il ne tient pas compte!!

Merci pour votre aide.







Avatar
3stone
Salut,


C'est ton horrible "goto 1" qui fou le bazard...


--
A+
Pierre (3stone) Access MVP
~~~~~~~~~~~~~~~~~~~~~~~
http://users.skynet.be/mpfa
http://users.skynet.be/accesshome



"Ado" a écrit dans le message news:

Bonjour,
J'ai un petit probleme avec mon code :
Sub AllocateExperts()
Dim db As DAO.Database: Set db = CurrentDb
Dim rst As DAO.Recordset
Dim rst2 As DAO.Recordset
Set rst = db.OpenRecordset("SELECT PROP_NUM, PANEL_ID, RAPPORTEUR, EXPERT1,
EXPERT2 FROM T_FP6_PROPOSALS ", dbOpenDynaset)
Set rst2 = db.OpenRecordset("SELECT EXPERT_ID, EXPERTISE, ORGANISATION FROM
T_FP6_EXPERTS", dbOpenDynaset)

With rst
While rst.EOF = False
1
If rst.Fields(2).Value <> 0 Then
rst.MoveNext
GoTo 1
Else
End If
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
If rst.Fields(1).Value = rst2.Fields(1).Value Then

.Edit
!RAPPORTEUR = rst2.Fields(0).Value
.Update

rst.MoveNext
If rst2.EOF = True Then
rst2.MoveFirst
rst2.MoveNext
Else
rst2.MoveNext
End If
Else
GoTo 1
End If
Wend
End With
End Sub

Il me donne toujours un message que il n'y a plus de record ??
pourtant au début du code il y a la fonction eof pour qu'il se remet au
début, mais il me semble qu'il ne tient pas compte!!

Merci pour votre aide.