基本的に、私が抱えている問題は、値を細かく変更することです。修正ボタンをクリックするとエラーが表示されず、DataGridViewが正常に更新されます。ただし、実際にはAccessデータベースを更新していません。意味は、プログラムがクローズされていても、何かが再オープンされた場合、プログラムはデータベースから元の値に戻ります。明らかにそれが更新されていないことを示しています。vb.netからのアクセスデータベースの更新DataGridView
Dim dsConnectionM As OleDb.OleDbConnection
Dim dsConnectionL As OleDb.OleDbConnection
Dim dsConnectionE As OleDb.OleDbConnection
Dim dsDataAdapterM As OleDbDataAdapter
Dim dsDataAdapterL As OleDbDataAdapter
Dim dsDataAdapterE As OleDbDataAdapter
Dim dsDataSetM As DataSet
Dim dsDataSetL As DataSet
Dim dsDataSetE As DataSet
Public Sub dsLoadMembers()
dsConnectionM = New OleDbConnection
dsConnectionM.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data source=DataSourceDB.accdb"
dsDataAdapterM = New OleDbDataAdapter
dsDataAdapterM.SelectCommand = New OleDbCommand
dsDataAdapterM.SelectCommand.Connection = dsConnectionM
dsDataAdapterM.SelectCommand.CommandText = "SELECT * FROM Member"
dsDataAdapterM.SelectCommand.CommandType = CommandType.Text
dsConnectionM.Open()
dsDataSetM = New DataSet
dsDataAdapterM.Fill(dsDataSetM, "dataSetMembers")
dsConnectionM.Close()
Form3.dgdMembers.AutoGenerateColumns = True
Form3.dgdMembers.DataSource = dsDataSetM
Form3.dgdMembers.DataMember = "dataSetMembers"
End Sub
Public Sub AmendMember()
Form3.dgdMembers.Rows(Form3.m).Cells("MemberID").Value = Form3.tbid.Text
Form3.dgdMembers.Rows(Form3.m).Cells("Forename").Value = Form3.tbfn.Text
Form3.dgdMembers.Rows(Form3.m).Cells("Surname").Value = Form3.tbsn.Text
Form3.dgdMembers.Rows(Form3.m).Cells("DOB").Value = Form3.dtpdob.Value
Form3.dgdMembers.Rows(Form3.m).Cells("Section").Value = Form3.tbsr.Text
Form3.dgdMembers.Rows(Form3.m).Cells("Postcode").Value = Form3.tbpc.Text
Form3.dgdMembers.Rows(Form3.m).Cells("HomeTel").Value = Form3.tbht.Text
Form3.dgdMembers.Rows(Form3.m).Cells("MobileTel").Value = Form3.tbmt.Text
Form3.dgdMembers.Rows(Form3.m).Cells("AddressLine1").Value = Form3.tbal1.Text
Form3.dgdMembers.Rows(Form3.m).Cells("AddressLine2").Value = Form3.tbal2.Text
Form3.dgdMembers.Rows(Form3.m).Cells("City").Value = Form3.tbc.Text
Form3.dgdMembers.Rows(Form3.m).Cells("EmailAddress").Value = Form3.tbea.Text
Form3.dgdMembers.Rows(Form3.m).Cells("P/GForename").Value = Form3.tbpgfn.Text
Form3.dgdMembers.Rows(Form3.m).Cells("P/GSurname").Value = Form3.tbpgsn.Text
dsConnectionM.Open()
dsDataAdapterM.Update(dsDataSetM, "dataSetMembers")
dsDataSetM.AcceptChanges()
dsConnectionM.Close()
End Sub
グリッドにデータを書き込んでいますが、データをグリッドからデータセットに移動していません。また、データセットでAcceptChangesを呼び出す必要はありません。これは、更新の一部として自動的に行われます。個人的には、そのコードをすべて書き込むのではなく、BindingSource経由でグリッドをデータセットにバインドします。次に、データセットを更新し、グリッドを更新します。 – peterG
自分の方法でデータセットを更新するにはどうすればよいですか?私はすでにいくつかのテーブルのために同様のコードを使用して書かれた非常に多くのコードを持っているので、私の授業の期限が近づいています。 – ItsSimplyEddie
このようにしてやってみると、あなたはそれが使用されるべき方法と戦っています。私は、これを授業として提出することは価値があるとは確信していません。 [BindingSourceコンポーネント](https://msdn.microsoft.com/en-us/library/xxxf124e(v = vs.110).aspx)を参照することをお勧めします。EndEditメソッドを使用してデータを移動するテキストボックスからデータセットに変換します。 – peterG