程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 用AdoDataSet實現數據表的導入導出 (1)

用AdoDataSet實現數據表的導入導出 (1)

編輯:Delphi
Delphi中的AdoDataSet是支持ADO訪問的主要組件,它支持從數據表直接獲取數據,支持用SQL語句獲取數據。最重要的是,它定義和實現了兩個重要的例程:



  procedure LoadFromFile(const FileName: WideString);它從文件中加載數據集。

  procedure SaveToFile(const FileName: String = ''; Format: TPersistFormat = pfADTG);它將數據集保存到文件中。Format確定文件中數據集的保存格式,可以使用的有pfADTG (Advanced Data Tablegram format)、pfXML(Extendable Markup Language)。

  因此AdoDataSet是實現導入導出的良好的基礎。

  1.數據表的導出

  導出數據表的操作如下:

  1)打開數據表,設置需要導出的條件;

  2)使用AdoDataSet,調用SaveToFile導出記錄;

  下面是一個導出操作的示例(假定導出指定數據表的全部記錄)。


  procedure  ExportData(strFileName, strTableName: string);

  begin

  with AdoDataSet1 do

  begin

  Close;

  CommandText := ‘select * from ’ + strTableName;

  Open;

  SaveToFile(strFileName);

  Close;

  end;

  end;

2.數據表的導入

  下面是一個導入操作的示例(假定存在相同主鍵記錄時更新目的表;假定數據表為單主鍵字段,且其字段類型為字符串型)。


  Procedure  ImportData(strFileName, strTableName, strKeyFIEldName: string);

  begin

  with AdoDataSet1 do

  begin

  Close;

  LoadFromFile(strFileName);

  First;

  While not eof do

  begin

  StrKeyValue := FieldByName(strKeyFIEldName).AsString;

  If RecordInDest(strTableName, strKeyFIEldName, strKeyValue) then

  begin

  AdoDataDest.Close;

  AdoDataSetDest.CommandText := Format(‘select * from %s where %s=%s’,[strTableName, strKeyFIEldName, QuotedStr(strKeyValue)]);

  AdoDataSetDest.Open;

  AdoDataSetDest.First;

  AdoDataSetDest.Edit;

  for I:=0 to FIEldList.Count-1 do

  AdoDataSetDest.Fields[I] := FIElds[I];

  AdoDataSetDest.Post;

  end


  else         // 添加記錄

  begin

  AdoDataDest.Close;

  AdoDataSetDest.CommandText := Format(‘select * from %s where 1=0’,[strTableName]);  // 獲取字段列表

  AdoDataSetDest.Open;

  AdoDataSetDest.Insert;

  for i:=0 to FIEldList.Count-1 do

  AdoDataSetDest.Fields[i] := FIElds[i];

  AdoDataSetDest.Post;

  end;

  Next;

  end;

  end;

  // 判斷指定主鍵值的記錄在表中是否存在

  function RecordInDest(strTableName, strKeyFIEldName, strKeyValue: string): boolean;

  begin

  with AdoQuery1 do

  begin

  Close;

  SQL.Clear;

  SQL.Add(Format(‘select count(*) from %s where %s=%s, [strTableName, strKeyFIEldName, QuotedStr(strKeyValue)]));

  Open;

  result := FIElds[0].AsInteger > 0;

  Close;

  end;

  end;

  如果對數據表的情況進行進一步的考慮,並結合更周密的導入導出方案,比如導入指定字段、導入指定字段、導入指定記錄等等,對導入導出過程進行更詳細的控制,就可以實現強大的、通用的數據表的導入導出工具。

 

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