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

C++ Builder 運行時動態建立 BDE 別名

     編輯:關於C++

在使用 C++ Builder 開發資料庫應用程式時,透過 BDE(Borland Database Engine)別名連接資料庫雖然方便,但面對路徑不固定或部署環境未知的資料庫,預先建立別名往往力有未逮。這時候,在程式執行期動態建立 BDE 別名便成為剛需。本文將以一個位於程式目錄下的 Paradox 資料表 friends.db 為例,示範如何在運行時初始化 BDE、建立臨時別名、並透過 TQuery 存取資料。

核心程式碼實作

1. 表單建立事件:初始化 BDE 與建立別名

void __fastcall TMainForm::FormCreate(TObject *Sender)
{
    if (Query1->State == dsInactive)
    {
        // 1. 初始化 BDE
        DbiInit(NULL);

        // 2. 開啟一個臨時 Session
        hDBISession tmpSession;
        DbiStartSession(NULL, &tmpSession, "");

        // 3. 組裝別名路徑(指向應用程式所在目錄)
        // 注意:路徑字串前綴必須加上 "PATH:"
        AnsiString strPath = "PATH:" + ExtractFileDir(Application->ExeName);

        // 4. 新增別名:名稱 tmpmyfriends,驅動類型 PARADOX,不持久化
        DbiAddAlias(NULL, "tmpmyfriends", "PARADOX", strPath.c_str(), false);

        // 5. 設定 Query 的 DatabaseName 並啟用
        Query1->DatabaseName = "tmpmyfriends";
        Query1->Active = true;
    }

    // 執行查詢
    Query1->SQL->Clear();
    Query1->SQL->Add("SELECT * FROM friends.db");
    Query1->Open();
}

2. 表單關閉事件:釋放 BDE 資源

void __fastcall TMainForm::FormClose(TObject *Sender, TCloseAction &Action)
{
    if (Query1->Active)
        Query1->Active = false;

    DbiCloseSession(tmpSession); // 關閉 Session
    DbiExit();                   // 釋放 BDE 資源
}

關鍵 API 解析

DbiStartSession

語法:DBIResult DBIFN DbiStartSession(pszName, phSession, pNetDir)

  • pszName:Session 名稱指標,可傳 NULL 讓 BDE 自動命名。
  • phSession:輸出參數,接收新建立的 Session 控制代碼。
  • pNetDir:網路目錄指標,單機應用通常傳 NULL。
  • 成功回傳 DBIERR_NONE。

DbiAddAlias

語法:DBIResult DbiAddAlias(hCfg, pszAliasName, pszDriverType, pszParams, bPersistent)

  • hCfg:組態檔控制代碼,傳 NULL 表示寫入目前 Session。
  • pszAliasName:別名名稱(如 "tmpmyfriends")。
  • pszDriverType:驅動類型,Paradox 為 "PARADOX",Standard 型傳 NULL。
  • pszParams:參數字串,格式為 "PATH:實際目錄路徑"。
  • bPersistent:true 寫入系統組態檔(永久),false 僅存在於目前 Session(臨時)。
  • 成功回傳 DBIERR_NONE。

實作要點提醒

  1. 標頭檔宣告:在表單類別的 private 區塊宣告 hDBISession tmpSession; 以便在 FormClose 中釋放。
  2. 路徑前綴:DbiAddAlias 的參數字串必須以 "PATH:" 開頭,否則別名無效。
  3. 資源釋放順序:先關閉 TQuery,再 DbiCloseSession,最後 DbiExit,避免資源洩漏。
  4. 多執行緒注意:BDE Session 非執行緒安全,若在多執行緒環境下使用,需自行同步或每緒獨立 Session。

掌握此技巧,即可讓應用程式在任何目錄下「開箱即用」,免去安裝時手動設定 ODBC/BDE 別名的麻煩,極大提升部署彈性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved