2012-05-08 5 views
2

OSの日付を英語(イギリス)から英語(イギリス)に変更したときにnullを返すようになりました。私は、データベースからの日付がコンボボックス内の日付と同じである値を選択しているので、問題は日付に関係していると信じていますが、他に何ができるのか分かりません。コンボボックスの日付とデータベースの日付が同じではなく、コンボボックスの日付が実際にデータベースから取得され、システムの日付形式を変更するまで値が正常に返されているように見えます。誰かが何ができるのか、なぜシステムの日付を変更した後にこの現象が起こるのかを誰かに伝えることはできますここに私の選択コマンドです:オペレーティングシステムの日付を変更した後にdbにアクセスするためにvbでクエリが返される

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を使用していてデータベースにアクセスしています

答えて

1

この問題を回避するには、適切なデータ型を処理する必要があります。あなたの場合、文字列ではなく、Date型としてパラメータを渡す/設定する必要があります。したがって、適切な型(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の?の順番)。

+0

ありがとうございます@ターマン。パラメータをデータ型として設定する際のコードの例を挙げてください。私は前にそれをしていない – ken

+0

ありがとうございました。今はとてもうまくいっています。あなたが言ったようなパラメータ化されたクエリを使用し、データ型を設定しましたが、今はすべてがクールです – ken

+0

うんざりして聞いてうれしいです! –

関連する問題