我有一个客户端数据集,其中的字段已更新当消息从外部通信渠道传入时。并非所有字段都会由每条消息更新。
数据集由数据库网格显示。某些字段使用 OnDrawColumnCell 事件显示。
在启动阶段,在 recird 存在之前,可以按任何顺序接收消息。在每个帖子之后,生成 OnDrawColumnCell 事件,但并非所有字段都已写入,并且为空。
空字段在OnDrawColumCell想要使用它们时会导致异常。我需要确保所有字段始终为非空,例如,在创建记录时用默认值填充所有记录。
最后是我的问题。
问题 1:在记录创建时默认所有字段是最佳方法吗? 当情况发生变化时,它需要维护纪律。
Q2:尝试/除了是活动中捕捉到这个的好方法吗? 它也需要纪律,抓住一切。
Q3:有没有更好的方法来避免这个问题?
Q4: 我思考不正常吗?
感谢您的任何建议,
安德斯·约翰逊
可以使用 ClientDataSet 的 OnNewRecord 事件来设置字段的初始值:
procedure CDS1.OnNewRecord(DataSet: TDataSet);
begin
DataSet.FieldByName('SomeField').AsString := ''; // this is NOT
// the same as leaving the field in its initial, NULL, state
end;
问题 1:在记录创建时默认所有字段是最佳方法吗?当情况发生变化时,它需要维护纪律。
无论如何,如果您不希望遇到 NULL 值时出现未定义的行为,则应该这样做。
Q2:尝试/除了是活动中捕捉到这个的好方法吗?它也需要纪律,抓住一切。
不是特别的,因为应用程序异常处理程序无论如何都会捕获它。
Q3:有没有更好的方法来避免这个问题?
是的,请参阅上面的OnNewRecord。
Q4: 我思考不正常吗?
是的,恕我直言,你不是。 特别是,无论OnNewRecord如何,您都需要预料到意想不到的情况(又名"防御性编程"),因此请注意Val Marinov关于OnDrawCell的建议。