程式自動配置資料來源 修改登錄檔法

2021-05-24 03:17:33 字數 4332 閱讀 7617

如果您使用過odbc(open database connectivity),那麼對資料來源一定不陌生。odbc資料來源就是命名的一組資訊,包括需要鏈結的資料庫所在位置、對應的odbc驅動程式以及訪問資料庫所需的其他相關資訊,使用者可以通過資料來源的名稱來指定所需的odbc連線。我們可以把資料來源理解為一種資料連線的抽象。基於odbc的應用程式要訪問乙個資料庫都必須註冊乙個資料來源。

dsns(data source names)按照其儲存方式和作用範圍分為三種:使用者dsn、系統dsn和檔案dsn。每個檔案dsn儲存在單獨的乙個檔案中,檔案可以在網路範圍內共享;使用者dsn儲存在登錄檔中,只對當前使用者可見;系統dsn頁儲存在登錄檔中,但對系統中的所有使用者可見。使用者dsn和系統dsn的區別在於,使用者dsn儲存在登錄檔的hkey_current_user下,而系統dsn儲存在hkey_local_machine下。

通常可以通過控制面板中的odbc data source來配置odbc的資料來源,也可以安裝程式來完成。不管是手工還是由安裝程式來配置資料來源,都缺乏靈活性。其實我們還可以在程式中自動配置資料來源。這裡就將介紹如何通過修改登錄檔來配置資料來源。

函式功能:配置access2000系統資料來源

函式原形:bool createsource(cstring strsourcename, cstring strfilename, cstring strdescription)

函式引數說明:

1. strsourcename: 資料來源的名字

2. strsourcedb:   帶完整路徑的資料庫名

3. strdescription:資料來源描述

bool createsource(cstring strsourcename, cstring strfilename, cstring strdescription)

strsubkey = "software//odbc//odbc.ini//" + strsourcename;

// 建立odbc資料來源在登錄檔中的子鍵

lreturn = regcreatekeyex(hkey_local_machine, (lpctstr) strsubkey, 0, null,

reg_option_non_volatile, key_write, null, &hkey, &dw);

if (lreturn != error_success)

// 設定資料來源的各項引數

cstring strdbq = strfilename;

cstring strdriver = sysdir;

dword dwdriverid = 25;

cstring strfil = "ms access;";

cstring strpwd = strsourcename;

dword dwsafetransactions = 0;

cstring struid = "";

::regsetvalueex(hkey, "dbq", 0l, reg_sz, (const byte*) ((lpctstr) strdbq), strdbq.getlength());

::regsetvalueex(hkey, "description", 0l, reg_sz, (const byte*) ((lpctstr)strdescription), strdescription.getlength());

::regsetvalueex(hkey, "driver", 0l, reg_sz, (const byte*) ((lpctstr)strdriver), strdriver.getlength());

::regsetvalueex(hkey, "driverid", 0l, reg_dword, (const byte*) (&dwdriverid), sizeof(dw));

::regsetvalueex(hkey, "fil", 0l, reg_sz, (const byte*) ((lpctstr) strfil), strfil.getlength());

::regsetvalueex(hkey, "safetransactions", 0l, reg_dword, (const byte*) (&dwsafetransactions), sizeof(dw));

::regsetvalueex(hkey, "uid", 0l, reg_sz, (const byte*) ((lpctstr) struid), struid.getlength());

::regclosekey(hkey);

// 建立odbc資料來源的jet子鍵

strsubkey += "//engines//jet";

lreturn = regcreatekeyex(hkey_local_machine, (lpctstr) strsubkey, 0, null, reg_option_non_volatile, key_write, null, &hkey, &dw);

if (lreturn != error_success)

// 設定該子鍵下的各項引數

cstring strimplict = "";

cstring strusercommit = "yes";

dword dwpagetimeout = 5;

dword dwthreads = 3;

dword dwmaxbuffersize = 2048;

::regsetvalueex(hkey, "implicitcommitsync", 0l, reg_sz, (const byte*) ((lpctstr) strimplict), strimplict.getlength() + 1);

::regsetvalueex(hkey, "maxbuffersize", 0l, reg_dword, (const byte*) (&dwmaxbuffersize), sizeof(dw));

::regsetvalueex(hkey, "pagetimeout", 0l, reg_dword, (const byte*) (&dwpagetimeout), sizeof(dw));

::regsetvalueex(hkey, "threads", 0l, reg_dword, (const byte*) (&dwthreads), sizeof(dw));

::regsetvalueex(hkey, "usercommitsync", 0l, reg_sz, (const byte*) ((lpctstr) strusercommit), strusercommit.getlength());

::regclosekey(hkey);

// 設定odbc資料庫引擎名稱

strsubkey = "software//odbc//odbc.ini//odbc data sources";

lreturn = regcreatekeyex(hkey_local_machine, (lpctstr) strsubkey, 0l, null, reg_option_non_volatile, key_write, null, &hkey, &dw);

if (lreturn != error_success)

cstring strdbtype = "driver do microsoft access (*.mdb)";

::regsetvalueex(hkey, strsourcename, 0l, reg_sz, (const byte*) ((lpctstr) strdbtype), strdbtype.getlength());

return true;

}函式功能:刪除access2000系統資料來源

函式原形:bool deletesource(cstring strsourcename)

函式引數說明:

1. strsourcename: 資料來源的名字

bool deletesource(cstring strsourcename)

if (regdeletevalue(hkey, strsourcename) != error_success)

regclosekey(hkey);

// 刪除相關主鍵

strsubkey = "software//odbc//odbc.ini//" + strsourcename;

if (regdeletekey(hkey_local_machine, strsubkey + "//engines" + "//jet") != error_success)

if (regdeletekey(hkey_local_machine, strsubkey + "//engines") != error_success)

if (regdeletekey(hkey_local_machine, strsubkey) != error_success)

return true;

}

pb自動註冊ASA資料來源

函式定義 函式名稱 f odbc autoreg 函式功能 將拷貝到winsystem32 下的資料庫進行註冊 函式引數 mydb name 將註冊資料庫名稱 適用範圍pb9.0 sqlanywhere9.0 資料庫 實用注意事項 需將sqlanywhere9.0支援驅動 安裝到系統目錄 存在問題 ...

VC自動配置資料來源

要注意的是,當我們使用sqlconfigdatasource odbc api函式時必須宣告包含系統的odbcinst.h標頭檔案,所以我們再選擇workspace視窗中fileview開啟header files中try.h,在其中加入 include odbcinst.h 如果不加入這個標頭檔案...

動態修改資料來源配置

因專案需要能動態修改資料來源的配置,及修改後不用重啟整個應用。使用的資料來源是apache的basicdatasource,網上千篇一律的是如下實現 basicdatasource bds getdatasource trycatch exception e bds.setusername sa b...