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
AdoDataDest
Close;
AdoDataSetDest
CommandText := Format(
select * from %s where %s=%s
[strTableName
strKeyFieldName
QuotedStr(strKeyValue)]);
AdoDataSetDest
Open;
AdoDataSetDest
First;
AdoDataSetDest
Edit;
for I:=
to FieldList
Count
do
AdoDataSetDest
Fields[I] := Fields[I];
AdoDataSetDest
Post;
end
else // 添加記錄
begin
AdoDataDest
Close;
AdoDataSetDest
CommandText := Format(
select * from %s where
=
[strTableName]); // 獲取字段列表
AdoDataSetDest
Open;
AdoDataSetDest
Insert;
for i:=
to FieldList
Count
do
AdoDataSetDest
Fields[i] := Fields[i];
AdoDataSetDest
Post;
end;
Next;
end;
end;
// 判斷指定主鍵值的記錄在表中是否存在
function RecordInDest(strTableName
strKeyFieldName
strKeyValue: string): boolean;
begin
with AdoQuery
do
begin
Close;
SQL
Clear;
SQL
Add(Format(
select count(*) from %s where %s=%s
[strTableName
strKeyFieldName
QuotedStr(strKeyValue)]));
Open;
result := Fields[
]
AsInteger >
;
Close;
end;
end;
如果對數據表的情況進行進一步的考慮
並結合更周密的導入導出方案
比如導入指定字段
導入指定字段
導入指定記錄等等
對導入導出過程進行更詳細的控制
就可以實現強大的
通用的數據表的導入導出工具
From:http://tw.wingwit.com/Article/program/Delphi/201311/24706.html