2

バックエンドとしてvb.netとmsaccess2003を使用しています。以下に示すSQLクエリを使用していると、結果にレコードが表示されません。現在の日付よりも低い(または前の)日付のレコードを検索しようとしています。

Dim Sql, CurrentDate as String

Dim TrDate as Date

Dim DataVal As Integer

TrDate=DateTime.Now

CurrentDate=Format(TrDate, "dd/MM/yyyy hh:mm:ss tt")

Sql="Select count(*) from Table1 where InvDate<=#" & CurrentDate & "#"

IF DBConOpen()=True

        cmdOledb.CommandText = sql
         cmdOledb.CommandType = CommandType.Text
         cmdOledb.Connection = ConOledb
         DataVal = cmdOledb.ExecuteScalar
         msgbox(DataVal)

End IF

たとえば、現在の日付が01/09/2012または02/09/2012または.. 12/09/2012で、データベースの日付が01/09/2012または02/09/2012または..12/09/の場合2012年。それぞれのレコード数を取得する必要があります。しかし、この場合、imは0レコードを取得しています。

しかし、私の現在の日付が2012年1月9日または2012年2月9日または.. 2012年9月12日で、データベースの日付が2012年8月20日または2012年6月15日または..2012年5月30日である場合。正しいレコード数を取得しています。

MSAccessテーブルで定義した日付形式は「一般日付」です。誰かが何が悪いのかを見つけることができますか?

4

2 に答える 2

1

以下を使用する必要があります。

CurrentDate=Format(TrDate, "yyyy/MM/dd hh:mm:ss tt")

アクセスには明確な日付が必要です。

時間要素も削除したい場合があります。

于 2012-09-04T20:23:50.563 に答える
1

クエリを送信する前に Dot.Net で日付/時刻の値を決定する必要がない限り、Access db エンジンのNow()機能を利用できます。

Sql="Select count(*) from Table1 where InvDate<=Now()"

このアプローチにより、書式設定と区切り記号に関する問題が回避されます。

現在時刻のない日付だけが必要な場合は、Date()代わりに を使用しNow()ます。(実際にDate()は、時間コンポーネントとして真夜中を返します。)

于 2012-09-05T05:40:55.710 に答える