2016-05-24 10 views
1

ボタンを押したときにAccessデータベースから選択されたデータを表示しようとしましたが、VB.NET:アクセスデータベースから選択したデータをデータグリッドビューに表示できません

Dim third_da As OleDb.OleDbDataAdapter 
Dim third_ds As New DataSet 


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 


    con.Open() 
    Dim cb_two As New OleDb.OleDbCommandBuilder(third_da) 

    query_three = "SELECT emp_timing.emp_code, emp_timing.day, emp_timing.travel_time, emp_timing.travel_dest,emp_timing.emp_timein,emp_timing.emp_timeout, emp_timing.emp_hours, emp_timing.emp_mins " & _ 
     "FROM emp_timing WHERE (((emp_timing.emp_code)=" & empcode & ") AND ((emp_timing.day) Like '??/" & ComboBox1.Text & "/20" & TextBox9.Text & "'))" 

    ' "WHERE (((emp_timing.emp_code)=22) AND ((emp_timing.day) Like '??/05/2016'))" 

    third_da = New OleDb.OleDbDataAdapter(query_three, con) 

    third_da.Fill(third_ds, "ets") 


    DataGridView1.DataSource = third_ds.Tables("ets") 

    con.Close() 
    Dim view As New DataView(third_ds.Tables(0)) 
    source1.DataSource = view 
    DataGridView1.DataSource = view 

    DataGridView1.ReadOnly = True 
    DataGridView1.CancelEdit() 

End Sub 

ありがとうございました!

+0

あなたが設定しましたブレークポイントとステップスルー?また、パラメータを使用してOption Strictをオンにします。 – Codexer

+0

クエリがデータを取得するかどうかを確認しますか? –

+0

あなたのコードは、SQLインジェクション[詳細については、bobby-tables.comをチェック](http://bobby-tables.com)に対して脆弱です。これを防ぐためにパラメータ化クエリを使用してください。あなたはデバッグし、正確に何がうまくいかないかチェックしますか?データベースは接続されていますか? SQLは正しく生成されていますか?生成されたSQLはAccessで正しく実行されていますか? – Spidey

答えて

-1

あなたはこのようなクエリでemp_timing.dayフィールドのあなたの状態を変更することができます。

(Month(emp_timing.day) = & ComboBox1.Text & 
        and Year(emp_timing.day) = "20" & TextBox9.Text & ") 

をしかし、私はこのように、SQLインジェクションを防ぐためにパラメータを使用することができアドバイス:

query_three = "SELECT emp_timing.emp_code, emp_timing.day, emp_timing.travel_time, emp_timing.travel_dest,emp_timing.emp_timein,emp_timing.emp_timeout, emp_timing.emp_hours, emp_timing.emp_mins " & 
"FROM emp_timing WHERE (((emp_timing.emp_code)= @empcode) AND ((emp_timing.day) BETWEEN @startDate AND @endDate))" 

Dim startDate As New DateTime("20" & TextBox9.Text, ComboBox1.Text, 1) 
Dim endDate As DateTime = startDate.AddMonths(1).AddDays(-1) 

Dim cmd As New OleDbCommand(query_three, con) 
cmd.Parameters.AddWithValue("@empcode", empcode) 
cmd.Parameters.AddWithValue("@startDate", startDate.ToString("#yyyy/MM/dd#")) 
cmd.Parameters.AddWithValue("@endDate", endDate.ToString("#yyyy/MM/dd#")) 
third_da = New OleDb.OleDbDataAdapter(cmd) 
+0

ありがとうそれは最終的に働いた兄弟:)ここではクエリです: '" SELECT * FROM emp_timing WHERE(((emp_timing.emp_code)= "&empcode&")AND(月(emp_timing.day)= "&ComboBox1.Text&"と –

+0

「月(emp_timing.day)」とその年を「Year(emp_timing.day)= 20 "&TextBox9.Text&」))"で説明してください。 ' –

+0

年月を取得して年の日付フィールドを取得し、コンボボックスとテキストボックスの値と比較します。たとえば、月の日付が05/2016であるすべてのレコードを取得したいからです。 –

関連する問題