2016-03-20 18 views
0

私は今この問題に悩まされています。フォーム上のデータグリッドビューからアクセスデータベースのデータを更新/挿入しようとしています。 私は私の主キーに合うようにマスクしたmaskedtextboxを持っています。マスクが自動的に完了すると、データベースから添付の画像に示すようにテキストボックスとデータグリッドビューにレコードが読み込まれます。 は、私はこのコードDatagridviewからAccessデータベースへの保存と更新

If STHN_ID.MaskCompleted = True Then 
Try 
    MyConn = New OleDbConnection 
    MyConn.ConnectionString = connString 
        myConnection.ConnectionString = connString 
    myConnection.Open() 
    Dim str As String 
    str = "SELECT * FROM PersonalData WHERE (STHN_ID='" & STHN_ID.Text & "')" 
    Dim STHNCmd As OleDbCommand = New OleDbCommand(str, myConnection) 
    dr = STHNCmd.ExecuteReader() 
    If dr.HasRows = -1 Then 
     While dr.Read 
      Fname.Text = dr("Fname").ToString 
      LName.Text = dr("Lname").ToString 
      Oname.Text = dr("Onames").ToString 

      DOB.Text = dr("DOB") 

      Title.Text = dr("Title").ToString 
      salaryType.Text = dr("SalaryType").ToString 
      StaffID.Text = dr("StaffNo").ToString 
      SSN.Text = dr("SSN").ToString 


      DateEngaged.Text = dr("DateEngaged") 


      Category.Text = dr("Category").ToString 
      Rank.Text = dr("Rank").ToString 
      StaffDept.Text = dr("StaffDept").ToString 
      PersonalData.PassportPic.BackgroundImageLayout = ImageLayout.Stretch 
      Dim bits As Byte() = CType(dr("PassportPic"), Byte()) 
      Dim memo As New MemoryStream(bits) 
      Dim myimg As New Bitmap(memo) 
      PassportPic.Image = myimg 

      'da = New OleDbDataAdapter("Select [DependantFname],[DependantLname],[DependantOname],[DependantDOB],[Relationship] FROM [DependantData] WHERE [STHN_ID]='" & STHN_ID.Text & "'", MyConn) 'Change items to your database name 
      'da.Fill(ds) 
      'Dim view As New DataView(tables(0)) 
      'source1.DataSource = view 
      'DependantView.DataSource = view 

      Dim adapter As New OleDbDataAdapter() 
      adapter.SelectCommand = New OleDbCommand("Select [DependantFname],[DependantLname],[DependantOname],[DependantDOB],[Relationship] FROM [DependantData] WHERE [STHN_ID]='" & STHN_ID.Text & "'", MyConn) 
      Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(adapter) 
      'connection.Open() 
      Dim myTable As DataTable = New DataTable 
      adapter.Fill(myTable) 
      DependantView.DataSource = myTable 


     End While 
     myConnection.Close() 


    Else 
     MessageBox.Show("No Records for the STHN_ID entered", "", MessageBoxButtons.OK, MessageBoxIcon.Information) 
     myConnection.Close() 
     STHN_ID.Focus() 
    End If 
Catch ex As Exception 
    MsgBox(ex.Message) 
    myConnection.Close() 
End Try 

と私の頭痛は今/更新レコードがmaskedtextboxに入力されたSTHN_IDに基づいたDataGridViewで編集/追加されたときにデータベースに挿入することであるということでした。どんな助けでも本当に感謝しています。

sample

+0

ここで、更新のコードはありますか?そのコードはその質問とは関係がないようです。クエリの文字列連結ではなく、SQLパラメータに関する義務的な警告。 – Plutonix

+0

このコードは、ロードするためにdatagridviewをどのように表示するかを示しています。 更新/挿入コードが何か不安です。 ボタンの下に更新コードを入れたい場合は、 –

+0

サンプル画像を追加してください。私のためにそれをチェックしてください。 –

答えて

0

これはどのように完了したのですか。これは、データベースと負荷のDataGridViewから読み取るためのコードである完成したマスクとmaskedtextbox上

...........

Try 
      MyConn = New OleDbConnection 
      MyConn.ConnectionString = connString 

      con = New OleDbConnection 
      con.ConnectionString = ("Provider=Microsoft.ACE.OLEDB.12.0;Data Source = C:\Users\PRINCE\Documents\STHNDatabase.accdb") 
      con.Open() 

      myConnection.ConnectionString = connString 
      myConnection.Open() 
      Dim str As String 
      str = "SELECT * FROM PersonalData WHERE (STHN_ID='" & STHN_ID.Text & "')" 
      Dim STHNCmd As OleDbCommand = New OleDbCommand(str, myConnection) 
      dr = STHNCmd.ExecuteReader() 
      If dr.HasRows = -1 Then 
       While dr.Read 
        Fname.Text = dr("Fname").ToString 
        LName.Text = dr("Lname").ToString 
        Oname.Text = dr("Onames").ToString 

        DOB.Text = dr("DOB") 

        Title.Text = dr("Title").ToString 
        salaryType.Text = dr("SalaryType").ToString 
        StaffID.Text = dr("StaffNo").ToString 
        SSN.Text = dr("SSN").ToString 
        DateEngaged.Text = dr("DateEngaged") 
        Category.Text = dr("Category").ToString 
        Rank.Text = dr("Rank").ToString 
        StaffDept.Text = dr("StaffDept").ToString 
        PersonalData.PassportPic.BackgroundImageLayout = ImageLayout.Stretch 
        Dim bits As Byte() = CType(dr("PassportPic"), Byte()) 
        Dim memo As New MemoryStream(bits) 
        Dim myimg As New Bitmap(memo) 
        PassportPic.Image = myimg 


        Dim connection As New OleDbConnection 
        connection.ConnectionString = connString 


        adapt = New OleDbDataAdapter("Select [DependentID],[DependantFname],[DependantLname],[DependantOname],[DependantDOB],[Relationship],[STHN_ID] FROM [DependantData] WHERE [STHN_ID]='" & STHN_ID.Text & "'", con) 
        ds = New DataSet 
        adapt.Fill(ds, "DependantData") 
        DependantView.DataSource = ds.Tables(0) 

       End While 
       myConnection.Close() 
      Else 
       MessageBox.Show("No Records for the STHN_ID entered", "", MessageBoxButtons.OK, MessageBoxIcon.Information) 
       myConnection.Close() 
       STHN_ID.Focus() 
      End If 
     Catch ex As Exception 
      MsgBox(ex.Message) 
      myConnection.Close() 
     End Try 

とSaveButtonに、これはコードですクリックしては... ..

Private Sub SaveBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SaveBtn.Click 
    Try 
     builder = New OleDbCommandBuilder(adapt) 
     adapt.Update(ds, "DependantData") 
     MsgBox("Updated Successfully") 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 
End Sub 

もう一度ありがとう。本当にありがたいです

+0

良いですが、今は少し時間を割いて[パラメータ化されたクエリ]を書く方法を学んでください(http://blog.codinghorror.com/give-me-parameterized-sql-or-give-me-death/ )あなたのコードは非常に危険で弱いです。例えば、STHN_IDテキストボックスに入力したものに一重引用符を入れてみてください – Steve

関連する問題