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 的文字,可能要一一轉換才能做到吧,如果有更好的方法,也請告知喔。
重要度:
文章分類:
電腦標籤:

發表新回應