我正在使用 VB.Net 编写一个应用程序。我的项目是当我单击 Excel 文件上的单元格并运行宏时,它会将数据从单元格发送到 Access。我的应用程序只显示数据库。
但是我的问题是,当 Access 中的记录发生更改(Access 中的记录更新或插入)时,如何在 VB.Net 应用程序(刷新应用程序)中触发,或者是否有任何事件在 Access 发生变化时执行某些操作改变了吗?
最佳答案
我对 @Jimi 的评论中提到的 FileSystemWatcher()
感到好奇。
所以我编写了一个基本程序,在每次 Access 数据库文件发生更改后更新 DataGridView。我已经测试过它及其工作原理。
澄清:
1.该代码的目的是演示有关 OP 问题的基本原理,并且需要一些改进和模块化。
2.如果您可以使用sql server,SqlDependency是一个更好的解决方案。
Imports System.IO
Imports System.Data.OleDb
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
UpdateDgv()
watch()
End Sub
Private Sub UpdateDgv()
DataGridView1.DataSource = Nothing
DataGridView1.DataSource = GetDatatableFromAccess()
End Sub
Private Sub UpdateDgvThread()
RemoveHandler watcher.Changed, AddressOf OnChanged
DataGridView1.Invoke(New Action(AddressOf UpdateDgv))
AddHandler watcher.Changed, AddressOf OnChanged
End Sub
Public watcher As FileSystemWatcher
Private Sub watch()
watcher = New FileSystemWatcher()
watcher.Path = "c:\Users\john\Desktop\Desktop 01-04-2017\"
watcher.NotifyFilter = NotifyFilters.LastWrite
watcher.Filter = "*.*"
AddHandler watcher.Changed, AddressOf OnChanged
watcher.EnableRaisingEvents = True
End Sub
Private Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Debug.WriteLine("file was changed")
' update datagridview
Dim t1 As New System.Threading.Thread(AddressOf UpdateDgvThread)
t1.Start()
End Sub
Public Function GetDatatableFromAccess() As DataTable
Dim connString As String =
"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\john\Desktop\Desktop 01-04-2017\Database11.accdb"
Dim results As New DataTable()
Using conn As New OleDbConnection(connString)
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM TestTable", conn)
conn.Open()
Dim adapter As New OleDbDataAdapter(cmd)
adapter.Fill(results)
End Using
Return results
End Function
End Class
关于vb.net - Access 更新时 VB.Net 中的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48031698/