Skip to Content

BCB

Embarcadero RAD Studio XE2 連結 MS Access 資料庫

 

前言

ADO 處理 MS Access 還是最方便,可以連結 ODBC,也可以直接連 mdb 檔案,在 DBGrid 等資料庫感知元件中讀寫 Unicode 都很順利。

BDE 是利用 ODBC 來連結 MS Access,可以直接讀寫 DBGrid,但目前測試結果只能處理 Big5 字集,不知如何讓它支援 Unicode。

dbExpress 也是利用 ODBC 來連結 MS Access,因為 dbExpress 取消了緩衝記憶體的使用,雖然效能有提昇,但也多了一些限制,例如沒有支援編輯,因此它不能直接連結 DBGrid 等資料庫元件。若要使用,就要搭配 TClientDataSet 及 TDataSetProvider 來連結,而且也只能讀取資料,不能寫入。

總結來說,若要和 MS Access 搭配,ADO 還是最方便的工具。

說明一下,底下提到 Table,是指 TTable 元件,提到 Table1 (後面有數字)則是指該 TTable 元件的名字,其他元件依此類推。

 

如何判斷磁碟機是硬碟、光碟或隨身碟

判斷磁碟的型態,可以知道磁碟機是硬碟、光碟、隨身碟、遠端網路磁碟及記憶體虛擬磁碟。

    AnsiString Drive = "C:";
    AnsiString Type;
    int i = GetDriveType(Drive.c_str());
    switch (i)
    {
        case  0 :
        case  1 :                     // 未知的,不存在的
            Type = "DRIVE_UNKNOWN";
            break;
        case  DRIVE_REMOVABLE  :      // 可移除的裝置,例如 USB 隨身碟,軟碟機
            Type = "DRIVE_REMOVABLE";
            break;
        case  DRIVE_FIXED      :      // 不可移除的裝置,像硬碟
            Type = "DRIVE_FIXED";
            break;
        case  DRIVE_REMOTE     :      // 遠端磁碟,例如網路磁碟機
            Type = "DRIVE_REMOTE";
            break;
        case  DRIVE_CDROM      :      // 光碟機
            Type = "DRIVE_CDROM";
            break;
        case  DRIVE_RAMDISK    :      // 記憶體虛擬磁碟
            Type = "DRIVE_RAMDISK";
            break;
    }
    ShowMessage(Drive + Type);

BCB5 使用 Regular Expression

過去為了工作需要,陸續在 BCB5 加進了支持 Unicode、資料庫的元件,當時還說未來最希望找到支援 Regular Expression (正規表達式,底下簡稱 RE) 的元件。前二天要把一個 perl 的程式移植到 BCB 來,因為該 perl 程式大量使用了 RE ,所以不得不停下工作,開始測試支援 RE 的資料。

這幾年的寫程式經驗中,perl 曾把我帶到另一個領域,最令人激賞的就是 perl 的 hash 及 RE,因為工作中有許多處理文字的問題,這些用 c++ 來寫非常不便,但 perl 的魔力卻讓這些事變的簡單許多,若不考慮圖形介面與效率的程式,perl 幾乎就是我隨手寫程式的工具了。

這幾月又重拾 BCB 寫程式,也開始用 set 及 map 來取代 perl 的 hash(BCB 6 內含的 STLport 已有 hash_set 及 hash_map,應該更好用,BCB5 還要自己去找來安裝),如今 BCB 找到了內嵌式的資料庫,若再加上 RE 的功能,那真是如虎添翼,寫起程式一定是更加得心應手了。

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/),這是一個客戶端的程式,可用來建立與操作火鳥的資料庫,我用他來建立資料庫與建立表格。

BCB 處理 7z 壓縮格式

這次要把大正藏與卍續藏全部裝在一片 CD 中是一個蠻大的考驗。由於考慮到某些國家與地區不像台灣有高普及率的 DVD 光碟機,所以使用一般 640 M 的 CDR 是主要的考量,為了這個目的,先前就嘗試把 Zip 的壓縮格式換成 RAR 格式,而且採用緊密壓縮,果然省下許多空間,為此還特別去找支援 RAR 解壓縮的工具,花了一些時間才順利使用。

好景不常,在努力測試下,發現估計的容量是 620M,可是壓片廠老板曾說最好保持在 600M,才能保證資料不會因為太滿而流失,所以為這個原因,同仁又去找了 7z 的壓縮程式來試。

7z 的壓縮率果然更厲害,142 冊的經文壓縮起來硬是比 RAR 少了近 50M,如此一來一片裝光碟的理想就很有可能順利實現,但新的問題就是要改寫程式,又是花了一個下午,才把 7z 的格式搞定。

BCB5專業版使用內嵌資料庫

BCB5 專業版一直是我對外正式使用的寫程式工具,因為它是公司買的正式版,而且只是教育版而已,企業版是貴的嚇人的東西,我實在不敢要老板買,不過雖然如此,專業版大部份的功能已經足夠我使用了。

有時我私下會用用 BCB6 企業版,這個寫起資料庫就輕鬆許多,但也因為沒有版權,只是拿來試用。

最近在寫的程式,一直希望能有資料庫的功能,否則過去土法練鋼的方法太辛苦,效率也不好,再加上一些新增的功能和資料庫的應用有關,因此利用此次程式改版的機會,也開始找相關的資料。

內含 Checkbox 的 TreeView 元件

最近一直在做明年要推出的光碟,而心中也有一些新的功能想加入程式中,會注意到這個功能,主要是因為全文檢索範圍的設計已不敷使用,希望有一個好的方法來處理。

在舊版的設計中,是每一冊提供一個 Checkbox,但在未來大正藏 56 冊及卍續藏 86 冊共142 冊的數量中,舊的格式實在不夠,所以想找一個能清楚呈現層次,可以用快速選擇各種分類的經目,甚至可以細到單經的選擇。單經的選擇是過去所沒有提供的,但這功能卻是許多使用者希望見到的,在思索許久之後,終於想到利用內含 Checkbox 的 TreeView 元件。

當初第一個方案是想到利用 yap 介紹的 Virtual Treeview 這個元件 (http://www.soft-gems.net/VirtualTreeview/),它的畫面蠻美觀的,也支援 Unicode,理當是最佳的選擇,不過試了一下,發覺用法不太習慣,範例也大多是 Delhpi 的,甚至許多參數在 BCB 上與 Delhpi 不同,花了不少時間卻成果有限,想想時間不夠用,實在無法花太多時間研究,只好暫時放棄,下次的正式版再來考慮這個元件。

接著在網路搜尋,找到一個方法可以把原來的 Treeview 元件變成有 Checkbox 的支援,程式很少,這樣就可以了。

  

天啊,還沒支援 Unicode!

在 5/13 交差後,並沒有因此好好休息一陣子,因為在趕專案的同時,許多不重要的常態工作都被暫時累積起來,因此在結案後,雖然工作上沒有那麼大的壓力,但卻也有許多瑣事一一待辦,同事都笑我說總算開始清垃圾了。

今天清的差不多,又開始想下一步的進度是什麼了。其實重點只有二個,一個是經錄專案要持續進行,因為這是一個二年的專案,明年還得有新的成果出來。另一個就是閱藏系統的開發。

閱藏系統的開發有二個重點,一個是功能的加強,一個是開發跨平台程式。

在跨平台方面,目前在想像中有二大方向,一個是學習 Java,一個是利用跨平台的 C# 程式,但這二者何者較好?我也不確定,得花時間再測試了。

至於功能加強上,在去年年底時,我就拿到一套 Borland 的新產品--BDS 2006,那時雖然躍躍欲試,但經錄專案在手中,沒空試新功能,而且二月還得出新版的光碟,我不想在出光碟之前,安裝一些新東西,若系統被破壞了,那就麻煩了。

今天終於有時間玩 BDS 2006,之前就聽說這一版的 VCL 有支援 Unicode,這可是我期待許久的功能,上一版用了不少方法才解決這個難題,我不希望用那麼麻煩的方法了。

安裝好之後,才牛刀小試一番,就發現 Unicode 不能直接用,怎麼回事?

訂閱文章


about seo