2013-06-07 4 views
0

Je travaille avec MS Access 2007.

J'ai une table appelée [tblDonors] liée aux dossiers de l'enfant dans une table appelée [tblReceipts].
J'essaie de définir la valeur d'un nouveau champ booléen (y/n) [tblDonors].[blInactive]. . Je voudrais lancer un script qui passe par tous les enregistrements de [tblDonors] et définir le champ [blInactive]-"True" si est plus que l'an (now())-2

Voici ma requête la dernière année de réception ([tblReceipts].[Date]):Réglage valeur du champ enregistrement parent basé sur la valeur du champ d'enregistrement des enfants maximum

SELECT tblDonors.ID, Année ([tblReceipts]. [date]) AS [Année], tblDonors.Active
DE tblDonors
LEFT JOIN tblReceipts SUR tblDonors.ID = tblReceipts.ID
OÙ (((Année ([tblReceipts]. [Date]))> = Année (Maintenant()) - 2)) COMMANDER PAR Donors.ID;

Cette requête affiche l'enregistrement parent plusieurs fois si le donateur a fait plusieurs dons au cours des deux dernières années, ce qui crée des enregistrements en double dans un rapport.
Comment puis-je parcourir chaque enregistrement de cette requête pour définir tblDonors.Active à TRUE en utilisant VBA? Ce qui suit aide à démontrer l'essentiel de ce que je tente d'accomplir.

Function fnActivity()      'locates active donors 

     For each record in recordset   'Go through each record in the query... 
      record.[Active].Value = True  '...and flag as active member. 
     Next record 

    End Function 

Répondre

1

Il me semble que vous pourriez accomplir cela en réglant [blInactive] à Yes pour tout le monde ...

UPDATE tblDonors SET blInactive = Yes 

... et puis mettre à jour les donateurs actuels comme celui-ci:

UPDATE tblDonors SET blInactive = No 
WHERE ID IN 
    (
     SELECT ID FROM tblReceipts 
     WHERE Year([tblReceipts].[Date]) >= (Year(Now()) - 2) 
    ) 
+0

Cela a fait le charme. Merci d'avoir aidé à résoudre un problème qui a causé beaucoup d'ennuis. –

Questions connexes