我做的是超市的进销存软件,比如说是打订单吧,我想用dbgrid控件进行数据录入,商品信息已经有了,我的dbgrid有(商品编码,商品名称,规格,单位,进价,数量)等几个字段,我在dbgrid的第一行商品编码处输入商品的编码然后按回车,那么商品名称,规格,单位,等息动检索出来并填充,然后焦点自动投入到数量上,当输入完数量,然后再按回车,显示总价并跳到下一行,自动增加一条记录,这样该如何解决呢?能否给出完整的程序,?鼠标的移动控制已经解决。但是,DBGRID的输入编号后,不能显示与该编号相关信息,
我的库是这样的,商品信息表:商品编码,商品名称,规格,单位;商品价目表:商品编码 ,进价,数量;

解决方案 »

  1.   

    在OnColExit里写SQL查询你想要的数据
      

  2.   

    var
      ds:TADODataSet;
    begin
      try
      ds:=TADODataSet.Create(self);
      ds.Connection:=ADOConnection;
      ds.commandText:='select 商品名称,规格,单位,进价,数量 from 商品信息表 a,商品价目表 b
    where a.商品编码=b.商品编码 and a.商品编码='''+dbgrid.DataSource.DataSet.FieldByName('商品编码').asstring+'''';
      ds.open();
      dbgrid.DataSource.DataSet.FieldByName('商品名称').asstring:=ds.FieldByName('商品名称').asstring
      dbgrid.DataSource.DataSet.FieldByName('规格').asstring:=ds.FieldByName('规格').asstring
             ......................
             ....................
             ....................  finally
         ds.free;
      end;
    end;
      

  3.   

    不是我不想动脑筋,我想了好久,不知道怎么实现呀,
    ‘数量’是待定的,用户来商店买动西还不知道这种动西他想要买多少,只有他付款的时候才会知道的,可以给出部分代码呀,只要能实现,在GBGRID第一行输入,商品编号后,其它的,商品名称,规格,单位,进价,自动显示在第一行,其它的列,光标停在,数量行上,输完数量,马上显示,总价,
    停在第二行,的商品编号处。
      

  4.   

    你用STRINGGRID把,我现在就是用的这个,这种功能我做过!
      

  5.   

    我一般不在GRID中增加数据,增加的数据在几个EDIT中,输入完后,再增加到表中,同时在GRID中显示
      

  6.   

    有一点麻烦,在DBGRID,里实现的话,有没有高手用DBGRID实现过;
      

  7.   

    建议用stinggrid ,想了一下,没做出来,不好意思
    小弟也是菜鸟
      

  8.   

    把“名称、规格、单位、总价”都定成计算字段,在然后在OnCalcFields里面写代码计算就行了
    procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    var
      Query1 : TQuery;
    begin
      //计算“名称,规格,单位”等计算字段,根据商品编号查询
      //计算字段名称定为“c_名称,c_规格,c_单位”
      Query1 := TQuery.Create;
      try
        Query1.DatabaseName := Table1.DatabaseName;
        Query1.Close;
        Query1.SQL.Text := 'select 名称,规格,单位 from 商品表 where 编号='''
                         + DataSet.FieldByName('编号').AsString + '''';
        Query1.Open;
        if not Query1.IsEmpty then
        begin
          DataSet.FieldByName('c_名称').AsString := Query1.FieldByName('名称').AsString;
          DataSet.FieldByName('c_规格').AsString := Query1.FieldByName('规格').AsString;
          DataSet.FieldByName('c_单位').AsString := Query1.FieldByName('单位').AsString;
        end;
      finally
        Query1.Close;
        Query1.Free;
      end;
      //计算总价,计算字段名称为“c_总价”
      DataSet.FieldByName('c_总价').AsFloat := DataSet.FieldByName('数量').AsFloat
                                             * DataSet.FieldByName('单价').AsFloat;
    end;在dbgrid添加了Columns之后,把“名称、规格、单位、总价”等字段设置成只读的,按Tab建的时候鼠标光标自然会跳转到其他非只读的字段上去的,因此只要在按回车的时候在发个Tab建的消息就行了
      

  9.   

    忘了写“单价”字段了
    procedure TForm1.Table1CalcFields(DataSet: TDataSet);
    var
      Query1 : TQuery;
    begin
      //计算“名称,规格,单位、单价”等计算字段,根据商品编号查询
      //计算字段名称定为“c_名称,c_规格,c_单位,c_单价”
      Query1 := TQuery.Create;
      try
        Query1.DatabaseName := Table1.DatabaseName;
        Query1.Close;
        Query1.SQL.Text := 'select 名称,规格,单位,单价 from 商品表 where 编号='''
                         + DataSet.FieldByName('编号').AsString + '''';
        Query1.Open;
        if not Query1.IsEmpty then
        begin
          DataSet.FieldByName('c_名称').AsString := Query1.FieldByName('名称').AsString;
          DataSet.FieldByName('c_规格').AsString := Query1.FieldByName('规格').AsString;
          DataSet.FieldByName('c_单位').AsString := Query1.FieldByName('单位').AsString;
          DataSet.FieldByName('c_单价').AsString := Query1.FieldByName('单价').AsString;
        end;
      finally
        Query1.Close;
        Query1.Free;
      end;
      //计算总价,计算字段名称为“c_总价”
      DataSet.FieldByName('c_总价').AsFloat := DataSet.FieldByName('数量').AsFloat
                                             * DataSet.FieldByName('c_单价').AsFloat;
    end;
      

  10.   

    用sum函数
      'select sum(单价*数量) from 商品表 where 编号='''
                         + DataSet.FieldByName('编号').AsString + '''';
      

  11.   

    TO。小金,非常谢谢你的解答,
    一般的人,只会说,用查询呀,你自已去想呀,真真动手做的话,还是有一定难度的,
    虽然我还是一个新手,但是如果用,StringGrid,这个我想信很多朋友都能写出来的,这个要好控制得多,因为别人规定了只能用,DBGRID,我不可能把哪个面试的卷子给改了,