2017-03-22 31 views
0

基本的に、私が抱えている問題は、値を細かく変更することです。修正ボタンをクリックするとエラーが表示されず、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 
+0

グリッドにデータを書き込んでいますが、データをグリッドからデータセットに移動していません。また、データセットでAcceptChangesを呼び出す必要はありません。これは、更新の一部として自動的に行われます。個人的には、そのコードをすべて書き込むのではなく、BindingSource経由でグリッドをデータセットにバインドします。次に、データセットを更新し、グリッドを更新します。 – peterG

+0

自分の方法でデータセットを更新するにはどうすればよいですか?私はすでにいくつかのテーブルのために同様のコードを使用して書かれた非常に多くのコードを持っているので、私の授業の期限が近づいています。 – ItsSimplyEddie

+0

このようにしてやってみると、あなたはそれが使用されるべき方法と戦っています。私は、これを授業として提出することは価値があるとは確信していません。 [BindingSourceコンポーネント](https://msdn.microsoft.com/en-us/library/xxxf124e(v = vs.110).aspx)を参照することをお勧めします。EndEditメソッドを使用してデータを移動するテキストボックスからデータセットに変換します。 – peterG

答えて

0

まず、データソースがデータベースの完全なパスであることを確認します。 また、データベースを簡単に更新する方法もあります。それを行うためにUPDATEステートメントを使うことができます。私のパブリッククラスで 私は次のように宣言している:

コードの実際の例えば今
Dim provider As String 
Dim datafile As String 
Dim connString As String 
Dim myconnection As OleDbConnection = New OleDbConnection 

myconnection.open() 
dim variable as string 
variable = "UPDATE tablename SET columnname = value WHERE (enter criteria)" 
Dim cmd as oledbcommand = New oledbcommand(variable, myconnection) 
cmd.ExecuteNonQuery() 
myconnection.close() 

だからあなたのコードのために:私が想定している。この中

Public Sub AmendMember() 
    myconnection.open() 
    variable = "UPDATE dataSetMembers SET MemberID = '" & Form3.tbid.text &"', Forename = '" & Form3.tbfn.Text &"', Surname = '" & Form3.tbsn.Text &"', DOB = '" & Form3.dtpdob.text &"', Section = '" & Form3.tbsr.Text &"', Postcode = '" & Form3.tbpc.Text &"', HomeTel = '" & Form3.tbht.Text &"', MobileTel = '" & Form3.tbmt.Text &"', AddressLine1 = '" & Form3.tbal1.Text &"', AddressLine2 = '" & Form3.tbal2.Text &"', City = '" & Form3.tbc.Text &"', EmailAddress = '" & Form3.tbea.Text &"', P/GForename = '" & Form3.tbpgfn.Text &"', P/GSurname = '" & Form3.tbpgsn.Text &" " 
    Dim cmd as oledbcommand = New oledbcommand(variable, myconnection) 
    cmd.ExecuteNonQuery() 
    myconnection.close() 
End Sub 

あなたの前のコードからあなたのテーブルの名前。

+0

あなたが提供したコードを試しましたが、ボタンをクリックするとエラーが発生します。 System.Data.dllに 'System.Data.OleDb.OleDbException'型の未処理の例外が発生しました。 追加情報:UPDATEステートメントで構文エラーが発生しました。 – ItsSimplyEddie

+0

@ItsSimplyEddie私は、UPDATEステートメントで角括弧を取り除き、それが機能するかどうかを調べることをお勧めします。それはそれと同じくらい簡単かもしれません。そうでない場合は、データベースパスをどのように宣言したかを確認してください。私は私の答えでこれを編集します。 –

+0

こんにちは、私はあなたが言ったようにそれを変更しようとまた、次のように試してみました: – ItsSimplyEddie

関連する問題