如果您使用過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...