關於Delphi內存表的使用說明


關於Delphi內存表的使用說明:

1.建立臨時表 
  數據輸入是開發數據庫程序的必然環節。在Client/Server結構中,客戶端可能要輸入一批數據后,再向服務器的后台數據庫提交,這就需要在本地(客戶端)建立臨時數據表來存儲用戶輸入的數據,待提交后,清除本地表數據。

2 建立臨時表如下:

function CreateTableInMemory(const AFieldDefs:TFieldDefs):TDataSet; var 
TempTable:TClientDataSet; 
begin 
  TempTable:=nil; 
  Result:=nil; 
  if AFieldDefs<>nil then 
  begin 
   try 
  TempTable:=TClientDataSet.Create(Application); 
   TempTable.FieldDefs.Assign(AFieldDefs); 
   TempTable.CreateDataSet; 
   Result:=(TempTable as TDataSet); 
  Except 
   if TempTable<>nil then 
TempTable.Free; 
  Result:=nil; 
   raise; 
  end; 
end; 
end;

//在程序中按如下方法使用: 
procedure TForm1.Button1Click(Sender: TObject); 
var 
ADataSet:TDataSet; 
 begin 
   ADataSet:=TDataSet.Create(Self); 
   with ADataSet.FieldDefs do 
   begin 
    Add('Name',ftString,30,False); 
   Add('Value',ftInteger,0,False); 
   end;

  with DataSource1 do 
  begin 
   DataSet:=CreateTableInMemory(ADataSet.FieldDefs); 
   DataSet.Open; 
end;

   ADataSet.Free; 
end; 

一、 Delphi使用內存表
1.1 Delphi創建內存表步驟:
1. 創建一個Ttable實例。
2. 設置一個DataBaseName為一個目錄或是已有的數據庫別名。
3. 指定TableName的值。
4. 設置TableType屬性指明要創建的數據庫表類型。(如果此屬性為ttDefault表示數據庫類型與TableName指定值的擴展名對應)。
5. 調用TTable.FidldDefs對象的Add方法向數據庫表中添加字段。Add有4個參數:
 字段名:string。
 字段類型:TfieldType。
 字段大小:Word。一般只對String和Memo類型使用。
 字段是否NotNull: Boolean。
6. 使用TTable.IndexDefs.Add()方法定義索引。Add有三個參數:
 索引名:string;
 索引字段名:string;
 索引類型:TIndexOptions;
7. 調用TTable的CreateTable。這種方法適用於本地表。SQL表要用TQuery來創建。

代碼如下:
var
MemTable: TTable;
begin
with MemTable.Create(Self) do
begin
DatabaseName := 'c:\Temp';
TableName := 'Test';
TableType := ttParadox;
with FieldDefs do
begin
Add('Age', ftInteger, 0, True);
Add('Name', ftString, 25, False);
Add('Weight', ftFloat, 0, False);
end;
IndexDefs.Add('', 'Age', [ixPrimary, ixUnique]);
CreateTable;
end;
end;
二、 kbmMemTable使用簡述
2.1 kbmMemTable創建步驟:
1. 創建一個kbmMemTable對象實例。
2. 調用kbmMemTable.FidldDefs對象的Add方法向數據庫表中添加字段。Add的方法和Delphi相同。
3. 使用kbmMemTable.IndexDefs.Add()方法定義索引。Add的方法和Delphi相同。
4. 調用kbmMemTable的CreateTable。
重要的區別:因為kbmMemTable不需要BDE的支持。所以不要指明DatabaseName, TableName和TableType三個屬性。
  
代碼如下:
with kbmMemTable1 do
begin
with kbmMemTable1.FieldDefs do
begin
Clear;
Add('Period', ftInteger, 0, false);
Add('VALUE', ftLargeInt, 0, false);
Add('BytesField', ftBytes, 20, false);
Add('Color', ftInteger, 0, false);
Add('Date', ftDate, 0, false);
Add('Memo', ftMemo, 0, false);
Add('AutoInc', ftAutoInc, 0, false);
end;
with kbmMemTable1.IndexDefs do
begin
Clear;
Add('Index1', 'VALUE', []);
end;
CreateTable;
end;


三、與Delphi創建內存表的對比
3.1主從表功能
kbmMemTable可以象其它TDataSet一樣,通過設置MasterSource和MasterField來簡單的完成主從表的操作。
3.2 SQL功能
  沒有發現kbmMemTable可以支持SQL語句的操作。它提供按字段排序和對排序字段的查找功能。
三、 kbmMemTable特點
從其它TDataSet得到數據。
代碼如下:
LoadFromDataSet(Table1, [mtcpoStructure, mtcpoProperties]);
這樣kbmMemTable就完全得到來自一個DataSet對象中的全部數據.
保存和載入內存表中數據的功能
Delphi的TTable不提供SaveToFile功能。
kbmMemTable提供保存到文件的功能,保存的文件有兩種格式:
Options: TkbmMemTable.SaveFlags; 
1. 二進制格式。kbmMemTable.SaveToBinaryFile('c:\test.bin', Options).
kbmMemTable1.LoadFromBinaryFile('c:\test.bin')
2. .csv格式。kbmMemTable.SaveToFile('c:\test.csv', Options);
kbmMemTable1.LoadFromFile('c:\test.csv')
(一種Excel支持的文檔格式)打開后的內容如下:
@@FILE VERSION@@ 200 
@@TABLEDEF START@@ 
Period=Integer,0,"Period","",10 
VALUE=LargeInt,0,"VALUE","",15 
BytesField=Bytes,20,"BytesField","",10 
Color=Integer,0,"Color","",10 
Date=Date,0,"Date","",10 
Memo=Memo,0,"Memo","",10 
AutoInc=AutoInc,0,"AutoInc","",10 
CALC=String,20,"CALC","",20 
@@TABLEDEF END@@ 
Period VALUE BytesField Color Date Memo AutoInc CALC
1 198 0 02/11/2001 This is a memo%n2001-11-2 10:19:52 1 0 1-二月
2 196 3 03/11/2001 This is a memo%n2001-11-2 10:19:52 2 1 2-三月
在文檔的頭部份描述了表的字段結構,在下面則是數據區域。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM