我做的是超市的进销存软件,比如说是打订单吧,我想用dbgrid控件进行数据录入,商品信息已经有了,我的dbgrid有(商品编码,商品名称,规格,单位,进价,数量)等几个字段,我在dbgrid的第一行商品编码处输入商品的编码然后按回车,那么商品名称,规格,单位,等息动检索出来并填充,然后焦点自动投入到数量上,当输入完数量,然后再按回车,显示总价并跳到下一行,自动增加一条记录,这样该如何解决呢?能否给出完整的程序,?鼠标的移动控制已经解决。但是,DBGRID的输入编号后,不能显示与该编号相关信息,
我的库是这样的,商品信息表:商品编码,商品名称,规格,单位;商品价目表:商品编码 ,进价,数量;
我的库是这样的,商品信息表:商品编码,商品名称,规格,单位;商品价目表:商品编码 ,进价,数量;
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;
‘数量’是待定的,用户来商店买动西还不知道这种动西他想要买多少,只有他付款的时候才会知道的,可以给出部分代码呀,只要能实现,在GBGRID第一行输入,商品编号后,其它的,商品名称,规格,单位,进价,自动显示在第一行,其它的列,光标停在,数量行上,输完数量,马上显示,总价,
停在第二行,的商品编号处。
小弟也是菜鸟
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建的消息就行了
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;
'select sum(单价*数量) from 商品表 where 编号='''
+ DataSet.FieldByName('编号').AsString + '''';
一般的人,只会说,用查询呀,你自已去想呀,真真动手做的话,还是有一定难度的,
虽然我还是一个新手,但是如果用,StringGrid,这个我想信很多朋友都能写出来的,这个要好控制得多,因为别人规定了只能用,DBGRID,我不可能把哪个面试的卷子给改了,