Delphi 10.2:在Firedac内存表中使用本地SQL

如何在FDMemtable中使用Firedac LocalSQL?有可用的工作示例吗?

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

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

lwt770906 回答:Delphi 10.2:在Firedac内存表中使用本地SQL

这是我前一段时间在这里写的一些答案的代码,这是使用LocalSQL的独立示例,已在D10.2(西雅图)中进行了测试。它足以使您前进。如您所知,Istr使其正常工作的关键是在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数据集。

本文链接:https://www.f2er.com/3115126.html

大家都在问