如何在Access 2010中迭代表

时间:2013-05-04 11:59:18

标签: ms-access ms-access-2010

我想迭代我的Payment表中的行。用户选择了想要预订的月份和年份,如果这个房子是在今年和月份预订的话,我想查看每个原始。我想比较一下

HouseID == chosenHouseID && BookingMonth == chosenBookingMonth &&     
BookingYear==chosenBookingYear.

如果这是真的,它应弹出消息框,其中包含本月已预订房屋的信息。此外,如果用户选择超过一个月,即numMonths将是3,它应该增加月份的值(这是一个文本)它应该转到下一个值(如果没有下一个值,那么它应该做mod 12)并且做再次检查。也许有必要将BookingMonth的数据类型切换为数字?

但是我希望我清楚自己想做什么。我有使用Java,C,Python和Visual Basic的经验,但我在Access中没有做太多,所以它很混乱。我找不到任何有用的信息如何执行此操作。请就我的问题告诉我。

谢谢

1 个答案:

答案 0 :(得分:0)

是的,你绝对应该将[BookingMonth]存储为数字。从长期来看,将“月”列保持为文本将是令人讨厌的,因为“八月”<“1月”和“12”<“2”。您必须至少进行一定数量的杂耍才能将文本值转换为数值,因此您可以轻松地将它们保存为数字。 (请注意,如果要在报告中使用它们,您始终可以格式化它们作为文本。)

至于您的搜索要求,如果用户提供[chosenBookingYear],[chosenBookingMonth]和[numberOfMonthsToBook],那么您可以使用VBA DateAdd函数安全地派生[endOfBookingYear]和[endOfBookingMonth]对于“明年”的价值......

endOfBookingYear = Year(DateAdd("m", numberOfMonthsToBook - 1, DateSerial(chosenBookingYear, chosenBookingMonth, 1)))

...和...

endOfBookingMonth = Month(DateAdd("m", numberOfMonthsToBook - 1, DateSerial(chosenBookingYear, chosenBookingMonth, 1)))

最后,要在不循环各个行的情况下执行查找,您可以将[BookingYear]和[BookingMonth]连接在一起,使用...创建类似“2013/05”的内容。

BookingYear & "/" & Format(BookingMonth, "00")

...所以你可以创建一个类似这样的SELECT查询:

SELECT * FROM Payment
WHERE HouseID = chosenHouseID AND
    (
        (BookingYear & "/" & Format(BookingMonth, "00"))
            BETWEEN (chosenBookingYear & "/" & Format(chosenBookingMonth, "00"))
                AND (endOfBookingYear & "/" & Format(endOfBookingMonth, "00"))
    )