通過bde別名來連接數據庫,確實很方便,然而,那些沒有確定的數據庫,我們卻無法給它創建別名。
而大多數時候,當我們把程序交給別人真正投入使用時,別名的路徑也是不確定的。這就要求我們在程序運行時動態連接到數據庫。
現在,假設在程序運行目錄下有個通訊錄friends.db,我們要通過tquery、tdatasource等控件來訪問:
本人學習編程不久,如有錯誤或失漏,請不吝賜教
在窗體上添加相關控件
在頭文件中聲明會話句柄
hdbises tmpsession;
要在程序啟動時裝入數據庫,可以如下:
void __fastcall tmainfrm::formcreate(tobject *sender)
{
if (query1->state==dsinactive)
{
dbiinit(null);//bde初始化
dbistartsession(null,tmpsession,"");//打開一個臨時的bde session
//設別名路徑為程序所在目錄,要注意前頭要加上"path:"字串
ansistring strpath="path:"+extractfiledir(application->exename);
dbiaddalias(null,"tmpmyfriends",
"paradox",strpath.c_str(),false);//增加別名完成
query1->databasename="tmpmyfriends";//接下來就可如常使用了。
query1->active=true;
}
query1->sql->clear ();
query1->sql->add("select * from friends.db");
query1->open();
}
當程序關閉時,要記得釋放bde占用的資源
void __fastcall tmainfrm::formclose(tobject *sender, tcloseaction &action)
{
if (query1->active )
query1->active=false;
dbiclosesession(tmpsession);//關閉當前會話
dbiexit();//放掉bde資源
}
可以說明一下的是dbistartsession和dbiaddalias函數。
dbistartsession函數語法如下:
dbiresult dbifn dbistartsession ([pszname], phses, [pnetdir]);
其中,pszname參數是pchar類型指針,用來為最近打開的session命名,可以是null而讓bde任意指定;phses參數則用來指定你要找開的session的句柄。pnetdir為指向network路徑的指針,具體我也沒有用過。
函數調用成功,則返回dbierr_none。
dbiaddalias函數語法如下:
dbiresult dbiaddalias( [hcfg], pszaliasname, pszdrivertype, pszparams, bpersistent );
其中,hcfg指定要使用的配置文件,設null則把當前session加入配置文件;pszdrivertype指明數據庫驅動類型,null表示為standard型。bpersitent為bool值,指定是否一直保存別名到配置文件中,如果為
false則要加入的別名只有當前session中使用。函數如調用成功,返回dbierr_none。