procedure TForm1.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
begin
  if (DBGridEh1.Col = 1) and (Key = #13) then
  begin
    ADOQuery1.Post;
    ADOQuery2.Close;
    ADOQuery2.SQL.Clear;
    ADOQuery2.SQL.Text:='Select * from ware where code='''+dbgrideh1.Fields[0].DisplayText+'''';
    ADOQuery2.Open;
    ADOQuery1.Edit;
    DBGridEh1.Fields[1].Text:=ADOQuery2.FieldByname('Name').AsString;
    DBGridEh1.Fields[2].Text:=ADOQuery2.FieldByname('PartNo').AsString;
    DBGridEh1.Fields[3].Text:=ADOQuery2.FieldByname('Unit').AsString;
    DBGridEh1.Fields[4].Text:=ADOQuery2.FieldByname('Inprice').AsString;
    ADOQuery1.Post;
    DBGridEh1.Col := 6;  end;
  if (DBGridEh1.Col = 6) and (Key = #13) then
  begin
    ShowMessage(DBGridEh1.Fields[6].DisplayText);
    if DBGridEh1.Fields[6].DisplayText <> '' then
    begin      ADOQuery1.Edit;
      DBGridEh1.Fields[7].Text :=FloatToStr(StrToFloat(DBGridEh1.Fields[5].DisplayText)*StrToFloat(DBGridEh1.Fields[6].DisplayText));
      ADOQuery1.Post;
    end;  end;end;
当按下回车键时,第二个if也执行了,是怎么会事呢,我的想法是第一列输入代码后,填充其它几列,然后光标定位到6列,这里在6列输入数量,再按下回车时,填充第7列的数据..
但在第一列按下回车时,就一并执行了...if  根本没用呢

解决方案 »

  1.   

    你在第一个if中已经将DBGridEh1.Col := 6;了,所以又满足了第二个if,所以你应该用if...else
      

  2.   

    我觉得应该在adoquery.edit 之前设置adoquert.active:=true
      

  3.   

    第一个if执行后,下面第二个if的条件也符合,这个正常
    应该根据Sender去判定
      

  4.   

    在各位指导下,问题解决了现在的问题是,我想只把列1\5\6\7\保存入数据库表格中,查看的时候又要全部显示出来在输入数据时,提示缺少可以刷新的列,就是2\3\4列是通过查询得出来的数据,在输入数据时,数据库表中是没有相应字段的.
    这种情况咋办呢?例如:出库单的录入,保存数据时,为了让数据库尽量的小,只保存产品的编码和数量金额就行了,什么名称啊这些都是从资料库取得的,可以用INNER查询显示出来,问题是由于没相应的字段在录入单据时,无法保存的哇
      

  5.   

    procedure TForm1.DBGridEh1KeyPress(Sender: TObject; var Key: Char);
    begin
      if (DBGridEh1.Col = 1) and (Key = #13) then
      begin
        ADOQuery1.Post;
        ADOQuery2.Close;
        ADOQuery2.SQL.Clear;
        ADOQuery2.SQL.Text:='Select * from ware where code='''+dbgrideh1.Fields[0].DisplayText+'''';
        ADOQuery2.Open;
        ADOQuery1.Edit;
        DBGridEh1.Fields[1].Text:=ADOQuery2.FieldByname('Name').AsString;
        DBGridEh1.Fields[2].Text:=ADOQuery2.FieldByname('PartNo').AsString;
        DBGridEh1.Fields[3].Text:=ADOQuery2.FieldByname('Unit').AsString;
        DBGridEh1.Fields[4].Text:=ADOQuery2.FieldByname('Inprice').AsString;
        ADOQuery1.Post;
        DBGridEh1.Col := 6;  end
      else--------------------------------------------------这里改一下
      if (DBGridEh1.Col = 6) and (Key = #13) then
      begin
        ShowMessage(DBGridEh1.Fields[6].DisplayText);
        if DBGridEh1.Fields[6].DisplayText <> '' then
        begin      ADOQuery1.Edit;
          DBGridEh1.Fields[7].Text :=FloatToStr(StrToFloat(DBGridEh1.Fields[5].DisplayText)*StrToFloat(DBGridEh1.Fields[6].DisplayText));
          ADOQuery1.Post;
        end;  end;end;