如果用一个DBGRID1显示数据集ADOTABLE1时,在dbgrid的DBGrid1DblClick事件中,双击的当前记录是记录指针的记录,我用FIELDBYNAME并把表格当前选取的字段值赋给EDIT,结果正如我前面所想的.但现在有这样一个问题:
我用一个ADOQUERY做数据集,在dbgrid的DBGrid1DblClick事件中,双击的记录(要想处理的记录,但,我用FIELDBYNAME把字段值赋给EDIT,结果总是显示第一条记录,指针为什么总是停在第一条记录上呢?

解决方案 »

  1.   

    用这个吧,edit1.text:=dbgrid1.fields[0].value 
              edit2.text:=dbgrid1.fields[1].value
              edit3.text:=dbgrid1.fields[2].value
              edit4.text:=dbgrid1.fields[3].value
      

  2.   

    procedure TFmain.DBGrid2CellClick(Column: TColumn);
    var
      s1,s2,s3,s4,m:string;
      i,j:integer;
    begin
      m:=trim(fmain.Label12.Caption);
      with adoquery2 do
         begin
            close;
            sql.Clear;
            sql.Add('select * from 临时明细 where 订单ID=:a;');
            Parameters.ParamByName('a').Value:=m;
            open;
         end;
      //保存要册除记录的每个字段值
      s1:=trim(adoquery2.FieldByName('产品编码').Value);
      s2:=trim(adoquery2.FieldByName('产品名称').Value);
      s3:=trim(adoquery2.FieldByName('单位').Value);
      i:=adoquery2.FieldByName('单价').Value;
        //测试用
      edit1.Text:=s1;//捕捉不到值
      edit12.Text:=s2;
      edit13.text:=s3;
      edit14.text:=inttostr(i);
    end;
      

  3.   

    我的目的是:
    先查出相应记录出来,用GRID显示出来,再想双击删除记录
      

  4.   

    sql.Add('select * from 临时明细 where 订单ID=:a;');
                                                   -这个分号存在SQL server不会产生语法错误吗?
      

  5.   

    不关语法错语的事,
    用过滤还是一样,QUERY可以用过滤
      

  6.   

    结果总是显示第一条记录,说明你的条件没起作用。
    其中m是你判断的条件,但我没看出其值在DBGrid1DblClick事件中发生了变化。
    m:=trim(fmain.Label12.Caption);// 变化了吗,在dbclick后 ???
      with adoquery2 do
         begin
            close;
            sql.Clear;
            sql.Add('select * from 临时明细 where 订单ID='''+m+'''');//试一试这个
            open;
         end;
      

  7.   

    你可以先给m赋一个值,比如是第5个订单ID, 然后你在调试语句,肯定不是指向第一个记录,而是第五个记录。
      

  8.   

    毫无疑问!你的sql语句肯定有问题,因为你的sql语句查询了所有的记录,而记录指针默认是指向第一条的,所以指针总停留在第一条
      

  9.   

    我的SQL要表达:查询出临时明细表中订单id等于label12.caption有值,我先把它赋给变量m,再在SQL中建立变量A,再把M赋给变理Am:=trim(fmain.Label12.Caption)我在SQL语句中
    sql.Add('select * from 临时明细 where 订单ID=:a');
            Parameters.ParamByName('a').Value:=m;
    照metro的说法,我的SQL语句根本起不了作用,为什么呢?我的表达式出了什么错误呢?我按
    sql.Add('select * from 临时明细 where 订单ID='''+m+'''');就查出记录来了,为什么要加这么多的分号的,目的不是要写出表达式订单ID=M吗?我的表达式为什么不对,请大家告诉我,我真的想明白这个问题.
    先在这里多谢大家的帮助了.
      

  10.   

    'select * from 临时明细 where 订单ID='''+m+'''', 的id后面连续有'''其中前两个表示了一个'第三个表示这个字符串结束了,后面再用+连接其他的字符串,而后面的四个''''第一个表示字符串的开始第二三个表示一个'最后一个表示字符串结束.
      

  11.   

    你不要把OPEN放在双击事件里,这样等于每次重新打开数据集,自然总显示第一个记录啦!
    把这个东西移到FORMSHOW中,问题保证解决!
      

  12.   

    多谢大家用帮助,只是改变第一条记录的原因,正如神灯之主讲的那样,多谢drift1981的解释