小妹是初学者,编“用户管理”这项功能时,编译没错,运行就出现了'read of address 000000D2'!  
怎么回事啊?涉及代码是:  YHq.Close;                   //查出用户信息
  YHq.SQL.Clear;
  YHQ.SQL.Add('SELECT A.users as 用户名,B.qxm as 权限 FROM c_user AS A ');
  YHQ.SQL.Add('INNER JOIN c_qxb AS B ON A.QXID=B.QXID');
  YHQ.Open;              //这是个ADOQUERY  QXM_ADOQ:=TADOQuery.Create(nil);      //动态创建ADOQuery控件
  QXM_ADOQ.Connection:=DM.dbstudy_ADOConn;
  QXM_ADOQ.SQL.Add('SELECT QXM FROM c_qxb');
  QXM_ADOQ.Open;
  while not QXM_ADOQ.Eof do
    begin
      QXCB.Items.Add(QXM_ADOQ.FieldValues['QXM']);    //取出权限名字段
      QXM_ADOQ.Next;
    end;
  QXM_ADOQ.Close;
  FreeAndNil(QXM_ADOQ);
  ShowYHInfo;    //这是个函数
  YHtable.Open;   //单步到这,就出现那个框框了 其中
 //编写用户信息函数
Procedure Txtgl_Form.ShowYHInfo;
begin
  YHM.Text:=DBGrid1.Fields[0].Text;
  YHM.Enabled:=false;
  QXcb.ItemIndex:=QXCB.Items.IndexOf(DBGrid1.Fields[1].Text);
  if YHM.Text<>YH then
    begin
      MM.Enabled:=false;
      reMM.Enabled:=false;   //YHM,MM,REMM都是编辑框的NAME
    end
    else begin
      MM.Enabled:=true;
      ReMM.Enabled:=true;
    end;
end;我想实现的是:取出用户名和用户权限名(管理员或一般用户)
其中用户名在c_user表内,权限名在c_qxb内到底为什么出现那个错呢?哪位仁兄能帮我解答下,谢了

解决方案 »

  1.   

    YHtable.Open;   //单步到这,就出现那个框框了YHtable的相关设置有误!
      

  2.   

    YHM.Text:=DBGrid1.Fields[0].Text;DataSet 在之前已經 freeandnil 了
    再在這調用會出錯,
    如果DBGrid1的DataSet 是 QXM_ADOQ 的話
      

  3.   

    哦 回复小步  我的dbgrid1的dataset 是 yhq ,
    QXM_ADOQ是动态创建的啊!
    YHtable设置也与数据库连了,且tablename是我的用户表c_user
    有什么问题么?谢谢!
      

  4.   

    我知道哪错了,是我数据网格dbgrid字段的属性有问题,嘿嘿!已恢复正常
    不过还有些小问题,我先自己研究下,有不会的再告知大家!
    谢谢大家指导!
      

  5.   

    现在只有两个小问题了。
    其一:我删除、添加、修改完用户信息,dbgrid没有立刻刷新。在重新登陆时才显示刷新后的结果。我在代码里加了table.refreshi里也不对,dbgrid.refresh也不对。不清楚怎么改啦!!!
    代码为:
     begin
          //YH_ADOQ.Delete;    //由于ADOQuery没有查出表中所有的字段,故不能用这一语句
          if YHtable.Locate('Users',DBGrid1.Fields[0].Text,[loCaseInsensitive]) then
            try
              YHtable.Delete;
              MessageBox(handle,'用户删除成功!','成功',MB_OK or MB_ICONINFORMATION);          YHtable.Close;
              YHtable.Open;        except
              MessageBox(handle,'发生未知错误:用户删除失败!','错误',MB_OK or MB_ICONERROR);
            end;
          YHM.Text:='';
          QXCB.ItemIndex:=-1;
          MM.Text:='';
          reMM.Text:='';
        end;其二:权限名combobox里显示的字段名与我数据库里的字段相反!我数据库里:
    0是一般用户  1是管理员。
    可是操作时我选择管理员时,系统认成一般用户!!正好都反了...怎么回事呀?
    检查了代码,查不出问题:
    QXM_ADOQ:=TADOQuery.Create(nil);      //动态创建ADOQuery控件
      QXM_ADOQ.Connection:=DM.dbstudy_ADOConn;
      QXM_ADOQ.SQL.Add('SELECT QXM FROM c_qxb');
      QXM_ADOQ.Open;
      if QXM_ADOQ.RecordCount>0 then
        while not QXM_ADOQ.Eof do
          begin
            qxcb.Items.Add(QXM_ADOQ.FieldValues['qxm']);  //选择框取得用户名表
            QXM_ADOQ.Next;
          end;
    这两个问题请各位指点!!万分感谢!!