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 及其标题是无关紧要且具有误导性的。
我正在尝试用 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 及其标题是无关紧要且具有误导性的。