架構對比
| 模式 | 觸發方式 | 即時性 | 適用場景 | 優點 | 缺點 |
| 1. 作業排程 | SQL Agent Job / Oracle Job Queue | 低 (批次) | 大量資料夜間處理、報表產出 | 不阻塞前端、可重試、集中管理 | 延遲高、需輪詢狀態 |
| 2. 觸發器 | INSERT/UPDATE/DELETE 事件 | 高 (同步) | 單筆業務即時計算 (如修改讀數即算費) | 邏輯集中資料庫、前端無感、ACID 保障 | 增加寫入延遲、除錯難、遞迴風險 |
| 3. 傳遞查詢 | VBA/巨集呼叫 Pass-Through Query | 高 (同步) | 複雜報表、需即時回傳結果集 | 直連後端、支援完整 T-SQL、無中介表 | Oracle 需特殊語法、連線管理複雜 |
傳遞查詢建立步驟
- 建立查詢 → 設計檢視 → 關閉「顯示表」。
- 查詢 → SQL 專用 → 傳遞。
- 屬性表設定:
- ODBC 連接字串:
ODBC;DSN=ntserver0;UID=sa;PWD=;DATABASE=BMS
- 傳回記錄:否 (執行 SP 不回傳資料集時)。
- SQL 視窗輸入:
EXEC sp_statistics。
- 儲存為
stat_query。
VBA 呼叫範例
Private Sub cmdStat_Click()
Dim dbs As Database, qdf As QueryDef
Set dbs = CurrentDb
Set qdf = dbs.QueryDefs("stat_query")
qdf.Execute dbFailOnError
Set qdf = Nothing
Set dbs = Nothing
End Sub
跨平台注意事項
- SQL Server:
EXEC sp_name 直接執行。
- Oracle:需用
BEGIN pkg.proc; END; 或 CALL proc(),單純 EXEC 會報 ORA-00900。
- 連線池:建議使用 ADO 搭配連線池替代 DAO,提升併發效能。
最佳實踐建議
- 核心業務邏輯下沉預存程序,前端僅負責 UI 與參數傳遞。
- 大量批次處理走 Job,單筆即時走 Trigger 或 Pass-Through。
- 統一錯誤處理:SP 回傳錯誤碼/訊息,前端統一解析顯示。