有这样一个数据库应用程序:form上放置各种数据感知控件(如DBGrid),数据集组件(如ADODataSet)放置在DataModule中.然后在ADODataSet的BeforePost事件中检查DBGrid的某个字段内容是否为空,用了如下代码:
procedure DM.ADODataSetBeforPost(DataSet:TDataSet)
begin
   if((DataSet.fieldbyName('Name').isNull)then
   begin
      Form.ErrorString:='字段为空'; //程序执行到此处时出错,
   end;
end;为什么不能在DataModule中引用form上的东西呢?

解决方案 »

  1.   

    DataModule主要作为数据控件的共享、统一管理用。父类是:TDataModule而窗体父类是:TForm
    所以DataModule当然不能引用窗体属性等
      

  2.   

    打错了,对不起,是:form 单元
      

  3.   

    有可能为单元引用错误,
    假如你的数据模块单元是DMUnit,你的窗口单元是Unit1,
    则在DMunit中把Uses Unit1写Interface下面的
    在Unit中,把Uses DMunit写在implementation下面, 这样试试
      

  4.   

    真是不好意思,又错了,最近搞数据库都搞晕了,见谅啊,:forms
      

  5.   

    而且提示的时候用:
    application.showmessage('...........
      

  6.   

    不管是forms,还是什么,都是一个道理!
      

  7.   

    一般在数据模块中不要牵涉到界面内容。
    即使要用,可以这样。
    procedure FillGrid(Grid:TStringGrid);
    就是封装界面操作函数在数据模块中。