现在一收费系统(delphi6+Sqlserver7,局域网环境) 为实现团体买单功能,加一listbox,买单时是在edit中的号回车即加入listbox,最后买单为listbox中的所有的号
买单后update收费表中的收银员,打发票。现在的问题是:打了两百张左右的单,有两张有问题,打印内容都完整(即listbox中的号都打在单上 ),但一张是前三人的收银员没update,一张是三人全都没upddate,代码如下,请高手指出问题: flogin.db1.StartTransaction;
for i:=0 to listBox1.Items.Count-1 do
with q2 do
begin //1
close;
sql.clear;
sql.Add('update w_dxsf set qrrgh=:wqrr,qrrxm=:wqrrxm, qrsj=:wqrsj where sph=:wsph and ');
sql.Add(' (qrrgh is null or qrrgh="") ');
parambyname('wqrr').AsString :=bjczygh;
parambyname('wqrrxm').AsString :=bjczyxm;
parambyname('wqrsj').AsDateTime :=fmain.GetServerDateTime();
parambyname('wsph').AsString :=listbox1.Items.Strings[i];
prepare;
execsql;
end; //1
try
flogin.db1.Commit ;
Fprintdj:=TFprintdj.Create(application);
Fprintdj.QRsyy.Caption:=bjczygh;
Fprintdj.qr1.print ;
listBox1.Clear ; except
flogin.db1.Rollback;
application.MessageBox('错误!','错误提示',mb_ok+mb_iconwarning);
end;
我怀疑是sqlserver本身的问题,有没有高手指点一二?
买单后update收费表中的收银员,打发票。现在的问题是:打了两百张左右的单,有两张有问题,打印内容都完整(即listbox中的号都打在单上 ),但一张是前三人的收银员没update,一张是三人全都没upddate,代码如下,请高手指出问题: flogin.db1.StartTransaction;
for i:=0 to listBox1.Items.Count-1 do
with q2 do
begin //1
close;
sql.clear;
sql.Add('update w_dxsf set qrrgh=:wqrr,qrrxm=:wqrrxm, qrsj=:wqrsj where sph=:wsph and ');
sql.Add(' (qrrgh is null or qrrgh="") ');
parambyname('wqrr').AsString :=bjczygh;
parambyname('wqrrxm').AsString :=bjczyxm;
parambyname('wqrsj').AsDateTime :=fmain.GetServerDateTime();
parambyname('wsph').AsString :=listbox1.Items.Strings[i];
prepare;
execsql;
end; //1
try
flogin.db1.Commit ;
Fprintdj:=TFprintdj.Create(application);
Fprintdj.QRsyy.Caption:=bjczygh;
Fprintdj.qr1.print ;
listBox1.Clear ; except
flogin.db1.Rollback;
application.MessageBox('错误!','错误提示',mb_ok+mb_iconwarning);
end;
我怀疑是sqlserver本身的问题,有没有高手指点一二?
for i:=0 to listBox1.Items.Count-1 do
中的一些update语句没有实现,大家有没有见过这种问题,没有也请讨论一下
比方说有没有报错,或者是连续工作了很长时间,或者当时打印的是一张很长的单子?当出错后程序继续工作是否还正常?将数据库恢复到出错前的状态,再次提交相同的数据是否还出错?
如果实在没有办法,那么在数据提交后做一次数据检查,发现不正常就报错,写错误日志
这样可以方便检查.另外,使用的SQL的方式也有问题.
1.由于发生变化的只是参数,所以不必每次都重新设置查询语句.
2.prepare 和 unPrepare要配合使用,当查询语句不用之后,要使用UnPrepare释放数据库资源.
我的东西根本没设置约束关系 能否给些建议。 yyfhz(火山)
1.由于发生变化的只是参数,所以不必每次都重新设置查询语句.
你是说把 sql 语句写在 query中吗?
2.prepare 和 unPrepare要配合使用,当查询语句不用之后,要使用UnPrepare释放数据库资源.
unprepare没用过,我怎么知道update到底有没有成功,upprepare 怎么用呢?
多谢了!
数据提交后做一次数据检查,发现不正常就报错,写错误日志?
给否给个代码参考 真的没做过,
再次感谢
for i:=0 to listBox1.Items.Count-1 do因为我当时就遇到一个很奇怪的现象:
我在确认按键上设了—(&S)
结果我按键时上面这个条件完全跳过,即一个update都不执行
但按 alt+S 就没问题。
我最后只能怎么做啊,我把那个按键藏起来了,收费时只能按 alt+S 这个问题不知有没有合理的解释