正在做餐饮点单输入界面.涉及到的主要两个表为:
tblGoodsInfo(fGoodsID,fGoodsName, fUnit, fPrice) 商品信息表(商品编号,名称,计量单位,单价)
tblGoodsBuyList(fId, fConsumeID, fGoodsID, fGoodsNum, fMemo,fIsPrinted)商品点单列表(自增编号,消费单号,商品编号,数量,备注, 是否打印)
注(是否打印,是由其它地方来管理,录入是为False
上面两个表的关系及含义,我想大家一定明白.做点单时,我希望的界面是这样子的.
主界面上,一个DBGridEh居中,下面放几个按钮"新增","修改","删除","确定","取消".主界面上,DBGridEh显示的内容为:
消费单号,商品编号,商品名称,计量单位,点单数量,金额小计,备注,是否打单,(如已打单,则这条记录显示为灰色,不可以修改了).
点"新增"时,弹出一个页面,用户可在弹出的页面中,根据各种组合条件,查询到客人要点的商品.同时,还可以得到其它的信息,如:商品名称,计量单位,单价,因此,用户只需要在"数量"处,输入点单数量,然后自动计算"金额小计","备注"信息,则直接在表格中输入.由于可能会出现各种情况,比如:客户点了三个商品,忽然要全部取消,或者,点多了,如果有没有打单的商品,就取消掉..等等..
因此,只有在客人同意"确定"时,才将所有修改写入数据库. "取消"则放弃当前所有修改.
(即便是客户同意"确定"了,还可以再次进入该页面,来修改的.)
("修改"和"删除",是针对于还没有打单的明细而言的,比如厨房还没有开始做这个菜,客户是可以取消的.)
tblGoodsInfo(fGoodsID,fGoodsName, fUnit, fPrice) 商品信息表(商品编号,名称,计量单位,单价)
tblGoodsBuyList(fId, fConsumeID, fGoodsID, fGoodsNum, fMemo,fIsPrinted)商品点单列表(自增编号,消费单号,商品编号,数量,备注, 是否打印)
注(是否打印,是由其它地方来管理,录入是为False
上面两个表的关系及含义,我想大家一定明白.做点单时,我希望的界面是这样子的.
主界面上,一个DBGridEh居中,下面放几个按钮"新增","修改","删除","确定","取消".主界面上,DBGridEh显示的内容为:
消费单号,商品编号,商品名称,计量单位,点单数量,金额小计,备注,是否打单,(如已打单,则这条记录显示为灰色,不可以修改了).
点"新增"时,弹出一个页面,用户可在弹出的页面中,根据各种组合条件,查询到客人要点的商品.同时,还可以得到其它的信息,如:商品名称,计量单位,单价,因此,用户只需要在"数量"处,输入点单数量,然后自动计算"金额小计","备注"信息,则直接在表格中输入.由于可能会出现各种情况,比如:客户点了三个商品,忽然要全部取消,或者,点多了,如果有没有打单的商品,就取消掉..等等..
因此,只有在客人同意"确定"时,才将所有修改写入数据库. "取消"则放弃当前所有修改.
(即便是客户同意"确定"了,还可以再次进入该页面,来修改的.)
("修改"和"删除",是针对于还没有打单的明细而言的,比如厨房还没有开始做这个菜,客户是可以取消的.)
解决方案 »
- 裁减矩形算法
- 如何实现delphi 调用AutoCAD 打印
- 如何对一个对象进行加密???
- 我想做一个多文档应用程序,与以前不同的是主窗体和子窗体分别放在DLL文件里。
- 在一个数据库中添加一个字段出错了,请进来看看。
- 救救我吧!!!
- 用Delphi操作Excel的问题?
- 在edit中用keypress时,为何不起作用呢?up在分
- 哪位高手知道有没有这样的工具,可能将DOC文件全部一次性地转化为RTF格式的文档? 如DOC2RTF.EXE这样的工具?
- Delphi 7调用接口API C++ DLL 带结构体的函数问题?
- ORACLE中BLOB图片读写以及WMI中内存的释放?每个问题100分,先放100,解决再放,谢谢!!
- delphi在数据库程序的调试?
一, DBGridEh对应的SQL语句,很显然,要显示上面的内容,肯定要两关连两个表的数据,才能显示这些字段.
如:select L.fConsumeID, L.fGoodsID, G.fGoodsName, G.fUnit, G.fPrice, L.fNum, G.fPrice*L.fNum as fTotalPrice, L.fMemo, L.fIsPrinted from tblGoodsInfo G, tlbGoodsBuyList L where L.fGoodsID = G.fGoodsID如果用这个语句,那么,我就不能这样新增或修改了:
DBGridEh1.DataSet.Append;//DBGridEh1.DataSet.Edit;
DBGridEh1.Dataset.fieldbyname('XX').value = '001';
DBGridEh1.Post;
因为SQL语句涉及到了两个表,所以不能这样操作了.可是,如果SQL语句仅为这样:select * from tblGoodsBuyList where fConsumeID= 'XXX' 这样的话,显然能进行修改及新增,但是: 界面上显示的内容也太少了,实再是太不友好了..
采用DBGridEh下面可以设置Foots,有一些汇总信息, 可以看到点了多少商品,共多少钱.界面比较好看..
ADOTable1.Open ;ADOTable1.UpdateBatch(arAll); //一次性批量写入数据库如果已经写入数据库的时候厨房已经打单出来了
但是没有做菜你这时候可以在点个退单
也就所谓的 -1鲍鱼 厨房一看
A001 包厢点入 -1鲍鱼 退单下面的事情你自己考虑了
我感觉你上面的想的太复杂了
把不要刪除的字段設成 FieldKind := fkLookup
這樣你就可以新增或修改了
ADOTable1.UpdateBatch(arAll); //一次性批量写入数据库采用UpdateBatch的方式,运用过了的,主要的问题不在这里,
而是在:DBGridEh对应的数据集,不是一个表,而是两个表连合查询得到的. 那么就不能直接对它进行编号了.
例如:
ADOQuery1.sql.text := 'select T1.a, T1.b, T2.f1, T2.f2 from T1, T2 where T1.a = T2.f1';那么,就不能使用下面的语句来修改了:
ADOQuery1.Edit;
ADOQuery1.FieldByname('f1').value := 'XXXX';
ADOQuery1.Post;可是,如果只采用这种方式:
ADOQuery1.Sql.text := 'select * from T1 where ...';
可以查询到数据,也可以采用上面的方式编辑数据, 可问题是:T1表里的字段太少了,不能全面地反应当前操作的一些信息,
必须要把其它表里的字段,也跟着显示组来,用户才看得明白.
比如我想得的到数据集如下:
select T1.*, T2.fName, T1.num *T1.Price as fTotalPrice from T1, T2 where T1.f1 = T2.IDT2.fName 可以用你说的方法,来添加,不知T1.num*T1.Price as fTotalPrice 这个小计的价格,怎样出现在数据集里呢?
因为:DBGridEh1 对应的SQL语句只能为:select * from T1, 否则,不能对它进行修改, 另外的字段,只能有别的方式来处理了.
不好意思,英语太差了,查了一下这个单词的意思 calculated 应该可以实现的.
为"Calculated", 然后在代码中,为这个字段计算,并赋值,就可以了.但是,实际上,向ADOQuery1 里添加了一条记录, 我新增的那个字段,它可以自动计算出来,并且也显示出来了. 可是,当我新增第二条的时候,上面那条记录的自动计算的值就不见了.
Qry.lockType := ltBatchOptimistic;
保存时,Qry.UpdateBatch;