Delphi Firedac内存表

时间:2016-01-27 07:35:50

标签: delphi firedac

我正在尝试用Firedac MemoryTables替换Delphi ClientDatasets,它工作得很好,但对大数据的速度非常慢 我在数据模块中创建一个FireDac内存表,并从表单中填充它。在表单I中检查内存表的记录计数,它包含记录。然后我关闭内存表并重新打开它,但它在打开后返回一个空表。

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));`     

1 个答案:

答案 0 :(得分:5)

这是您的真实代码,是否完整?你连续两次调用CreateDataSet

DataForm.mtDebTran.CreateDataSet
DataForm.mtDebTran.CreateDataSet;

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

你说“但它在打开后会返回一张空表。”并且大概是你打算问为什么会这样。好吧,在

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

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

顺便说一句,在您的代码中,mtDebTran是DataForm的成员,但是在您的q的文本中。你说“我在数据模块中创建一个FireDac内存表”,所以大概是FireDac表与mtDebTran不同?

另外顺便说一句,如果mtDebTran实际上是一个TClientDataSet,那么在你的q中提及FireDac表并且它的标题是无关紧要和误导性的。