【问题标题】:Access Database data not saving after application close in vb.net在 vb.net 中关闭应用程序后访问数据库数据未保存
【发布时间】:2016-06-28 10:46:05
【问题描述】:

问题 我有一个连接到我的程序的数据库,我知道它连接正确,因为我可以通过其他两种形式访问该数据库。在一种形式中,我将输入的登录详细信息与数据库进行比较,它工作正常,另一种形式的奇怪之处在于,我使用更新语句将新用户添加到表中,并且这些数据在关闭并重新启动应用程序后仍然存在。为了澄清问题是在编辑 dataveiw 中的数据并且单击保存按钮显示为已保存时,此表单上的问题,但是当程序关闭并打开时,此数据不存在。

守则

Imports System.Data
Imports System.Data.OleDb
Imports System.Data.Odbc
Imports System.Data.DataTable

Public Class FrmFinance

Dim provider As String
Dim dataFile As String
Dim connString As String
Dim myConnection As OleDbConnection = New OleDbConnection
Dim ds As DataSet = New DataSet
Dim da As OleDbDataAdapter
Dim tables As DataTableCollection = ds.Tables
Dim varsearch As New BindingSource()
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    'TODO: This line of code loads data into the 'MasterDBDataSet.Table_usr' table. You can move, or remove it, as needed.
    Me.Table_usrTableAdapter.Fill(Me.MasterDBDataSet.Table_usr)

    connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\Student\Documents\Visual Studio 2010\Projects\MasterDB.accdb"
    myConnection.ConnectionString = connString
    da = New OleDbDataAdapter("Select [Username], [Surname], [YearGroup] from Table_usr", myConnection)
    da.Fill(ds, "Table_usr")
    Dim searchveiw As New DataView(tables(0))
    varsearch.DataSource = searchveiw
    DataGridView1.DataSource = searchveiw
    DataGridView1.Refresh()
End Sub
Private Sub ButtSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtSave.Click
    Try
        TableusrBindingSource.EndEdit()
        Table_usrTableAdapter.Update(MasterDBDataSet.Table_usr)
        MessageBox.Show("Data Saved")
    Catch ex As Exception
        MessageBox.Show("Error Saving Data")
    End Try
End Sub

Private Sub ButtFilter_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtFilter.Click
    If Search_username.TextLength > 1 Then
        varsearch.Filter = "[Username] = '" & Search_username.Text & "'"
        DataGridView1.Refresh()
    ElseIf Search_Surname.TextLength > 1 Then
        varsearch.Filter = "[Surname] = '" & Search_Surname.Text & "'"
        DataGridView1.Refresh()
    ElseIf Search_YrGroup.TextLength > 1 Then
        varsearch.Filter = "[YearGroup] = '" & Search_YrGroup.Text & "'"
        DataGridView1.Refresh()
    End If
End Sub
End Class

我包含了整个表格,以防出现我不理解的冲突。当我设置数据源时,我单击“否”以在每次运行时将数据库复制到 bin 中,并且 database.xcd 设置为如果更新但信息在关闭时仍然丢失则复制。非常感谢任何帮助。

【问题讨论】:

  • “另一种形式的奇怪之处在于,我使用更新语句将新用户添加到表中,并且在关闭并重新启动应用程序后此数据仍然存在” - 我'米糊涂。问题是没有被保存(根据您的标题)还是它们正在被保存(根据您的报价)?请edit澄清您的问题。
  • 问题是尽管单击了保存按钮,但重新打开表单时,在此表单的 dataveiw 中编辑的数据仍然不存在。另一条评论是关于在同一程序中添加到数据库的不同表单中的数据是持久的。希望澄清的事情。

标签: vb.net ms-access datagridview oledb


【解决方案1】:

试试这个,

Private Sub Form1_Closing(sender As Object, e As CancelEventArgs) Handles Me.Closing
    Try
        Me.Validate()
        TableusrBindingSource.EndEdit()
        Table_usrTableAdapter.UpdateAll(Me.MasterDBDataSet.Table_usr)
        MessageBox.Show("Data Saved")
    Catch ex As Exception
        MessageBox.Show("Error Saving Data")
    End Try
End Sub

【讨论】:

  • 我无法添加评论,因为我没有足够的代表,但是据我所知,每次重新打开程序时它可能会创建一个新表吗?此外,如果您只是希望在关闭程序时保存它,上面的代码应该可以解决问题。
  • 更新所有不被识别为成员,我也不希望它保存在表单关闭但单击按钮时,就好像用户进行了不需要的更改我希望他们能够退出没有保存。感谢您的帮助。
  • 没关系,就是想知道你用的是不是access数据库,为什么要手动设置呢?为什么不使用访问数据库导入功能,这将为您设置几乎所有内容。让我们试着为你解决这个问题:)
  • 不知道你说的手动设置是什么意思?我是用数据源连接数据库,现在只是用oledb连接编辑数据?
  • 一旦您通过转到“项目/添加数据库”建立了数据源并且您可以在数据源选项卡中看到它,您应该能够简单地将您需要的内容拖放到您的窗口论坛。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-09
  • 2014-02-23
  • 1970-01-01
相关资源
最近更新 更多