我试图用Firedac ClientDatasets替换工作良好但速度非常慢的Delphi,我在一个数据模块中创建了一个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));` 发布于 2016-01-27 08:34:33
这是你真正的代码吗,它完成了吗?你要连续给CreateDataSet打两次电话
DataForm.mtDebTran.CreateDataSet
DataForm.mtDebTran.CreateDataSet;没有明显的原因,但是无论如何,如果您的mtDebTran数据集应该在第一次调用CreateDataSet之前包含数据,该调用将清空它,因为这就是它应该做的。
你说“但它在打开后返回一个空表”。想必你是想问为什么会这样。嗯,在
DataForm.mtDebTran.Close;
DataForm.mtDebTran.Open;调用.Close之后,mtDebTran将不包含数据,因为当调用的.Close和调用.Open时,DataSet将丢弃数据--数据集仍然是空的。要获得数据,您需要从.SaveToFile创建的文件中重新加载数据。当然,也不能首先调用.Close。
顺便说一句,在您的代码中,mtDebTran是DataForm的成员,但是在您的提问中,您说“我在数据模块中创建了一个FireDac内存表”,那么FireDac表大概是一个与mtDebTran不同的表吗?
另外,如果mtDebTran实际上是一个TClientDataSet,那么在Q中提到FireDac表及其标题是不相关的和误导的。
https://stackoverflow.com/questions/35031304
复制相似问题