【问题标题】:Delphi 10.2: Using Local SQL with Firedac Memory TablesDelphi 10.2:使用本地 SQL 和 Firedac 内存表
【发布时间】:2020-03-08 12:16:57
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql delphi firedac memory-table


    【解决方案1】:

    这是我前段时间在这里为答案编写的一些代码,这是一个使用 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 数据集。

    【讨论】:

    • 谢谢,这正是我所做的一个不同之处:我从流中加载了内存表。从流中加载时,它们似乎失去了名称,因为如果我手动添加记录,它就可以工作。所以我只是在从流中加载后再次设置名称一切正常。您向我指出了在代码中添加记录的方向,所以我接受您的回答!
    • 嗯,这有点奇怪。我已经更新了我的答案,以便在 FormCreate 期间将 FDMemtable 保存到内存流中并从中重新加载,但这工作正常并且不会影响 LocalSql 操作。
    猜你喜欢
    • 2016-05-04
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    相关资源
    最近更新 更多