程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++ Builder在運行時創建BDE別名

C++ Builder在運行時創建BDE別名

編輯:關於C++

通過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。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved