0

我想遍历我的付款表中的行。用户选择了想要预订的月份和年份,如果这所房子是在今年和月份预订的,我想检查每个原始的。我想比较一下

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

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

但是我希望我很清楚我想做什么。我有使用 Java、C、Python 和 Visual Basic 的经验,但我在 Access 方面做得不多,所以很混乱。我找不到如何执行此操作的任何有用信息。请就我的问题给我建议。

谢谢

4

1 回答 1

0

是的,您绝对应该将 [BookingMonth] 存储为数字。从长远来看,将“月”列作为文本维护将是一件麻烦事,因为“八月”<“一月”和“12”<“2”。您必须至少进行一定量的杂耍才能将文本值转换为数值,因此让您自己轻松一些,只需将它们保持为数字即可。(请注意,如果您想在报告中使用它们,您始终可以将它们格式化为文本。)

至于您的搜索要求,如果用户提供 [chosenBookingYear]、[chosenBookingMonth] 和 [numberOfMonthsToBook],那么您可以使用 VBADateAdd函数安全地派生 [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"))
    )
于 2013-05-04T13:00:41.473 回答