首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi Firedac内存表

Delphi Firedac内存表
EN

Stack Overflow用户
提问于 2016-01-27 07:35:50
回答 1查看 1.4K关注 0票数 1

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

代码语言:javascript
复制
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));`     
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-27 08:34:33

这是你真正的代码吗,它完成了吗?你要连续给CreateDataSet打两次电话

代码语言:javascript
复制
DataForm.mtDebTran.CreateDataSet
DataForm.mtDebTran.CreateDataSet;

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

你说“但它在打开后返回一个空表”。想必你是想问为什么会这样。嗯,在

代码语言:javascript
复制
DataForm.mtDebTran.Close;
DataForm.mtDebTran.Open;

调用.Close之后,mtDebTran将不包含数据,因为当调用的.Close和调用.Open时,DataSet将丢弃数据--数据集仍然是空的。要获得数据,您需要从.SaveToFile创建的文件中重新加载数据。当然,也不能首先调用.Close。

顺便说一句,在您的代码中,mtDebTran是DataForm的成员,但是在您的提问中,您说“我在数据模块中创建了一个FireDac内存表”,那么FireDac表大概是一个与mtDebTran不同的表吗?

另外,如果mtDebTran实际上是一个TClientDataSet,那么在Q中提到FireDac表及其标题是不相关的和误导的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35031304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档