2013-05-01 34 views
0

我花了一整天試圖找出我怎麼能捕獲特定列中的值以觸發一些計算已經改變了改變。我正在使用C#和MS Access數據庫。如何捕捉值已經在數據庫中使用C#

我在我的數據庫3列:時間,罷工和卷。

我只有在發生的體積變化列,所以我可以觸發計算感興趣。

我看着委託和事件,但我覺得應該有這樣做的更簡單的方法。

你們知道該怎麼做嗎?

非常感謝!

+0

您是否正在檢查一行或任何行上的更改? – Chris 2013-05-01 19:49:08

+0

我需要檢查特定列中每一行是否有變化 – Mike 2013-05-01 19:59:39

+0

變化是否發生在程序控制之外? – 2013-05-01 20:04:02

回答

1

保持表的本地副本中的數組,然後定期比較訪問表給你數組中有一個,然後如果你發現一個變化火了你的功能。

+0

我實際上已經考慮過保留數組中表的本地副本並定期檢查。問題是我需要實時捕獲變化,而不是定期進行......您的意思是什麼引發了我的功能? – Mike 2013-05-01 20:29:41

+1

我的意思是,你可以運行你需要的任何代碼,當你檢測到一個變化。我認爲,因爲訪問是基於文件的數據庫,所以沒有任何事情可以觸發事件。 – Chris 2013-05-01 20:41:55

+0

哦,好的!所以我認爲我只能保存表格的本地副本並定期檢查。你知道我如何定期檢查嗎? – Mike 2013-05-01 22:26:30

1

雖然Access數據庫並不提供真正的觸發功能,你可能會發現一個數據宏有益的,如果您使用的Access 2010或更高版本的工作。你可以添加一個[volChanged]列(是/否,索引(重複OK)),然後創建以下「之前更改」數據宏:

If Updated("vol") Then 
    SetField 
     Name volChanged 
     Value =True 
End If 

一旦宏觀到位,更改了[ vol]字段會將該記錄的[volChanged]標誌更改爲True。在具有兩個記錄,兩者都[volChanged]設置爲False,下面的Excel VBA代碼...

Sub volChangeTest() 
Dim con As ADODB.Connection, rst As ADODB.Recordset, sql As String 
Set con = New ADODB.Connection 
con.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data source=C:\Users\Gord\Desktop\Database1.accdb;" 
Set rst = New ADODB.Recordset 
rst.Open "SELECT COUNT(*) AS n FROM volTable WHERE volChanged", con 
Debug.Print "[volChanged] is True for " & rst(0).Value & " record(s)" 
rst.Close 
sql = "UPDATE volTable SET vol = vol + 1" 
Debug.Print sql 
con.Execute sql 
rst.Open "SELECT COUNT(*) AS n FROM volTable WHERE volChanged", con 
Debug.Print "[volChanged] is True for " & rst(0).Value & " record(s)" 
rst.Close 
Set rst = Nothing 
con.Close 
Set con = Nothing 
End Sub 

一個示例表...產生以下結果:

[volChanged] is True for 0 record(s) 
UPDATE volTable SET vol = vol + 1 
[volChanged] is True for 2 record(s) 

的數據宏本身不能觸發任何外部進程,但因爲[volChanged]字段很小並且被索引,所以可以以最小的開銷頻繁地查找「更新」,當然少於在某個地方維護一個「舊值」列表並使用它來搜索用於逐行更改。

+0

@Mike我可能是錯的,但它聽起來像OP正在編寫一個程序來使用Access數據,而不是直接從Access工作。我同意OP正在尋找的解決方案將需要一些Access端編程,但我不知道在這種情況下這是可能的。如果可能的話,他們仍然會停留在投票而不是事件驅動模型。 – 2013-05-01 22:07:16

+0

@MichaelTodd創建數據宏是唯一需要的Access-side編程。檢查更新將涉及到在我的示例代碼中執行像SELECT COUNT(*)...語句。這可以在任何地方完成,例如C#應用程序或Windows中的計劃任務。是的,他們仍然在進行輪詢,但與沒有數據宏相比,它的成本要低得多,完全由事件驅動的模型根本不適用於ACE後端。 – 2013-05-01 22:14:04

相關問題