VBA連接access數(shù)據(jù)庫開發(fā)軟件(vba 連接access數(shù)據(jù)庫)
VBA連接access數(shù)據(jù)庫開發(fā)小軟件
雖然VBA(包括VB)已不再流行,但是在某些場合還是比較方便的,尤其對非編程專業(yè)人員。靈活使用VBA,可以很十分方便的處理excel,access數(shù)據(jù),提高工作效率,避免出現(xiàn)錯誤。個人認為VBA的最大的優(yōu)點就是嵌套在office中,無需創(chuàng)建額外的編程環(huán)境,另外語法簡單,窗體的構(gòu)建也很容易上手。
在辦公場所,往往因為保密的考慮,辦公電腦只通過內(nèi)部局域網(wǎng)互聯(lián),而不與外部互聯(lián)網(wǎng)通訊。對于小型團隊(十幾到幾十人)而言,通過excel access的方式管理一些信息,相當方便,快捷又經(jīng)濟。只要有了想法(比如科室問題跟蹤系統(tǒng)),一天兩天就可以做出來一個小系統(tǒng),可以極大提高工作效率,還能避免找IT人員開發(fā)專業(yè)的軟件。
下面簡單舉例,用excel VBA窗體創(chuàng)建前臺,用access數(shù)據(jù)庫管理后臺數(shù)據(jù)的方式,創(chuàng)建一個簡單的小系統(tǒng)。把access數(shù)據(jù)庫設置為共享,在局域網(wǎng)內(nèi),其他員工均可以通過excel VBA窗體前臺訪問,查詢數(shù)據(jù)庫和更新數(shù)據(jù)。
比如對四線制熱電阻校驗信息的管理,對于四線制的熱電阻的校驗,需要檢查ABCD四根線兩兩之間的電阻值,也需要測量對地的絕緣值,依此判斷該熱電阻的特性是否下降。然后統(tǒng)計同類型的歷史數(shù)據(jù),就可以判斷該類型設備的使用壽命,據(jù)此制定或優(yōu)化更換策略。
前面的文章已經(jīng)說了如何創(chuàng)建窗體,本文重點講VBA如何與access連接,動態(tài)管理數(shù)據(jù)。主要的界面如下:
錄入檢驗信息窗體
錄入檢驗數(shù)據(jù)窗體
listview顯示檢驗數(shù)據(jù)
雙擊listview中的數(shù)據(jù),顯示單個熱電阻的檢驗數(shù)據(jù)。
VBA與access連接的方法-查詢:
‘get_info函數(shù)用于連接access數(shù)據(jù)庫并查詢,通過參數(shù)傳遞sql查詢語句,通過參數(shù)rst返回查詢結(jié)果。
Function get_info(ByVal sql As String, ByVal rst As ADODB.Recordset)
Dim cnn As New ADODB.Connection
'stpath = ThisWorkbook.Path & "mt.accdb" ‘數(shù)據(jù)庫mt.accdb放在本地電腦
stpath = " 192.168.1.1mt.accdb" ‘數(shù)據(jù)庫mt.accdb放在共享地址
cnn.Open "provider=microsoft.ace.oledb.12.0;data source=" & stpath & ""
rst.Open sql, cnn, adOpenStatic, adLockOptimistic
If rst.RecordCount < 1 Then
MsgBox "no information for your search"
Exit Function
End If
End Function
‘雙擊listview數(shù)據(jù),根據(jù)主鍵查詢access數(shù)據(jù)庫,并查詢結(jié)果顯示到窗體UserForm9。
Private Sub UserForm_Initialize()
Dim rst As New ADODB.Recordset ‘創(chuàng)建新的查詢結(jié)果集
sql = "select * from mt where id like'%" & UserForm1.mt_number & "%'" ‘根據(jù)listview的數(shù)據(jù)主鍵UserForm1.mt_number,動態(tài)創(chuàng)建sql語句。這里需要注意sql語句的結(jié)構(gòu),比較容易出錯。
Call get_info(sql, rst) ‘調(diào)用函數(shù)get_info,用sql語句查詢,并把結(jié)果反饋到rst中。
‘下面把查詢結(jié)果顯示到窗體中。
UserForm9.ecs.Caption = rst.Fields(1).Value
UserForm9.calibrator.Caption = rst.Fields(2).Value
UserForm9.cali_date.Caption = rst.Fields(3).Value
UserForm9.package_number.Caption = rst.Fields(4).Value
UserForm9.ab.Text = rst.Fields(5).Value
UserForm9.ac.Text = rst.Fields(6).Value
UserForm9.ad.Text = rst.Fields(7).Value
UserForm9.bc.Value = rst.Fields(8).Value
UserForm9.bd.Value = rst.Fields(9).Value
UserForm9.cd.Value = rst.Fields(10).Value
UserForm9.isolation.Value = rst.Fields(11).Value
'TextBox1.MultiLine = True
ComboBox1.AddItem "正常>100兆歐"
ComboBox1.AddItem "降級觀察>10兆歐"
ComboBox1.AddItem "降級>1兆歐,轉(zhuǎn)大修處理"
ComboBox1.AddItem "失效<1兆歐,立即處理"
End Sub
VBA與access連接的方法-更新:
‘a(chǎn)dd_info函數(shù)用于更新access數(shù)據(jù)庫,更新的語句通過參數(shù)sql傳遞。
Sub add_info(sql As String)
Dim cnn As New ADODB.Connection
'stpath = ThisWorkbook.Path & "mt.accdb" ‘數(shù)據(jù)庫mt.accdb放在本地電腦
stpath = " 192.168.1.1mt.accdb" ‘數(shù)據(jù)庫mt.accdb放在共享地址
cnn.Open "provider=microsoft.ace.oledb.12.0;data source=" & stpath & ""
cnn.Execute (sql)
cnn.Close
Set cnn = Nothing
End Sub
Private Sub CommandButton1_Click()
If ComboBox1.Value = "" Then
MsgBox "處理結(jié)果不能為空,請重新選擇"
Exit Sub
End If
‘更新access的sql語法如下,需要注意動態(tài)ComboBox1.Value的處理,這里也容易出錯。
sql = "update mt set result='" & ComboBox1.Value & "' where id =" UserForm1.ng_number
If MsgBox("請確認輸入信息正確。", vbYesNo) = 6 Then
add_info (sql)
End If
Unload UserForm9
End Sub
對于非專業(yè)人員,花上一兩周時間學習一下VBA,并靈活運用到工作中,可以事半功倍,對VBA ACCESS的組合方式,簡單實用。本文也是拋磚引玉,希望大家一起交流和學習,一起進步。
如有需要本軟件代碼的,可以私信聯(lián)系。