程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> Delphi控件的拿來主義(三)

Delphi控件的拿來主義(三)

編輯:Delphi

 

  

----問題二及解決方案


   每一條導入表中的紀錄除了ISO文件中的內容外,還需要有書的類型,期號,以及ID號,而TPgCSV在插入新紀錄時只處理了同文本文件中的數據相關的字段,因此,這些字段的內容需要我們自己來加入。不用說,很自然的就會想到Table中的AfterInsert事件.但問題是,我的Table在DataModule單元中,我必須傳參數到AfterInsert事件中,麻煩!同時,這樣的處理會帶來維護上的混亂,一個單元裡面發生的事件應該盡量由這個單元裡面的函數或過程來處理。於是,我又想到了在當前單元中寫一個處理過程,然後在程序運行時把這個過程指派給Table的AfterInsert事件,導入結束後再禁止掉。可行,但還是麻煩!既然大多數情況下都會遇到這樣的問題,那何不一了百了,把這個事件封裝起來呢.


    同問題一一樣,這裡我們還是需要一個事件處理過程AfterInsert.這一次應該加在哪兒呢?大家肯定一眼就看出來了:


procedure TPgCSV.CSVToDataSet;


begin



FDataset.DisableControls;


 while (not Eof(FFile)) and (not FStop) do


  begin


   //read from CSV


   Readln(FFile,RecordString);


    //xm4014s modification


   if Assigned(FRegulateString) then


    FRegulateString(self,RecordString);


   //add new record


   try


FDataset.Append;


//應該加在這兒!


//xm4014s modification


if Assigned(FAfterInsert) then


AfterInsert(self,FDataset);



for i:=1 to CountMapItems do



end;


 


同樣,這裡需要定義新的事件聲明和事件屬性,因為需要將FDataSet的參數傳遞出去,聲明代碼可參看Delphi控件的拿來主義(二)(http://www.csdn.net/develop/read_article.asp?id=11855).


重新編譯控件,就可在AfterInsert事件中添加代碼對書的類型,期號,以及ID號進行賦值了.


 


----問題三及解決方案


   涉及到數據庫的問題現在都已經解決了.但是還有一個顯示問題.程序要求用ProgressBar顯示導入進度.為了設置ProgressBar.Max的值,我需要在導入之前知道ISO文件中一共有多少條紀錄,即一個類似於RecordCount的屬性.但是TPgCSV中沒有這樣的一個屬性.


   那麼我們就來添加一個這樣的屬性


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