Question

I am working with MS Access 2007.

I have a table called [tblDonors] linked to child records in a table called [tblReceipts].
I am trying to set the value of a new Boolean(y/n) field [tblDonors].[blInactive]. I would like to run a script which goes through every record in [tblDonors] and set the [blInactive] field to "True" if the most recent receipt year([tblReceipts].[Date]) is older than year(now())-2.

Here is my query:

SELECT tblDonors.ID, Year([tblReceipts].[Date]) AS [Year], tblDonors.Active
FROM tblDonors
LEFT JOIN tblReceipts ON tblDonors.ID = tblReceipts.ID
WHERE (((Year([tblReceipts].[Date]))>=Year(Now())-2))
ORDER BY Donors.ID;

This query shows the parent record multiple times if the donor has donated more than once within the past two years, which creates duplicate records in a report.
How can I go through each record of this query to set tblDonors.Active to TRUE using VBA? The following helps demonstrate the gist of what I am attempting to accomplish.

    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
Était-ce utile?

La solution

It seems to me that you could accomplish that by setting [blInactive] to Yes for everyone...

UPDATE tblDonors SET blInactive = Yes

...and then update the current donors like this:

UPDATE tblDonors SET blInactive = No
WHERE ID IN 
    (
        SELECT ID FROM tblReceipts 
        WHERE Year([tblReceipts].[Date]) >= (Year(Now()) - 2)
    )
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top