将TFDMemTable数据附加到一个XML文件中

时间:2016-03-21 17:20:38

标签: delphi delphi-xe firedac

有没有办法将所有数据库记录和结构保存为多个查询到一个XML文件中?

我做的是:

procedure CopyRecords(Sender: TObject);
begin
  try

  TFDQuery.SQL.Text := 'SELECT * FROM SAMPLE_TABLE1';
  TFDQuery.FetchOptions.Unidirectional := False;
  TFDQuery.Open;
  TFDQuery.FetchAll;

  TFDmemtable.Data := DM.qry_SQL.Data;
  TFDmemtable.First;

  while not TFDmemtable.Eof do
  begin
    TFDmemtable.Edit;

    TFDmemtable.Post;
    TFDmemtable.Next;
  end;

  TFDmemtable.SaveToFile('C:\Test.xml', sfXML); 
  finally
    TFDmemtable.Close;
  end;
end;

这适用于一个查询,但如果我更改SQL文本并保留文件名,则会重写内容。我想更改查询(SQL.text)并将所有查询数据保存到一个 XML文件中。

TFDQuery.SQL.Text := 'SELECT * FROM SAMPLE_TABLE1';
... save ...
TFDQuery.SQL.Text := 'SELECT * FROM SAMPLE_TABLE2';
... save (append) ...

1 个答案:

答案 0 :(得分:3)

如果你想要创建/附加到你所描述的Xml文件,你实际上并不是 需要使用FDMemTable。您可以直接从您的FDQuery中执行以下所示的操作。

你基本上会看到它

  • 以XML格式将TFDQuery保存到TStringStream;
  • 使用将StringStream的内容加载到XmlDocument对象中 的Windows' MSXML DOM解析器;
  • 将先前保存的查询的XML文件加载到第二个XmlDocument中;和
  • 将保存的查询中的'report_abuse'节点的内容复制到 第二个XmlDocument并保存文档。

代码:

class AbuseType extends AbstractType
{
    // ...

    $builder->add('subject', TextType::class, array(
        'label' => 'label.subject',
        'data' => 'report_abuse',
        'disabled' => 'true',
    ))

    // ...   
 }