VFP 開發複合查詢常見痛點:查詢條件動態、需支援更新、一對多關聯、重查時 Grid 無法刷新/彈出 Browse 視窗。本文記錄作者實戰驗證的**巨集替換建立視圖 + 重命名刪除舊視圖** 完整解決方案。
| 方法 | 動態條件 | 可更新 | 一對多 | 重查刷新 | 結論 |
|---|---|---|---|---|---|
| Query 設計師 | ✗ | ✗ | ✗ | ✗ | 最死板 |
| SearchClass | ✓ | ✓ | ✗ (單表) | ✓ | 原始碼太複雜難維護 |
| Grid + SQL/臨時表 | ✓ | ✗ | ✓ | 難 | 無法更新 |
| 參數化視圖 | ✓ (固定欄位) | ✓ | ✓ | ✓ | 欄位固定、複合查詢需建大量視圖 |
| 巨集替換視圖 | ✓ 完全動態 | ✓ | ✓ | ✓ (本文核心突破) | 最完美 |
* 建立初始視圖
CREATE SQL VIEW tempview AS SELECT * FROM SomeTable
* 表單 Grid 設定
Thisform.Grid.RecordSourceType = 1 && Alias
Thisform.Grid.RecordSource = "tempview"
* 動態產生 SQL 後,重建視圖關鍵步驟:
RENAME VIEW tempview TO oldview && 避免「視圖已存在」對話框
DELETE VIEW oldview && 徹底移除舊視圖
CREATE SQL VIEW tempview AS &sqlStatement && 巨集替換建立新視圖
Thisform.Grid.Refresh() && 強制刷新顯示
RENAME VIEW ... TO oldview + DELETE VIEW oldview:無聲移除舊視圖,避免確認對話框阻塞。tempview),Grid 綁定不變,Refresh() 即可顯示新結果。UPDATE/INSERT/DELETE 回寫基礎表,滿足編輯需求。JOIN 處理。VFP 複合查詢終極解法:**動態 SQL → RENAME/DELETE 舊視圖 → CREATE SQL VIEW 巨集替換 → Grid.Refort()**。完美解決動態條件、可更新、一對多、重查刷新四大痛點,為傳統 VFP 專案延續生命週期提供穩健技術路徑。