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

C++ Builder 動態設定 ODBC 資料來源

     編輯:關於C++

在部署資料庫應用程式時,若能於程式啟動時自動建立或更新 ODBC 系統資料源名稱(DSN),即可免去使用者手動設定的麻煩。本文以 Microsoft Access 為例,示範如何在 C++ Builder 中呼叫 ODBCCP32.DLL 匯出的 SQLConfigDataSource 函數,於 WinMain 階段動態註冊指向應用程式目錄下 test.mdb 的系統 DSN。

前置準備

  1. 取得以下檔案並置於專案目錄:
    • odbcinst.h(BCB/VC Include 目錄)
    • odbccp32.dll(WinNT\System32)
    • implib.exe、coff2omf.exe(BCB 工具)
  2. 命令列產生 BCB 可用的 .lib:
    implib.exe odbccp32.lib odbccp32.dll
    coff2omf odbccp32.lib

專案設定與程式碼

1. 專案主檔案(含 WinMain)修改

#include <vcl.h>
#include <odbcinst.h>
#pragma hdrstop
USEFORM("main.cpp", Form1);
// 其他單元...
USELIB("odbccp32.lib");  // 連結剛產生的 lib

//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
    try
    {
        Application->Initialize();

        // 組裝 ODBC 連接字串
        AnsiString dataPath = GetCurrentDir();
        AnsiString dbPath = dataPath + "\\test.mdb";
        // 格式:DSN=名稱\0DBQ=路徑\0DefaultDir=目錄\0\0
        // 先用 \b 佔位,稍後替換為 \0
        AnsiString connStr = "DSN=test\bDBQ=" + dbPath + "\bDefaultDir=" + dataPath + "\b\b";

        // 將 AnsiString 轉為字元陣列並替換 \b 為 \0
        unsigned char temp[255];
        char *ch = connStr.c_str();
        int i = 0;
        while (*ch != '\0')
        {
            if (*ch == '\b') *ch = '\0';
            temp[i++] = *ch++;
        }

        // 呼叫 SQLConfigDataSource 建立/修改系統 DSN
        if (::SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN,
                                  (LPSTR)"Microsoft Access Driver (*.mdb)\0",
                                  (LPSTR)temp))
        {
            Application->Title = "動態設定 ODBC 資料來源";
            Application->CreateForm(__classid(TForm1), &Form1);
            Application->Run();
        }
        else
        {
            ShowMessage("資料庫設定失敗!");
            Application->Termate();
        }
    }
    catch (Exception &exception)
    {
        Application->ShowException(&exception);
    }
    return 0;
}

關鍵點解析

  • 連接字串結尾雙 \0:ODBC 要求以雙空字元結尾,範例以 \b 佔位再統一替換。
  • 驅動名稱完全相符:"Microsoft Access Driver (*.mdb)" 需與系統 ODBC 驅動管理員顯示的名稱完全一致。
  • ODBC_ADD_SYS_DSN:建立系統 DSN(需管理員權限);若需使用者 DSN,改用 ODBC_ADD_DSN。
  • 錯誤處理:若 SQLConfigDataSource 回傳 FALSE,可呼叫 SQLInstallerError 取得詳細錯誤碼。

遷移至其他資料庫

若目標為 SQL Server、Oracle 等,僅需更換驅動名稱與連接字串關鍵字(如 SERVER、DATABASE、UID/PWD),其餘邏輯不變。

掌握此技巧,即可實現「綠色部署」:使用者只需執行 EXE,資料來源自動就緒,大幅降低安裝門檻。

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