我有一个包含信息的TClientDataSet,不链接到任何GUI组件。
在线程中我找到相关记录,进入编辑模式并更改值。因为它发生在一个线程中,我在定位之前使用TCriticalSection直到发布之后。看起来像这样:
cs.Enter;
if not cds4Process.Locate('locator',locator,[]) then exit;
cds4Process.Edit;
cds4Process.FieldByName('field1').AsDateTime := pDay;
cds4Process.FieldByName('field2').AsFloat := amnt;
cds4Process.Post;
cs.leave;
cds4Process位于主窗体上,并且没有链接到任何GUI组件,我没有将它作为参数传递给线程。
我多次执行该线程,在某些时候,我得到一个错误,指出cds4Process没有处于插入或编辑模式。即使上面的代码序列在我使用cds4Process的所有地方都是一样的。
有什么想法吗?我错过了什么?
答案 0 :(得分:1)
我会将与TClientDataSet相关的所有内容(其连接组件,持久字段等)放在TDataModule上而不是主窗体上,然后在线程中创建此数据模块的实例。
使用这个线程绑定的TDataModule作为数据访问组件的容器将允许可视化设计,并防止我意外地使用VCL主线程。