如何以最佳方式将数据集字段设置为非空值



我有一个客户端数据集,其中的字段已更新当消息从外部通信渠道传入时。并非所有字段都会由每条消息更新。

数据集由数据库网格显示。某些字段使用 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的建议。

最新更新