Delphi Firedac 内存表

Delphi Firedac Memory Tables

我正在尝试用 Firedac MemoryTables 替换 Delphi ClientDatasets 工作正常但在大数据上非常慢 我在数据模块中创建了一个 FireDac Memory Table 并从表单中填充它。在表格中,我检查了内存 Table 的记录数,它包含记录。然后我关闭内存 table 并重新打开它,但它 returns 打开后是空的 table。

Dataform.mtDebTran.FileName := CdsDir + '/DebTran.Fds';
DataForm.mtDebTran.CreateDataSet
DataForm.mtDebTran.CreateDataSet;
DataForm.mtDebTran.Open;
DataForm.BuildDebTranTemp1(P1,P2,P3,P4,True,True);
DataForm.mtDebTran.SaveToFile(CdsDir + '/DebTran',sfBinary);
ShowMessage(IntToStr(DataForm.mtDebTran.RecordCount));
DataForm.mtDebTran.Close;
DataForm.mtDebTran.Open;
ShowMessage(IntToStr(DataForm.mtDebTran.RecordCount));`     

那是你的真实代码吗?它是完整的吗?您连续两次调用 CreateDataSet

DataForm.mtDebTran.CreateDataSet
DataForm.mtDebTran.CreateDataSet;

没有明显的原因,但无论如何,如果您的 mtDebTran 数据集应该在第一次调用 CreateDataSet 之前包含数据,那么该调用将清空它,因为这是它应该做的。

你说 "but it returns an empty table after opening." 大概你想问为什么会这样。嗯,在

DataForm.mtDebTran.Close;
DataForm.mtDebTran.Open;

在调用 .Close 之后,mtDebTran 将不包含任何数据,因为 DataSet 在调用 .Close 时丢弃了它的数据,而调用 .Open 将不会恢复它 - 数据集仍然是空的。要获取数据,您需要从 .SaveToFile 中创建的文件重新加载数据。当然,或者首先不调用 .Close。

顺便说一句,在您的代码中,mtDebTran 是 DataForm 的成员,但在您的 q 文本中。你说 "I create a FireDac Memory Table in a data module" 那么 FireDac table 可能与 mtDebTran 不同?

此外,如果 mtDebTran 实际上是一个 TClientDataSet,那么在您的问题中提及 FireDac tables 及其标题是无关紧要且具有误导性的。