2013-05-04 108 views
0

我想遍历我的Payment表中的行。用户选择了哪个月份和哪个年份想要预订,并且如果此房屋是为今年和本月预订的,我希望检查每个原材料。我想比较是否如何迭代Access 2010中的表格

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

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

但是我希望我清楚自己想做什么。我有Java,C,Python和Visual Basic的经验,但是我在Access中没有做太多的工作,所以很困惑。我找不到任何有用的信息如何执行此操作。请在我的问题上提供建议。

谢谢

回答

0

是的,您绝对应该将[BookingMonth]存储为数字。自“八月”<“一月”和“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))) 

菲娜LLY,无需通过个人行循环您可以连接[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")) 
    )