OVH Cloud OVH Cloud

Requête ajout avec création enregistrements

16 réponses
Avatar
Isa
Bonjour

A votre avis, est-ce possible de faire ceci

soit une table avec id nom nom datedebut datefin etc...
exemple
idtoto toto 01/03/2005 28/02/2008
idtata tata 01/05/2006 30/04/2015

soit une table suivi avec
idnom daterevision montant enregistrementnumero etc....

Est-il possible de cr=E9er une requ=EAte ajout qui viendrait alimenter la
table "suivi" avec les =E9l=E9ments suivants
idtoto 01/03/2006 (date + 1 an)
idtoto 01/03/2007 (date + 2an)

idtata 01/05/2007 (date +1 an)
idtata 01/05/2008 (date +2 an)
idtata 01/05/2009 (date +3 an)
idtata 01/05/2010 (date +4 an)
idtata 01/05/2011 (date +5 an)
idtata 01/05/2012 (date +6 an)
idtata 01/05/2013 (date +7 an)
idtata 01/05/2014 (date +8 an)

sachant que pour toto le contrat dure 3 ans donc 2 r=E9visions =E0 faire =
=E0
la date anniversaire
sachant que pour tata le contrat dure 9 ans donc 8 r=E9visions =E0 faire =
=E0
la date anniversaire

Merci d'avance

6 réponses

1 2
Avatar
Thierry (ze Titi)
Bonjour Isa !

A tester:

Dim rs as RecordSet, i As Integer
set rs=Currentdb.OpenRecordset("laTableOrigine")
rs.MoveLast
rs.MoveFirst
While not rs.EOF
For i=1 To DateDiff("yyyy",rs!datedebut,rs!datefin)-1
If DCount("*","Suivi","idnom='" & rs!idnom & "' AND Daterevision=#" & Format(DateAdd("yyyy",i,rs!datedebut),"mm/dd/yyyy") & "#")=0 Then
DoCmd.RunSQL "INSERT INTO suivi(idnom,daterevision) VALUES('" & rs!idnom & "','" & DateAdd("yyyy",i,rs!datedebut) & "')"
Else
Debug.Print "Enregistrement déjà ajouté"
End If
Next
rs.MoveNext
Wend
rs.Close



En ce jour mémorable du mercredi 07/11/2007, tu as émis l'idée suivante:
On 7 nov, 09:44, Isa wrote:
Bonjour Thierry

Génial !! Ton code, il fonctionne à merveille sur Access 97

Pas eu le courage de travailler hier soir (fatiguée de mon week-end =>
j'a passé mon week-end sur Access)

Bon, petite question :
jJe pense lors de la création d'une nouvelle fiche dans la table
d'origine, insérer un bouton qui valide l'enregistrement et effectue
le code (ajout des enregistrements dans la table suivi)
N'y a t-il pas un risque de doublons ? ce qui bien sûr ne doit surtout
pas se faire; en principe non ?
mais supposons, une erreur lors de la prise en charge dans la table
d'origine, l'utilisateur va aller modifier les dates de début ou de
fin par exemple, puis en cliquant sur le bouton pour valider, je
crains double ajout dans la table suivi

Merci encore


Bon, je viens de tester en ajoutant un nouvel enregistrement dans la
table d'origine, puis en utilisant le code, il a à nouveau créer des
enregistrements dans la table suivi pour tous les enregistrements de
la table d'origine (donc tout en double + les enregistrements corrects
pour le dernier enregistrement effectué dans la table d'origine), donc
ce n'est pas bon, il aurait dû comparer puis effectuer l'ajout
uniquement pour le nouvel enregistrement
Dommage

A moins qu'il y est une solution facile ;-)


--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info


Avatar
Isa
Thierry,

C'est bien dommage cela ne fonctionne pas

Type de données incompatibles
If DCount("*", "Table1", "idbail='" & rs!Numéro & "' AND
DateRevision=#" & Format(DateAdd("yyyy", i, rs!DU), "mm/dd/yyyy") &
"#") = 0 Then

J'ai remplacé le code par mes noms de champs, j'ai peut-être glissé
Soit table LOCATIONS avec les champs
Numéro
DU
AU
...

Soit Table1 avec les champs
Idbail
DateRevision
...

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

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

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info
Avatar
Isa
On 7 nov, 11:25, Thierry (ze Titi)
wrote:
Peut-être mieux comme ça ?


Tout à fait

Par contre, j'ai voulu tester pour voir le message "Enregistrement
déjà ajouté" pas trouvé d'exemple ou le message ne s'affiche pas

Maintenant, il va falloir que je regarde à quel endroit placer ce code
J'avais crée un bouton Valider avec la procédure sur clic, lors de la
saisie d'un nouveau bail mais le code n'est pas pris en charge, je
dois fermer le formulaire, l'ouvrir à nouveau, appuyer à nouveau sur
le bouton Valider pour que le code fonctionne et que les données
alimentent ma table1

Et dire que les utilisateurs n'imaginent pas le temps que l'on peut
passer pour créer un formulaire qui leur facilite le travail !

Avatar
Thierry (ze Titi)
Par contre, j'ai voulu tester pour voir le message "Enregistrement
déjà ajouté" pas trouvé d'exemple ou le message ne s'affiche pas
Ca s'affiche dans le fenêtre de debogage dans l'éditeur VBA. Tu peux

éventuellement mettre un MsgBox à la place du Debug.Print mais il te
faudra gérer ça correctement sinon tu n'as pas fini de cliquer sur OK
pour fermer la boîte de dialogue... ;-)

Maintenant, il va falloir que je regarde à quel endroit placer ce code
J'avais crée un bouton Valider avec la procédure sur clic, lors de la
saisie d'un nouveau bail mais le code n'est pas pris en charge, je
dois fermer le formulaire, l'ouvrir à nouveau, appuyer à nouveau sur
le bouton Valider pour que le code fonctionne et que les données
alimentent ma table1
Me.Requery

avant le code pourrait peut-être empêcher ce désagrément.

--
Cordialement,
Thierry

Tout pour réussir avec Access :
http://www.mpfa.info

Avatar
Isa
On 7 nov, 12:06, Isa wrote:
On 7 nov, 11:25, Thierry (ze Titi)
wrote:

Peut-être mieux comme ça ?


Tout à fait

Par contre, j'ai voulu tester pour voir le message "Enregistrement
déjà ajouté" pas trouvé d'exemple ou le message ne s'affiche pas

Maintenant, il va falloir que je regarde à quel endroit placer ce code
J'avais crée un bouton Valider avec la procédure sur clic, lors de la
saisie d'un nouveau bail mais le code n'est pas pris en charge, je
dois fermer le formulaire, l'ouvrir à nouveau, appuyer à nouveau sur
le bouton Valider pour que le code fonctionne et que les données
alimentent ma table1

Et dire que les utilisateurs n'imaginent pas le temps que l'on peut
passer pour créer un formulaire qui leur facilite le travail !


J'ai trouvé toute seule comme une grande !

Il suffisait d'ajouter
DoCmd.RunCommand acCmdSaveRecord

Hein oui ?


1 2