sql+d7
         消费明细表:单据号(varchar),商品编码(varchar),数量(int),单价((money)(都不允许为空)
         商品资料表:商品编码,商品名称,规格,单位,单价,
但在软件录入界面是
         商品编码,商品名称,规格,单位,数量,单价,合计
其实 商品名称,规格,单位这几个字段只是显示录入界面的,不保存到数据库消费明细表中,合计是个虚拟增加的计算字段(要求数量*单价的和),
在qryxfmx的on calcfields中加了
qryxfmx.fieldbyname('sumje').value:=qryxfmx.fields[2].assinteger*qryxfmx.fields[3].assfloat;
我为了不让DBGRIDEH自己一到下一行就自己保存了,把
qryxfmx.lock type=ltBatchOptimistic了在录入界面的on show 事件中,open qryspzl open qryxfmx;qryxfmx.append;后进行录入
现在有以下问题请大家帮我解决下
1.如果在on calcfields中加如那段代码,则录入界面打开是要么提是 ''''is not 
valid integer value ,要么就提示''''is not alid float value 我大概知道这是因为在刚打时,数量或单价的赋值为空早造成的,我尝试了在不同的地方打开qryxfmx但都没解决,只要在qryxfmx的on calcfields中加了
qryxfmx.fieldbyname('sumje').value:=qryxfmx.fields[2].assinteger*qryxfmx.fields[3].assfloat;
就报错
2.在我软件界面中例如完单价后,按回车就有个提示:是否继续? 如果是则 qryxfmx.append,焦点又回到了编码位置 dbgrid自动加一空行继续录入,如过不录入了按否 就能正常保存,但有时候客户已经录入完毕了,由于误操作,本来不想录入了,但不注意按了一下是,这时qryxfmx.append;dbgrideh中又多了一行空行,这时如果一按保存,就提示不允许插入null值,这个我也知道,是因为我的后台数据库中的字段不允许为空造成,但我不知道怎么能避免这个问题,但我试验过,如果多出一行的话,用鼠标选择那行,按ESC就能清除掉,但代码怎么实现?
3.我把合计字段的footer的设置为sum了,也就是可以对列求和,但这也有个问题
只有焦点到了下一行才能把footer的sum正确的显示出来,要不永远都差正在编辑的这一行的数据,我自己试验了一下 qryxfmx,refesh 但提示 qryxfmx.not in edit or insert 是不是刚开始我是append状态,但refesh后 就变了啊
怎么解决啊?
谢谢大家了