您的位置:首页 > 编程语言 > Delphi

delphi学习点滴——用AdoDataSet实现数据表的导入导出

2011-12-22 13:31 831 查看
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;

  

  如果对数据表的情况进行进一步的考虑,并结合更周密的导入导出方案,比如导入指定字段、导入指定字段、导入指定记录等等,对导入导出过程进行更详细的控制,就可以实现强大的、通用的数据表的导入导出工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: