我是用两个adoquery,两个datasource,两个dbgrid,想做个主从表。当在主表中双击某条记录
(如王雁、女、某某学校毕业)时,从表中就会显示这个叫王雁的人的其它信息。我做的程序中
开始双击没有问题,但是击几条记录后从表中就显不出来信息了。
 with agzjl do
  begin
   close;
   sql.Clear;
   sql.Add('select id , stime ,etime from gzjl where id=:id');
   
   parameters.ParamByName('id').Value:=dbgrid1.Fields[0].AsInteger;
   open;
   end;

解决方案 »

  1.   

    parameters.ParamByName('id').Value:=
    DBGrid1.DataSource.DataSet.FieldByName('字段名').AsInteger试试这个
      

  2.   

    我的adoquery1中的语句是这样的
     with adoquery1 do
    begin
     close;
     sql.clear;
     sql.add('select * from jbxx');
     open 
    end;
    这是动态添加语句。我把代码改成你们说的,可是出现错语adoquey1:field id not found
    这是怎么搞的呢,唉,头好疼啊
      

  3.   

    adoquey1:field id not found
    说明adoquey1中没有名为id的字段DBGridA --QueryA 主表
    DBGridB --QueryB 从表with QueryB do
      begin
       close;
       sql.Clear;
       sql.Add('select id , stime ,etime from gzjl where id=:pid');
       
       parameters.ParamByName('pid').Value:=DBGridA.DataSource.DataSet.FieldByName('字段名').AsInteger
       open;
    end;
    你要确定DBGridA.DataSource.DataSet (也就是QueryA)select 字段中有 从表所对应的字段id
      

  4.   

    噢,我的思路和“笑三少”的一样啊
    with adoquery1 do
              begin
              close;
              sql.Clear;
              sql.Add('select id ,name ,cname ,sex ,cjsj  from jbxx where name=:name');
    parameters.ParamByNam('name').Value=edit1.Text;
              open; 
    procedure TForm2.DBGrid1DblClick(Sender: TObject);
    begin
     with agzjl do
      begin
       close;
       sql.Clear;
       sql.Add('select id ,stime ,etime ,wdw ,zw from gzjl where id=:id');
          parameters.ParamByName('id').Value:=dbgrid1.fields[0].asstring;
       open;
       end; 
    agzjl是我给第二个adoquery起的名字
      

  5.   

    procedure TForm2.DBGrid1DblClick(Sender: TObject);
    begin
     with agzjl do
      begin
       close;
       sql.Clear;
       sql.Add('select id ,stime ,etime ,wdw ,zw from gzjl where id=:id');
          parameters.ParamByName('id').Value:=dbgrid1.fields[0].asstring;
       open;                                  __________________________
       end;                                   DBGrid1.DataSource.DataSet.FieldByName('字段名').AsInteger
     改这样子试试
      

  6.   

    呵呵,问题解决了,我原来的代码没有问题,是因为我写的如果查询不到相关信息时dbgrid2.DataSource.Enabled:=false;
    我忘了在如果能查询到的话再开启一下。呵呵,我太粗心了,多谢“笑三少”和“洋溢”啊
    ^-^