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是实现导入导出的良好的基础
数据表的导出
导出数据表的操作如下
)打开数据表设置需要导出的条件
)使用AdoDataSet调用SaveToFile导出记录
下面是一个导出操作的示例(假定导出指定数据表的全部记录)
procedure ExportData(strFileName strTableName: string);
begin
with AdoDataSet do
begin
Close;
CommandText := select * from + strTableName;
Open;
SaveToFile(strFileName);
Close;
end;
end;
.数据表的导入
下面是一个导入操作的示例(假定存在相同主键记录时更新目的表假定数据表为单主键字段且其字段类型为字符串型)
Procedure ImportData(strFileName strTableName strKeyFieldName: string);
begin
with AdoDataSet do
begin
Close;
LoadFromFile(strFileName);
First;
While not eof do
begin
StrKeyValue := FieldByName(strKeyFieldName)AsString;
If RecordInDest(strTableName strKeyFieldName strKeyValue) then
begin
AdoDataDestClose;
AdoDataSetDestCommandText := Format(select * from %s where %s=%s[strTableName strKeyFieldName QuotedStr(strKeyValue)]);
AdoDataSetDestOpen;
AdoDataSetDestFirst;
AdoDataSetDestEdit;
for I:= to FieldListCount do
AdoDataSetDestFields[I] := Fields[I];
AdoDataSetDestPost;
end
else // 添加记录
begin
AdoDataDestClose;
AdoDataSetDestCommandText := Format(select * from %s where =[strTableName]); // 获取字段列表
AdoDataSetDestOpen;
AdoDataSetDestInsert;
for i:= to FieldListCount do
AdoDataSetDestFields[i] := Fields[i];
AdoDataSetDestPost;
end;
Next;
end;
end;
// 判断指定主键值的记录在表中是否存在
function RecordInDest(strTableName strKeyFieldName strKeyValue: string): boolean;
begin
with AdoQuery do
begin
Close;
SQLClear;
SQLAdd(Format(select count(*) from %s where %s=%s [strTableName strKeyFieldName QuotedStr(strKeyValue)]));
Open;
result := Fields[]AsInteger > ;
Close;
end;
end;
如果对数据表的情况进行进一步的考虑并结合更周密的导入导出方案比如导入指定字段导入指定字段导入指定记录等等对导入导出过程进行更详细的控制就可以实现强大的通用的数据表的导入导出工具