UsersForm 是一个公司清单,里面有一个DBGRID1,双击记录会跳一个新窗体UsersEditForm,是编辑记录的.如果有我下面的调用方法建窗体,而不是用传统的方法,那么UsersEditForm关闭时,执行:        DataM.Users.Close;
        DataM.Users.Open;
        DataM.ds_Users.DataSet:=DataM.Users;//出错的行
        UsersForm.DBGrid1.DataSource:=DataM.ds_Users;  //出错的行就会出错!!!为什么?啊?如果把上面最后两句去掉就行...如何改进我的ExecuteForm函数?怎么搞?请各位高人帮忙啊...在线等//调用创建
ExecuteForm(TUsersForm,'用户清单');
//动态创建窗体
function ExecuteForm(AFormClass:TFormClass;Title:String):Boolean;Overload;
begin
  Screen.Cursor:= crHourGlass;
  with AFormClass.Create(Application) do
  begin
    Screen.Cursor:= crDefault;
    Position:=poScreenCenter;
    if Title<>'' then Caption:=Title;
    ShowModal;
  end;
end;

解决方案 »

  1.   

    内存地址类错误 ...Access violation at address 0054C774 in module "company"..
      

  2.   

    是不是UsersEditForm窗口在创建后没有释放的原因
      

  3.   

                    DataM.Users.Close; 
                    DataM.Users.Open; 
                    DataM.ds_Users.DataSet:=DataM.Users;//出错的行 
                    UsersForm.DBGrid1.DataSource:=DataM.ds_Users;     //出错的行
    从上来看,估计datam.ds_users是个datasource的类
    而第三行的dataset是什么?类型不对吧.你把第三行改为datam.ds_users.dataset改下