部署連接 MS SQL Server 的 Delphi 應用程式時,僅複製 EXE 與 BDE 遠遠不夠,必須包含 SQL Server Client 連接庫。本文詳述如何使用 InstallShield Express 製作免安裝 SQL Server 完整版的專業部署方案。
核心依賴檔案清單
從已安裝 SQL Server 的機器 Windows\System (或 SysWOW64) 目錄複製以下關鍵 DLL:
| 檔案名稱 | 功能 | 必要性 |
Dbmssocn.dll | TCP/IP 協定支援 | 網路連線必備 |
Dbmsspxn.dll | IPX/SPX 協定支援 | 舊網路環境 |
Dbnmpntw.dll | 命名管道支援 | 本機/區域網連線 |
Ntwdblib.dll | SQL Server 核心通訊庫 | 最關鍵,缺一不可 |
InstallShield Express 製作步驟
- 建立專案:使用 Delphi 安裝盤附贈的 InstallShield Express 專用版或 2.01+ 版本,按標準流程建立安裝專案。
- 包含 BDE 與 SQL Links:在元件選擇階段務必勾選 Borland Database Engine (BDE) 及 SQL Links for SQL Server。
- 加入 SQL Client DLL:在 Specify Components and Files → Groups and Files 中,將上述 4 個 DLL 加入 Program Files 群組 (建議複製到應用程式安裝目錄,方便解除安裝時完整移除)。
- 註冊表設定 (關鍵步驟):針對複雜網路環境,需在安裝腳本中寫入以下註冊表鍵值 (以 TCP/IP 為例):
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo]
"DSQUERY"="DBMSSOCN" ; 預設使用 TCP/IP
"192.168.1.100"="DBMSSOCN,192.168.1.100" ; 別名對應 IP,名稱需與 BDE 別名設定中 SERVER NAME 一致
DSQUERY 設定預設網路庫 (TCP/IP: DBMSSOCN, 命名管道: DBNMPNTW, IPX: DBMSSPXN)。
- 右側格式:
網路庫名稱,伺服器地址。地址可以是 IP、主機名或管道名。
- 建置安裝包:執行 Build 生成
Setup.exe 及相關 CAB 檔。
BDE 別名設定對應
在應用程式中使用 TDatabase 或 TSession 設定別名時,SERVER NAME 必須與註冊表中定義的別名完全一致 (如上例的 192.168.1.100),才能正確解析連接資訊。
進階部署技巧
- 版本衝突處理:若目標機已安裝較新版 SQL Client,安裝程式應檢查版本避免覆蓋 (InstallShield 可設定版本比較規則)。
- 多協定支援:同時部署 TCP/IP、命名管道、IPX 三套 DLL,並在註冊表定義多個別名,讓用戶端可切換連接方式。
- 無訊息安裝:製作
Setup.iss 回應檔,支援 Setup.exe /s /f1Setup.iss 靜默部署。
- 64 位元系統:DLL 應放入
SysWOW64 (32 位元應用) 或 System32 (64 位元應用),InstallShield 可設定目標路徑為 [SystemFolder]。
常見問題排查
| 現象 | 可能原因 | 解決方案 |
| 連接失敗 "SQL Server does not exist" | 註冊表別名遺漏或拼錯 | 檢查 ConnectTo 鍵值與 BDE 別名 SERVER NAME 一致性 |
| 載入 Ntwdblib.dll 失敗 | DLL 未部署或路徑錯誤 | 確認 DLL 在應用程式目錄或系統路徑中 |
| 協定錯誤 | DSQUERY 設定與實際網路不符 | 根據網路環境調整 DSQUERY (TCP/IP/命名管道) |
現代替代方案提示
新專案建議改用 ADO (dbGo)、FireDAC 或 UniDAC 等現代資料存取架構,僅需部署 msado15.dll (ADO) 或 FireDAC 專用驅動 DLL,無需 BDE 與複雜註冊表設定,部署極度簡化。
掌握傳統 BDE+SQL Server 部署流程,對維護老專案至關重要;新專務請優先選擇現代資料存取技術以降低部署複雜度。
- 上一篇文章: Delphi QuickReport 實戰:多表關聯查詢報表設計與列印完整指南
- 下一篇文章: Delphi 位元操作進階:從位元組提取到單一位元操作完整教學
Copyright ©
程式碼之家 All Rights Reserved