這個例子是關於如何將一個文本數據導入導出控件作一些簡單的修改之後拿來使用的。
◆程序功能
將圖書館的ISO文件中的部分數據轉到Oracle8數據庫中。
◆設計要求
1.顯示導入進度條。
2.在導入過程中,如果某條紀錄導入失敗,不顯示異常,而將導入失敗的紀錄記入日志。
◆設計思路
程序的關鍵在文本數據字段的分離。通常的做法,都是先將字符串進行處理(RegulateString),然後把串中每個字符同分割符(可以是空格,逗號等)比較,將不是分割符的字符追加到一個串中(GetRecordItem),得到一個字段的內容。通過一個循環(循環次數由GetItemNum來定),就可以將一個字符串分成幾個字段。最後的工作就是將分離出來的數據對號入座加入數據庫.
按照上面的思路,利用Delphi提供的已有函數和過程,實現起來應該不難,但問題是,我可不想每次編文本導入程序的時候,都把什麼這啊那的函數過程重新定義一遍,哎,最煩的就是重復性的工作了.那麼有沒有現成的控件將上述過程都封裝起來呢?PS:又不用我編呢?
答案是肯定的!前幾天剛剛下了一個免費控件TPgCSV,據說可以實現文本的導入和導出.翻出來一看,正是我想要的.
在深入到下面的內容之前,有必要對該控件的類聲明部分作一定了解
(經作者Khashayar Sadjadi([email protected])同意發表):
//中文部分為筆者所作的注釋
//注意:
//在該控件中,Export代表將文本數據導入到數據庫,Import代表從數據庫導出到文本。??? 怎麼和我理解的
//導入導出概念剛好是反的 :)
type
//在處理數據產生異常時,可選擇繼續還是中止
TPgCSVErrorResponse = (pgcsvAbort, pgcsvIgnore);
//進程監控事件聲明,可以將導入/導出的進度作為參數傳出
TPgCSVProgressEvent = procedure (Sender : TObject; AProgress: LongInt; var StopIt: Boolean) of object;
//發生異常時的事件處理聲明,異常信息通過該接口傳給程序員。
TPgCSVExportErrorEvent = procedure (Sender : TObject; Mess: string; RecNo: LongInt; var Response:TPgCSVErrorResponse) of object;
TPgCSV = class(TComponent)
private
FDataset : TDataset;
FCSVMap,
FCSVFile,
FDateFormat,
FIgnoreStr : string;
FSeprator,
FDelimiter,
FFieldIndicator