我做的是超市的进销存软件,比如说是打订单吧,我想用dbgrid控件进行数据录入,商品信息已经有了,我的dbgrid有(商品编码,商品名称,规格,单位,进价,数量)等几个字段,我在商品编码处输入商品的编码然后按回家,那么商品名称,规格,单位,等息动检索出来,然后焦点自动投入到数量上,然后再按回车,跳到下一行,自动增加一条记录,这样该如何解决呢,

解决方案 »

  1.   

    If Key=Chr(VK_RETURN) then
         With DBGrid1 do
           begin
             If SelectedIndex < (FieldCount - 1) Then
                SelectedIndex := SelectedIndex + 1
             Else
                Begin
                   SelectedIndex := 0;
                   With AdoTable1 do
                     Begin
                       Next;
                      If EOF then Last;
                     end;
                end;
            end;
      

  2.   

    你就直接检索就可以了啊
    检索条件就是你的商品的编码
    然后用dbgrid刷新就可以了啊
    具体实现的机制我想都差不多
    要根据你问题具体分析
      

  3.   

    做法简单:
        方个Edit控件在上面,在Edit的OnChange事件里面来根据它的.text变化来检索数据库里面相对应的商品名称,当Edit按回车是,下一个输入地方SetFocus.
        呵呵!!!!    http://www.cnkernel.com/wncx.rar
      

  4.   

    o ,忘了说一句:
       当Edit按回车时,先把Edit的内容赋值给当前位置的Cell, 再下一个输入地方SetFocus。
      

  5.   

    http://www.cnkernel.com/wncx.rar
    是个好例子!!!
      

  6.   

    在 dbgrid的onkeypress 中写代码就行了。
    我这边 正好有这样的代码,就ctrl c,ctrl v 给你啦。呵。
    procedure Trcsgxt_pf.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
    begin
        if key=#13 then
        begin
            if (dbgrideh1.SelectedField.FieldName='BZ') and (data.q2.State in[dsedit,dsinsert]) then
            begin
                dbgrideh1.SelectedIndex:=0; //如果是在最后一个字段按回车 则跳到下一行。
                data.q2.Append;
            end;
            if (dbgrideh1.SelectedField.FieldName='DW') and (data.q2.State in[dsedit,dsinsert]) then
            begin
                DBGRIDEH1.SelectedIndex:=5; //定位到 索引号为5的那个 字段。
            end;
            if (dbgrideh1.SelectedField.FieldName='DM') and (data.q2.State in[dsedit,dsinsert]) then
            begin
                 //商品编码的检索,检索到了,就在各个相关栏目输入值。  没检索到 就提示没有该种商品。
                 with data do
                 begin
                 if dbgrideh1.Selectedfield.Text='' then exit;
                 cx.Close;
                 cx.SQL.Clear;
                 cx.SQL.Add('select * from kc_dm where dm=:dm and ckdm=''07''');
                 cx.Parameters[0].Value:=dbgrideh1.SelectedField.Text;
                 cx.Open;
                 if not cx.Eof then
                 begin
                     if cx.FieldByName('mc').AsString<>'' then
                     begin
                         dbgrideh1.Fields[1].Value:=cx.FieldValues['mc']; //给商品名称 赋值。
                     end;                 if cx.FieldByName('note').AsString<>'' then
                     begin
                         dbgrideh1.Fields[4].Value:=cx.FieldValues['note'] //给商品备注信息赋值。
                     end;                 if cx.FieldByName('chlb').AsString='01' then
                     begin
                         dbgrideh1.Fields[2].Value:='染料';                //给商品类别赋值。
                     end
                     else if cx.FieldByName('chlb').AsString='02' then
                     begin
                         dbgrideh1.Fields[2].Value:='助剂';
                     end;
                 end
                 else
                 begin
                     dbgrideh1.Fields[2].Value:='';
                     dbgrideh1.Fields[1].Value:='';
                     dbgrideh1.Fields[4].Value:='';
                     dbgrideh1.Fields[3].Value:=0;
                     dbgrideh1.SelectedIndex:=0;
                     showmessage('库中无该配方');                           //提示没有需要 查找的东西。
                     exit;
                 end;
                 dbgrideh1.Fields[0].Value:=dbgrideh1.SelectedField.Text;
                 DBGRIDEH1.SelectedIndex:=3;                                //定位到下一个字段。
                 end;
            end;
        end;
    end;
      

  7.   

    是呀,是从数据库里的一个表里面取数据然后存到另一个表里面的,goddevilor(章韩毅)
    能不能把例子给我传过来一份呀,我想看一下,好吗?
      

  8.   

    goddevilor(章韩毅)不是已经说得比较详细了吗
    自己根据自己的实例试一下就知道 行不行了。
    自己再修改优化一下