1

如何将 Firedac LocalSQL 与 FDMemtable 一起使用?有没有可用的工作示例?

根据Embarcadero DocWiki,我设置了一个本地连接(使用 SQLite 驱动程序)、一个 LocalSQL 组件并将一些 Firedac 内存表连接到它。然后我连接了一个 FDQuery 并尝试查询内存表。但是,即使我为 localSQL 数据集集合中的内存表设置了显式数据集名称,查询也总是返回“table xyz not known”。

我怀疑我错过了 Embarcadero 文档中未包含的一些基本内容。如果有人曾经启动并运行它,我将不胜感激一些提示。

4

1 回答 1

3

这是我不久前在这里为答案编写的一些代码,这是一个独立的 using 示例LocalSQL,在 D10.2(西雅图)中进行了测试。这应该足以让你继续前进。正如您所指出的,让它工作的关键是 EMBA 文档中某处的评论,即 FD 的 LocalSQL 基于 Sqlite。

procedure TForm3.CopyData2;
begin
  DataSource2.DataSet := FDQuery1;

  FDConnection1.DriverName := 'SQLite';
  FDConnection1.Connected := True;

  FDLocalSQL1.Connection := FDConnection1;
  FDLocalSQL1.DataSets.Add(FDMemTable1);

  FDLocalSQL1.Active := True;

  FDQuery1.SQL.Text := 'select * from FDMemTable1 order by ID limit 5';
  FDQuery1.Active := True;

  FDMemTable1.Close;
  FDMemTable1.Data := FDQuery1.Data;
end;

procedure TForm3.FormCreate(Sender: TObject);
var
  i : integer;
  MS : TMemoryStream;
begin
  FDMemTable1.CreateDataSet;
  for i := 1 to 10 do
    FDMemTable1.InsertRecord([i, 'Row:' + IntToStr(i), 10000 - i]);
  FDMemTable1.First;

  //  Following is to try to reproduce problem loading from stream
  //  noted by the OP, but works fine
  MS := TMemoryStream.Create;
  try
    FDMemTable1.SaveToStream(MS, sfBinary);
    MS.Position := 0;
    FDMemTable1.LoadFromStream(MS, sfBinary);
  finally
    MS.Free;
  end;
end;

如您所见,您可以在 SQL 中简单地通过使用其组件名称来引用现有 FireDAC 数据集。

于 2019-11-12T18:39:16.923 回答