我正在尝试用Firedac MemoryTables替换运行正常但对大型数据非常慢的Delphi ClientDatasets
我在数据模块中创建FireDac内存表,然后从表单中填充它。在表格中,我检查“内存表”的记录计数,其中包含记录。然后,我关闭内存表并重新打开它,但是打开后它返回一个空表。
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之前包含数据,则该调用将清空它,因为这是应该做的。
您说“但打开后它将返回一个空表”。大概是想问为什么会这样。好吧,在
DataForm.mtDebTran.Close;
DataForm.mtDebTran.Open;
在调用.Close之后,mtDebTran将不包含任何数据,因为在调用.Close并调用.Open时,DataSet会丢弃其数据,而数据集将仍然为空。要获取数据,您需要从.SaveToFile中创建的文件中重新加载数据。还是不打电话。首先关闭。
顺便说一句,在您的代码中,mtDebTran是DataForm的成员,但在您的q文本中。您说“我在数据模块中创建FireDac内存表”,因此推测FireDac表与mtDebTran不同吗?
顺便说一句,如果mtDebTran实际上是一个TClientDataSet,则在您的q中提及FireDac表,其标题是无关紧要的,并且具有误导性。