ACCESS是一個Client/Server的優秀前端開發工具具有易學易用界面友好開發簡單和其他數據庫接口靈活但是它要對大量數據處理時速度比較慢當有大量數據需要處理時不能在Client端處理而必須在Server端處理 但ACCESS和Server端之間多數通過ODBC來連接這樣就增加了調用後台存儲過程的難度筆者通過在實際工作中長期的摸索根據不同的業務需要可以用下面三種方法去調用後台存儲過程
一 Access 向後台提交作業這一個個作業對應一個個的存儲過程在SQL Server 中通過Task Manager 來建立相應的Task; 而在Oracle 中通過Managing Job Queue 來建立相應的Job在Access中在job_list表中插入一個作業這些作業一般每天晚上運行一次這些作業對應的業務一般是需要處理非常大量數據而實時性又是較低的在我們的業務中比較典型的例子是每天晚上大量的電費計算
二 在Server端建立一些觸發器(Trigger)在Access中激活這些觸發器在SQL Server 和Oracle 中都是通過Create Trigger 來實現在Access中根據不同的業務通過插入修改刪除記錄來激活不同觸發器在我們的業務中一個例子是當業務人員修改用戶的電表讀數後激活計算電費的觸發器能立即重新計算該用戶的電費這樣子既可以和批量計算電費共享同一程序不用在Access端重新開發有可以加快前端的響應速度
三 以上二種方法只可以說是間接調用後台存儲過程Access還提供一種直接調用的方法可以用Access 傳遞查詢直接將命令發送到數據庫服務器
建立Access 傳遞查詢步驟如下
() 在數據庫窗口中單擊查詢選項卡然後單擊新建按鈕
() 在新建查詢對話框中單擊設計視圖選項然後單擊確定按鈕
() 在顯示表對話框內單擊關閉按鈕
() 在查詢菜單上指到SQL 語句條件然後單擊傳遞命令
() 在工具欄上請單擊屬性按鈕 以顯示查詢屬性表
() 在查詢屬性表中請設置ODBC 連接字符串屬性來指定要連接的數據庫信息可以輸入連接信息: ODBC;DSN=ntserver;UID=sa;PWD=;DATABASE=BMS或用生成器按鈕生成
() 因存儲過程不用返回記錄所以將返回記錄屬性設置為否
() 在SQL 傳遞查詢窗口中輸入傳遞查詢: exec statisticsStatistics 是SQL Server 數據庫的一個存儲過程
() 關閉查詢保存查詢為stat_query
運行傳遞查詢的方法有
() 用Microsoft Access的宏 OpenQuery
() 用下面的事件過程
Private Sub 統計_Click()
Dim dbs As Database qdf As QueryDef
Dim tmq As Dynaset
Dim strSQL As String
Set dbs = CurrentDb
打開上面建的傳遞查詢stat_query
Set qdf = dbsOpenQueryDef(stat_query )
qdfExecute
Set dbs = Nothing
End Sub
這種方法在SQL Server 中實現完全沒問題在Oracle 中不能實現錯誤信息為ORA invalid SQL statement 由於這種方法不需要一個中間的表去排隊或激活後台存儲過程所以它的應用面就很廣凡是需要處理大量數據的業務都可以放到Server端去處理如統計報表
通過以上三種方法解決了Access對大量數據處理速度慢的弱點大大加大了深圳供電局數據處理能力
From:http://tw.wingwit.com/Article/program/SQL/201311/16372.html