我想先按专业查询,在dbgrid中列出老师的姓名,再在dbgrid中选老师的名字,在下边的edit中输出老师的详细情况,请高手帮忙看程序是怎么做的
   查询老师姓名,我已经作好下边是程序的后半部分
begin
     adoquery1.Close;
     adoquery1.SQL.Clear;
     adoquery1.SQL.Add('select * from 教师表');
     adoquery1.SQL.Add('where 教师姓名=:教师姓名');
     adoquery1.Parameters.ParamByName('教师姓名').Value:=dbgrid1.SelectedField.Text;
     adoquery1.Open;     edit1.Text:=dbgrid1.Fields[1].AsString;
     edit2.Text:=dbgrid1.Fields[4].AsString;
end;

解决方案 »

  1.   

    编译通过,运行报错!! TMD!!project project1.exe raised exception class EAccessViolation with message'Access violation at address 0046d261 in module 'project1.exe' read of address 000000d2'.process stopped . step or run to continue.
      

  2.   

    adoquery1.Parameters.ParamByName('教师姓名').Value:=dbgrid1.datasource.dataset.fieldbyname('教师姓名').asstring;
      

  3.   

    该错误提示与数据表的状态有关。可以用dbedit来显示教师的详细信息
      

  4.   

    我把edit控件换成dbedit控件,为什么不能使用datafield属性呢,老是提示错误
    adoquery1:missing sql property 请问这是什么原因呢?
      

  5.   

    你的DBGRid1 连接的是ADOQuery1吧?否则我觉得不会出现这种情况!
      

  6.   

    是啊,我的dbgrid连接的是adoquery1,
    如果不连接adoquery1的话,首先进行的按专业查询怎么进行?不会显示啊
    如果连接adoquery1的话,下面的dbedit又没有办法绑定?
    这个问题怎么解决呢?
      

  7.   

    adoquery1:missing sql property 请问这是什么原因呢?你的属性中  没有 写SQL语句
      

  8.   

    edit2.Text:=dbgrid1.Fields[4].AsString;错!!!!!
    建议使用:
         edit1.Text:=adoquery1.fieldbyname('需要显示的字段').AsString;
         edit2.Text:adoquery1.fieldbyname('需要显示的字段').AsString;
      

  9.   

    “在dbgrid中选老师的名字,”这个事件应该是在dbgrid的oncellclick事件中写代码~oncellclick事件的参数是DBGrid1CellClick(Column: TColumn);这个时候,要得到当前选择的内容直接用var TeacherName:string;
        TeacherName:=Column.Field.Value;就可以了~然后
    with adoquery1 do
       begin
         close;
         sql.clear;
         sql.add('select * from 教师表 where 教师姓名='''+TeacherName+'''');
         open;//如果选择结果只有一条纪录,就可以按下面代码赋值
         edit1.text:=FieldByName('什么什么').asstring;
       end;
      
    上面是我想的代码,但是估计不会出错,你试一下吧~要是可以记得给分就可以了~