나는 약에 대해 궁금 해서요 @ Jimi의 의견에 언급되었습니다.
그래서 나는 액세스 db 파일을 변경할 때마다 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
Access 데이터베이스에는 방법이 없습니다. 데이터베이스를 간헐적으로 폴링하면됩니다. SqlDependency 클래스를 사용하여 SQL Server 데이터베이스에서이 작업을 수행 할 수 있으며 다른 "적절한"데이터베이스는 비슷한 것을 가질 수 있지만 Access 데이터베이스는 단지 파일 일뿐입니다. – jmcilhinney
[FileSystemWatcher()'] (https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher (v = vs.110) .aspx)를 사용하여 액세스 파일이 수정되었습니다. – Jimi
@ 지미 당신의 힌트를 가져 주셔서 감사합니다. 나는 액세스 데이터베이스에서 모든 작업을 수행했으며 SQL 서버 데이터베이스로 변경할 경우 더 많은 시간이 걸릴 것입니다. FileSystemWatcher() 좋은 소리. 그것에 대해 더 자세히 검색하자 :)) – Bruce