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