我希望将ClientDataSet保存到文件中,然后在AdoQuery(AdoQuery.LoadFromFile())中打开此文件。 有可能吗?
或者如何将数据集保存为pfADTG文件格式?
祝你好运
的Pawel
答案 0 :(得分:3)
我希望将ClientDataSet保存到文件中,然后在AdoQuery(AdoQuery.LoadFromFile())中打开此文件。有可能吗?
没有。 TClientDataSet和TCustomAdoDataSet后代(如TAdoQuery)使用的文件格式在二进制版本或XML版本中彼此不兼容。我想你可以尝试使用Delphi的TXmlTransform将保存的CDS文件转换为Ado格式,但我自己从未这样做过。
或者如何将数据集保存为pfADTG文件格式?
如果“dataset”表示TClientDataSet,则无法直接执行此操作。您可以做的最好的事情是从CDS到AdoQuery逐个字段地逐行复制,然后在AdoQuery上调用SaveToFile。
更新:在这个答案的编辑中,我恐怕不得不拒绝,你问如果你的AdoDataSet是空的并且没有连接字符串该怎么办;好吧,当然可以使用TATDataSet在本地使用SaveToFile和LoadFromFile存储数据。下面是一个极简主义项目,它创建并填充ClientDataSet,然后将其结构和数据复制到AdoDataSet。
procedure TForm1.FormCreate(Sender: TObject);
var
i : Integer;
begin
// Note: ClientDataSet1 has had two FieldDefs created in the IDE,
// an ID integer field and an AName string field with a size of 20
// Create and populate ClientDataSet1
ClientDataSet1.CreateDataSet;
ClientDataSet1.InsertRecord([1, 'Name1']);
ClientDataSet1.InsertRecord([2, 'Name2']);
// Copy ClientDataSet1's FieldDefs to AdoDataSet1
AdoDataSet1.FieldDefs.Assign(ClientDataSet1.FieldDefs);
// Now, copy the data fielf-by-field, row-by-row
AdoDataSet1.CreateDataSet;
try
ClientDataSet1.DisableControls;
AdoDataSet1.DisableControls;
ClientDataSet1.First;
while not ClientDataSet1.Eof do begin
AdoDataSet1.Insert;
for i := 0 to ClientDataSet1.FieldCount - 1 do begin
AdoDataSet1.Fields[i].Value := ClientDataSet1.Fields[i].Value;
end;
AdoDataSet1.Post;
ClientDataSet1.Next;
end;
// Save Ado data to file, beware of path used!
AdoDataSet1.SaveToFile(ExtractFilePath(Application.ExeName) + 'AdoData', pfADTG);
finally
AdoDataSet1.EnableControls;
ClientDataSet1.EnableControls;
end;
end;