2016-07-13 10 views
0

これはこれまでのコードです... 私は2つのDateTimePickersを持っており、ユーザーはその週の最初の曜日と最後の曜日を選択します。一度これらの2つを選択すると、毎日働いている時間を計算して追加して、選択した日数の時間を表示できます。私のVBプログラムへのアクセスDBクエリからデータを取得できません

My Workテーブルには、idEmployee、Date、ArrivalTime、DepartureTime、およびその日に作業した時間を表示する計算列(Hrs_worked)が含まれています。

プログラムを実行すると、「DBNull型から '文字列型が無効です」または「条件式のデータが一致しません」というメッセージが表示されます。 値は文字列値にdatetimepickers? Accessデータベース

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click 

    Dim provider As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source =" 
    Dim dataFile As String = "E:\SIDB.accdb" 
    Dim connString As String = provider & dataFile 
    Dim myConnection As OleDbConnection 
    Dim cmd As OleDbCommand 

    Dim qHrsWorked As String = "SELECT SUM(Hrs_worked) FROM Work WHERE IdEmployee = " & idEmptxt.Text & " AND Date >= " & firstDayDTP.Value & " AND Date <= " & lastDayDTP.Value & "" 

    myConnection = New OleDbConnection(connString) 
    Try 
     myConnection.Open() 
     cmd = New OleDbCommand(qHrsWorked, myConnection) 
     Dim reader As OleDbDataReader = cmd.ExecuteReader() 

     While reader.Read 
      hrsWorkedtxt.Text = reader.Item(0) 

     End While 
     reader.Close() 
     cmd.Dispose() 
     myConnection.Close() 

    Catch ex As Exception 
     MessageBox.Show(ex.Message) 
    End Try 


End Sub 
+0

がどの行であなたが例外を得るのですか? – Steve

+0

データの不一致は、SQLパラメータを使用していないためです。期間。クエリが渡されたレコードがない場合、DbNull変換エラーが発生する可能性があります。これは、SQLパラメータを使用しないために不正な形式になる可能性があります。また、あなたのアプリがリソースを漏らしています。 SQLパラメータを使用します。 – Plutonix

答えて

0

SQLでは、日付値のためにフォーマットされた文字列表現を使用する必要があります。

Dim qHrsWorked As String = "SELECT SUM(Hrs_worked) FROM Work WHERE IdEmployee = " & idEmptxt.Text & " AND Date >= #" & firstDayDTP.Value.ToString("yyyy'/'MM'/'dd") & "# AND Date <= #" & lastDayDTP.Value.ToString("yyyy'/'MM'/'dd") & "#" 
+0

非常にありがとう –

0

でのVisual Basic Expressの2010に取り組んで

イム私はあなたのためのdatepickers Textbox.Textを使用しているため、これがあると思います。コントロールにフォーカスがあるときにのみ、そのプロパティを使用できます。それらを.Valueに置き換えてみてください。

+0

.Valueに変更されましたが、エラーメッセージに「IdEmployee = 1 AND Date> = 02/07/2016 05:06:37 pmとDate> = 08/07/2016 05:06:37 pm '。 " –

1

私は何年にも渡ってアクセスクエリを書いていないし、試してみる必要もありませんが、クエリのDateTime値がハッシュマーク(#)で囲まれている必要があります。

Dim qHrsWorked As String = _ 
    "SELECT SUM(Hrs_worked) FROM Work WHERE IdEmployee = " & idEmptxt.Text & _ 
    " AND Date >= #" & firstDayDTP.Value & "# AND Date <= #" & LastDayDTP.Value & "#" 
+0

あなたは正しいです、私はそれを完全に忘れました。 – KyloRen

関連する問題