2

必要な値を返すselectステートメントがありますが、OSの日付をEnglish(US)からEnglish(UK)に変更すると、nullが返されるようになりました。クエリでデータベースの日付がコンボボックスの日付と同じ値を選択しているため、問題は日付に関係していると思いますが、他に何ができるかわかりません。コンボボックスとデータベースの日付が同じではないように見えますが、コンボボックスの日付は実際にはデータベースから取得され、システムの日付形式を変更するまで正常に値を返してきました。誰かが何ができるか、またシステム日付を変更した後のこの動作の理由を教えてもらえますか?これが私のselectコマンドです:

cmd4.CommandText = _
    "SELECT sum(brought_qtty), recieved_qtty from brought_coffee, centre_weigh where brought_date=#" & _
    dtComb.Text.Trim & "#" & _
    "and crop_year=" & Today.Year & "and brought_date=weigh_date and weigh_centre='" & _
    cenComb.Text.Trim.Substring(0, 2) & "' group by recieved_qtty"`

dtComb.Textはコンボボックスからの日付値であり、brought_dateはデータベースの日付です。この比較に問題がありますwhere brought_date=#" & dtComb.Text.Trimか?vbを使用していて、データベースはアクセスです

4

1 に答える 1

1

この問題を回避するには、適切なデータ型を処理する必要があります。あなたの場合、パラメータを文字列ではなく日付型として渡す/設定する必要があります。したがって、適切なタイプのパラメーター(OleDbParameter)を定義し、それをクエリ(OleDbCommand)に渡します。

いくつかの例はここにあります:http://msdn.microsoft.com/en-US/library/system.data.oledb.oledbparameter (v = vs.90).aspx

このようなもの:

...
cmd4.CommandText = "SELECT sum(brought_qtty), recieved_qtty from brought_coffee, centre_weigh where brought_date = ? and crop_year = ? and brought_date = weigh_date and weigh_centre = ? group by recieved_qtty"

cmd4.Parameters.Add("p1", OleDbType.Date).Value = Convert.ToDateTime(dtComb.Text.Trim())
cmd4.Parameters.Add("p2", OleDbType.Integer).Value = Today.Year
cmd4.Parameters.Add("p3", OleDbType.VarChar).Value = cenComb.Text.Trim.Substring(0, 2)

...

パラメータの名前は重要ではありませんが、それらを割り当てる順序は重要であることに注意してください(SQLの?の順序と一致する必要があります)。

于 2012-05-09T05:19:57.847 に答える