最近在做一个数据输入单据,使用控件DBGridEh来输入从表,从表已绑定数据集Qry有列名:关键字一,数据一,数据二等,有个简单的问题请教:
输入关键字一,按回车查询相关数据并取出对应数据填充到数据一,数据二,保存,然后再新增一条记录光标定位到关键字处

解决方案 »

  1.   

    在DBGridEh的回车事件中写代码,
    var
       Qry1:TQuery;
    begin
      Qry1 := TQuery.create(self);
      Qry1.sql.close;
      Qry1.sql.add('select 数据一,数据二 from table1 where gjz='+'关键字一');
      Qry1.open;
    if not Qry1.eof then
    begin
       Qry数据一.value := Qry1.数据一.value;
       Qry数据二.value := Qry1.数据二.value;
       Qry.Appupdate;
    end;
    ....
    Qry.apend;
    end;
    .....
    大概意思是这样,家里没装DELPHI,没测试,参考.
      

  2.   

    刚才自己尝试着写了一段,总的感觉很不满意,虽然完成了,写在DBGrid的KeyPress事件中
    求更好更健壮的方法.
      if Key =#13 then
      begin
        if dbgrdh.SelectedIndex = 0 then
        begin
            ADOqry.Close;
            ADOqry.SQL.Text := ' Select * from barcode where barcode = '''
                          + dbgrdh.SelectedField.AsString +'''';
            ADOqry.Open;
            dbgrdh.DataSource.DataSet.FieldByName('mmfname').AsString :=  ADOqry.FieldByName('name').AsString;
            dbgrdh.DataSource.DataSet.Append;
        end;
      end;
      

  3.   

    谢谢楼上的兄弟,和我的思路差不多吧,想请教一下,如果做单据输入,用DBGrid有什么需要注意的地方?
      

  4.   

    如果做单据输入,用DBGrid有什么需要注意的地方,
    就是回车是横向跳到下一个单元格?还是纵向跳到下一新行?
    还有使用键盘上下左右键来移动单元格.
    DBGrid不能直接产生"合计:",作一些字段数量的统计,要在存储过程中写SQL.