首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 部署實戰:基於 MS SQL Server 應用程式的安裝包製作完整指南

     編輯:Delphi

部署連接 MS SQL Server 的 Delphi 應用程式時,僅複製 EXE 與 BDE 遠遠不夠,必須包含 SQL Server Client 連接庫。本文詳述如何使用 InstallShield Express 製作免安裝 SQL Server 完整版的專業部署方案。

核心依賴檔案清單

從已安裝 SQL Server 的機器 Windows\System (或 SysWOW64) 目錄複製以下關鍵 DLL:

InstallShield Express 製作步驟

  1. 建立專案:使用 Delphi 安裝盤附贈的 InstallShield Express 專用版或 2.01+ 版本,按標準流程建立安裝專案。
  2. 包含 BDE 與 SQL Links:在元件選擇階段務必勾選 Borland Database Engine (BDE) 及 SQL Links for SQL Server。
  3. 加入 SQL Client DLL:在 Specify Components and Files → Groups and Files 中,將上述 4 個 DLL 加入 Program Files 群組 (建議複製到應用程式安裝目錄,方便解除安裝時完整移除)。
  4. 註冊表設定 (關鍵步驟):針對複雜網路環境,需在安裝腳本中寫入以下註冊表鍵值 (以 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、主機名或管道名。
  5. 建置安裝包:執行 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]。

常見問題排查

檔案名稱功能必要性
Dbmssocn.dllTCP/IP 協定支援網路連線必備
Dbmsspxn.dllIPX/SPX 協定支援舊網路環境
Dbnmpntw.dll命名管道支援本機/區域網連線
Ntwdblib.dllSQL Server 核心通訊庫最關鍵,缺一不可

現代替代方案提示

新專案建議改用 ADO (dbGo)、FireDAC 或 UniDAC 等現代資料存取架構,僅需部署 msado15.dll (ADO) 或 FireDAC 專用驅動 DLL,無需 BDE 與複雜註冊表設定,部署極度簡化。

掌握傳統 BDE+SQL Server 部署流程,對維護老專案至關重要;新專務請優先選擇現代資料存取技術以降低部署複雜度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象可能原因解決方案
連接失敗 "SQL Server does not exist"註冊表別名遺漏或拼錯檢查 ConnectTo 鍵值與 BDE 別名 SERVER NAME 一致性
載入 Ntwdblib.dll 失敗DLL 未部署或路徑錯誤確認 DLL 在應用程式目錄或系統路徑中
協定錯誤DSQUERY 設定與實際網路不符根據網路環境調整 DSQUERY (TCP/IP/命名管道)