0

.mdbデータベースを使用する古いソフトウェアに取り組んでいます。

私はデータベースへの接続を設定することに成功しました、そして私はこのような事前にプログラムされたクエリに関してはSQLクエリをうまく実行することができます:

SELECT COUNT(*) AS test FROM shifts WHERE EmpId = '2' AND DateOpen <= '3/28/2007'

次に、ユーザーの選択に応じて2を式に置き換えました。

Employees(employe.SelectedIndex)

これもうまくいきました。

さて、日付を置き換えようとすると、startDate.Value.ToShortDateString多くの変換の問題に直面し始め、ついにうまくいくものができたので、where句は次のようになりました:

WHERE EmpId = '" & Employees(employe.SelectedIndex) & "' AND DateDiff('d', DateOpen, '" & endDate.Value.ToShortDateString & "') <= 0

上記のクエリと同じ日付を選択しました。クエリは問題なく実行されますが、驚くべきことにnullの結果が得られました。これは、値が既に存在するクエリが2のカウントを返したため、意味がありません。

いくつかのデバッグ出力を使用して、クエリが適切に生成されていることを確認し、日付を選択すると上記と同じクエリを取得しました。

なぜこれが機能しないのか、またはそれを行うための適切な方法についてのヒントがある場合は、すべての入力をいただければ幸いです。

前もって感謝します

4

2 に答える 2

0

私はクエリで BETWEEN を使用することになりました.paramsを使用すると、クエリは魅力的に機能します!

WHERE (DateOpen BETWEEN @DStart AND @DEnd)
于 2012-07-23T00:10:07.507 に答える
0

MS Access と VBA で日付を扱う場合は、フォーマットされた文字列を使用しないことをお勧めします。

ヒント: VBA および MS Access は日付を double 値として格納し、整数部分は日付 (1900 年 1 月 1 日からの日数) を表し、小数部分は時刻 (1 日の端数) を表します。例: 2012 年 6 月 20 日 05:57 は、41080.2408 という数値として保存されます。

フォーマットされた文字列を使用する代わりに、数値のペアを比較するのと同じように、double 値を使用して日付を比較できます。値が「日付/時刻」タイプのフィールドに格納されている場合は、 を使用CDbl()して日付を double 値に変換し、それを別の double と比較できます。

これは私にとってはうまくいきました。これがお役に立てば幸いです。

于 2012-06-20T10:51:52.900 に答える