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

Création d'enregistrements à tort

4 réponses
Avatar
Isabelle ex Isa ;-)
Bonsoir

Qui peut m'éclairer ?

Pourquoi le code ci-dessous, ajoute à tort des enregistrements déjà crées ?

normalement il devrait comparer
le champ idbail de la table Table1
avec
le champ Numéro de la table Locations
et si les données du champ idbail avec les données du champ DateRevision
existe déjà, ne pas le créer à nouveau


Private Sub Commande101_Click()

DoCmd.RunCommand acCmdSaveRecord


Dim rs As Recordset, i As Integer, uDateRevision As Date
Set rs = CurrentDb.OpenRecordset("LOCATIONS")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, DateAdd("yyyy",
-1, rs!DATE_REVISION))
For i = 1 To DateDiff("yyyy", uDateRevision, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DATE_REVISION=#" & Format(DateAdd("yyyy", i, uDateRevision), "mm/dd/
yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('"
& rs!Numéro & "','" & DateAdd("yyyy", i, uDateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close

End Sub


Merci d'avance

Isabelle ex Isa ;-) qui commence à fatiguer

4 réponses

Avatar
3stone
Salut Isa...belle ;-)

"Isabelle ex Isa ;-)"
| Pourquoi le code ci-dessous, ajoute à tort des enregistrements déjà crées ?
|
| normalement il devrait comparer
| le champ idbail de la table Table1
| avec
| le champ Numéro de la table Locations
| et si les données du champ idbail avec les données du champ DateRevision
| existe déjà, ne pas le créer à nouveau
|
|
| Private Sub Commande101_Click()
|
| DoCmd.RunCommand acCmdSaveRecord
|
|
| Dim rs As Recordset, i As Integer, uDateRevision As Date
| Set rs = CurrentDb.OpenRecordset("LOCATIONS")

| rs.MoveLast => Pourquoi parcourir le recodset ?
| rs.MoveFirst => En plus, si vide tu obtiens une jolie erreur ;-)
=> Donc, tu supprimes ces 2 lignes inutiles !


| While Not rs.EOF
| uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, DateAdd("yyyy", -1, rs!DATE_REVISION))


iif(test , réponse si vrai, réponse si faux )

=> ton code ne compile pas !!



--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
3stone
Binamee, le c** ;-(

"3stone"
[...]
|| While Not rs.EOF
|| uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, DateAdd("yyyy", -1, rs!DATE_REVISION))
|
| => ton code ne compile pas !!


Fais comme si je n'avais rien dit ;-)

Je vais aller dormir, moi -:)

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
Eric
Bonsoir ou Bonjour ex Isa, ;-)

Je prends en route et j'ai survolé les longs fils de discussions donc ...

Si dans Table1 le champ se nomme DateRevision alors dans le Dcount il y
a une erreur car tu utilises le champ nommé Date_Revision en critère sur
la table Table1. D'autre part, dans ta requête d'ajout tu transformes
des données de type numérique et date en Texte car tu entoures les
valeurs par des '

De plus, pour éviter les messages, tu peux remplacer le DoCmd.RunSQL par
un CurrentDb.Execute ou alors mettre au debut les warnings à False puis
en fin de procédure les remettre à True

Essaies ceci :
Dim rs As DAO.Recordset, i As Integer, uDateRevision As Date
Set rs = CurrentDb.OpenRecordset("LOCATIONS")
While Not rs.EOF
uDateRevision = IIf(IsNull(rs!date_revision), rs!DU, _
DateAdd("yyyy", -1, rs!date_revision))
For i = 1 To DateDiff("yyyy", uDateRevision, rs!Au) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & _
" AND DATEREVISION=#" & _
Format(DateAdd("yyyy", i, uDateRevision), _
"mm/dd/yyyy") & "#") = 0 Then
CurrentDb.Execute "INSERT INTO Table1(Idbail,DateRevision) VALUES(" & _
rs!Numéro & "," & _
Format(DateAdd("yyyy", i, uDateRevision), _
"#mm/dd/yyyy#") & ")"
'Else
'Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close

Telle que décrite, ta procédure crée toutes les dates de révision des
baux et non pas seulement pour le nouveau bail créé mais toutefois le
test sur le DCount devrait empêcher d'avoir duplication des dates de
révision déjà existantes.

Si ça peut faire avancer le schmilblic ;-) ...

Bonsoir

Qui peut m'éclairer ?

Pourquoi le code ci-dessous, ajoute à tort des enregistrements déjà crées ?

normalement il devrait comparer
le champ idbail de la table Table1
avec
le champ Numéro de la table Locations
et si les données du champ idbail avec les données du champ DateRevision
existe déjà, ne pas le créer à nouveau


Private Sub Commande101_Click()

DoCmd.RunCommand acCmdSaveRecord


Dim rs As Recordset, i As Integer, uDateRevision As Date
Set rs = CurrentDb.OpenRecordset("LOCATIONS")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
uDateRevision = IIf(IsNull(rs!DATE_REVISION), rs!DU, DateAdd("yyyy",
-1, rs!DATE_REVISION))
For i = 1 To DateDiff("yyyy", uDateRevision, rs!AU) - 1
If DCount("*", "Table1", "idbail=" & rs!Numéro & " AND
DATE_REVISION=#" & Format(DateAdd("yyyy", i, uDateRevision), "mm/dd/
yyyy") & "#") = 0 Then
DoCmd.RunSQL "INSERT INTO Table1(Idbail,DateRevision) VALUES('"
& rs!Numéro & "','" & DateAdd("yyyy", i, uDateRevision) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close

End Sub


Merci d'avance

Isabelle ex Isa ;-) qui commence à fatiguer




--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Isabelle ex Isa :-)
Bonjour Eric

Ouf ! cela fonctionne, je ne touche plus à rien

Merci

Mais il va falloir que j'aille aux cours du soir sur VBA

Isabelle ex Isa :-)