0

Payment テーブルの行を反復処理したいと思います。ユーザーが予約したい月と年を選択しました。この家が今年と月に予約されたかどうかを各生で確認したいと思います。なら比較したい

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

これが true の場合、その家は今月すでに予約済みであるという情報がメッセージ ボックスに表示されます。また、ユーザーが複数の月を選択した場合、つまり numMonths が 3 になる場合、月の値 (テキスト) をインクリメントする必要があり、次の値に移動する必要があります (次の値がない場合は mod 12 を実行する必要があります)。再度チェック。おそらく、BookingMonth のデータ型を数値に切り替える必要があるでしょうか?

でも、やりたいことは明確だったと思います。私は Java、C、Python、および Visual Basic の経験がありますが、Access ではあまり経験がなかったので、かなり混乱しています。この操作を実行する方法に関する有用な情報が見つかりませんでした。私の問題について教えてください。

ありがとうございました

4

1 に答える 1

0

はい、間違いなく [BookingMonth] を数値として保存する必要があります。「8月」<「1月」および「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 に答える