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 根本没用呢
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 根本没用呢
应该根据Sender去判定
这种情况咋办呢?例如:出库单的录入,保存数据时,为了让数据库尽量的小,只保存产品的编码和数量金额就行了,什么名称啊这些都是从资料库取得的,可以用INNER查询显示出来,问题是由于没相应的字段在录入单据时,无法保存的哇
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;