怎么实现以下功能:
在一个cells中输入一个值后,根据这个输入值查询另外一张表(甚至多张表),查得的值填入该DBGrid中(同一行)。
主要是以下几个问题:1.怎么获取输入的值。
                    2.查询出值后怎么调用方法把查询出的值放到dbgrid中。
谢谢谢谢

解决方案 »

  1.   

    你用跟这个DBGrid相连的Query.FieldbYname('你这个Cell的字段名').asstring就可以得到这个Cell中的值,然后根据这个值来查,同样你把Query.FieldbYname('你要赋值的Cell的字段名').asstring:=你查询出来的值。就行了
      

  2.   

    很多方法,可以在KeyPress或KeyDown中取输入的值
    然后执行查询
    不可能直接对DBGrid的某一个Cell赋值
    必须在查询的SQL语句中处理
    比如Select field=xxx from ...
    要看具体情况而定
      

  3.   

    怎么获得光标离开某一个cell的事件
      

  4.   

    必须在查询的SQL语句中处理
    比如Select field=xxx from ...这是什么意思??
    能不能举个例子!!
    谢谢
      

  5.   

    就是你在DBGrid中显示数据时用的查询语句,只能对它进行处理才能改变DBGrid中的显示值
    比如计算出应有的值,放到变量中,然后执行
    select field='''+变量+''' from ...
      

  6.   

    请找到DBGrid的数据源,即DBGrid.dataSource的值,如为Table1,请双击,然后选择一个相对应的字段,在它的OnChange事件中加入如下代码:  
    //YR_PTCode为选择的字段
    //Table2为你要查的表
    procedure TForm1.Table1YR_PTCodeChange(Sender: TField);
    var PTCode:string;
        Sale:real;
    begin
      Sale:=0;
      PTCode:=Table1.fieldbyName('YR_PTCode').Asstring;
      if CFindkey(Table2,'YR_PTCode',PTCode) then
         begin
           Sale:=Table2.fieldbyname('YR_Sale').Asfloat;
           if Table1.FieldByName('YR_Code').Asstring<>'' then
              begin
              Table1.Edit;
              Table1.SetFields([
                 nil,ECode.text,nil,
                 Table2.fieldbyName('YR_Type').Asstring,
                 Table2.fieldbyName('YR_PTName').Asstring,
                 Table2.fieldbyName('YR_Unit').Asstring,
                 nil,
                 Sale,
                 nil,
                 Table2.fieldbyName('YR_Pay').Asstring
                ])
              end
         end  else showMessage('仓中没有此商品编码');
    end;
      

  7.   

    function CFindKey(DataSet: TDataSet; AField, AValue: String): Boolean;
    begin
      DataSet.First;
      while not DataSet.Eof do
      begin
         if DataSet.FieldByName(AField).AsString = AValue then
         begin
           CFindKey := True;
           Exit;
         end;
         DataSet.Next;
      end;
      CFindKey := False;
    end;