BCB5專業版使用內嵌資料庫 (二)

去年 12 月寫了篇「BCB5 專業版使用內嵌資料庫」,那只是基本研究,讓資料庫可以在 BCB5 Pro 呈現,但諸多細節都沒有深入研究,這二天又研究了一些東西,終於確定資料庫的應用沒有問題了。

資料庫依然是選擇火鳥 (http://www.firebirdsql.org/),並使用其內嵌版的 DLL。如此一來,使用者就不用額外安裝資料庫客戶端程式。

資料庫與 BCB5 Pro 的介面就是 UIB -- Unified Interbase (http://www.progdigy.com/modules.php?name=UIB),它等於是 BCB 控制資料庫的元件。

資料庫的建立與操作可以用 FlameRobin (http://www.flamerobin.org/),這是一個客戶端的程式,可用來建立與操作火鳥的資料庫,我用他來建立資料庫與建立表格。

至目前為止,有一個美中不足的問題,那就是字集的問題。BCB5 目前還不支援 Unicode,我是利用 TntWare Unicode controls (http://www.tntware.com/delphicontrols/unicode/) (現在好像換成了 TMS Unicode Component Pack (http://www.tmssoftware.com/go.asp?tmsuni)) 來處理呈現的介面,不過它是支援 UTF16,而火鳥資料庫、UIB 及 FlameRobin 在 Unicode 只是支援 UTF8,這等於是我要在 BIG5(ANSI)、UTF8、UTF16 這三者之間不斷地打轉了。

如果剛好是純 BIG5 的資料,則我還可以直接用 TntWare Unicode controls 來溝通與直接在程式介面呈現。基本設定如下:

《JvUIBDataBase》-- UIB 元件
CharacterSet : csNONE (若是 UTF8, 就選 csUTF8)
DatabaseName : db\database.fdb (指出資料庫的相對位置)
LibraryName : fbembed.dll
UseName : sysdba (預設的)
PassWord : masterkey (預設的)

《JvUIBTransaction》-- UIB 元件
DataBase : JvUIBDataBase

《JvUIBDataSet》-- UIB 元件
DataBase : JvUIBDataBase
Transaction : JvUIBTransaction
SQL : "select * from table"

《DataSource》-- BCB 元件
DataSet : JvUIBDataSet

以上的設定就可以直接資料庫元件直接呈現資料庫的內容。

若是 Unicode 資料或是要在背後運算,就要利用 SQL + Query 來運作,這裡寫一個很簡單的例子:

// 設定 Query SQL
JvUIBQuery1->SQL->Text = "select * from tripitaka;";
// 開啟資料庫
JvUIBQuery1->Open(true);
// 取第一筆的 ID 欄位
AnsiString sID = JvUIBQuery1->Fields->ByNameAsString["ID"];
// 下一筆
JvUIBQuery1->Next();
// 取出第二筆的 NAME 欄位 (假設資料庫是 UTF8 字集)
AnsiString sName = JvUIBQuery1->Fields->ByNameAsString["NAME"];
// 底下是把 sName 轉換成 Unicode , 假設字串長度不超過 100
wchar_t uName[100] = L"";
MultiByteToWideChar(CP_UTF8,0,sName.c_str(),-1,uName,100);
// 把 Unicode 呈現在 TntWare Unicode 元件
TntEdit->Text = uName;
// 關閉資料庫
JvUIBQuery1->Close(etmCommit);

以上就可以在程式中逐筆處理資料庫中的資料了。如果有需要在 Unicode 元件中呈現資料庫中 Unicode 的文字,可能要一一轉換才能做到吧,如果有更好的方法,也請告知喔。

重要度:
文章分類:
電腦標籤:

發表新回應

借我放一下廣告