各位高手,我在一个项目中遇到了问题,pb7+sql server 2000开发的IC卡收费系统,超过3个客户端同时使用该程序时,操作数据库就会出现阻塞,而且时间很长,要10多分钟才能完成一个流程的操作,现在项目无法验收,请各位改指点下,看看程序有什么问题,多谢!//卡号从设备中读出,这里为了示意,赋值
iKh  = 1commit using sqlca;

st_readmsg.text = "正在写数据库,稍候..."

glf     = (1 - sf_fl)*ckxj
ckje    = ckxj*sf_fl
xkje    = ckxj*sf_fl
ckrq    = datetime(today(),now())
sycs_ck = long(st_sycs.text) + 1

//删除历史备份信息   
delete from CardRestore where CardNum = :iKh and status=0;
if sqlca.sqlcode <> 0 then
rollback using sqlca;
cb_write.enabled = false
cb_read.enabled = true
st_readmsg.text = ""
messageBox(sApptitle,"删除无用备份卡片信息失败!",stopsign!)
return 
end if

//备份当前卡片信息
CurMoney = ckje * 100
PusrBuf = f_aschex(puserinfobuf,16)

//如果内容为空
if PusrBuf="20202020202020202020202020202020" then
PusrBuf=""
end if

//如果内容为空
PublicBuf = f_aschex(publicinfobuf,16)
if PublicBuf="20202020202020202020202020202020" then
PublicBuf=""
end if

// 卡号、钱包区内容,钱包金额,公共信息区内容、当前日期、记录状态(初始值为'0')
insert into CardRestore (CardNum,PurseInfo,AmountMoney,PublicInfo,CurFundMoney,UseTimes,CurDate,Status,RecType) 
values(:iKH,:PusrBuf,:tempQB,:PublicBuf,:CurMoney,:sycs,:ckrq,'0',:SFLX);
if sqlca.sqlcode <> 0 then
rollback using sqlca;
messageBox(sApptitle,"备份卡片信息失败!",stopsign!)
cb_write.enabled = false
cb_read.enabled = true
st_readmsg.text = ""
return 
end if

//更新CARD
update card set sf_ye = :hjje,sfyedt = :ckrq,sycs = :sycs_ck where kh = :iKH;
if sqlca.sqlcode <> 0 then
rollback using sqlca ;
cb_write.enabled = false
cb_read.enabled = true
st_readmsg.text = ""
messagebox(sAppTitle,"数据库操作错误,请检查数据库连接(card)!"+sqlca.sqlerrtext,Stopsign!)
return 
end if

//写MX表(存款)
insert into mx (kh,pkh,bh,sfje,sf_ye,sycs,sfrq,jyno,sflx,gzzid,CZY)
values(:iKH,:pcardno,:bh,:ckje,:hjje,:sycs_ck,:ckrq,:glngfkjno,:sflx,:glnggzzid,:GSTRUSERNAME);
if sqlca.sqlcode <> 0 then
rollback using sqlca ;
st_readmsg.text = ""
cb_write.enabled = false
cb_read.enabled = true
messagebox(sAppTitle,"数据库操作错误,请检查数据库连接(mx ck)!"+sqlca.sqlerrtext,Stopsign!)
return 
end if

if glf>0 then  //管理费
insert into mx (kh,pkh,bh,sfje,sf_ye,sycs,sfrq,jyno,sflx,gzzid,CZY)
values(:iKH,:pCardNo,:bh,:GLF,:hjje,:sycs_ck,:ckrq,:glngfkjno,'E',:glnggzzid,:GSTRUSERNAME);  
if sqlca.sqlcode <> 0 then
rollback using sqlca ;
st_readmsg.text = ""
cb_write.enabled = false
cb_read.enabled = true
messagebox(sAppTitle,"数据库操作错误,请检查数据库连接(mx glf)!"+sqlca.sqlerrtext,Stopsign!)
return 
end if
end if

//写CK表
insert into ck (kh,pkh,bh,sf_ye,sf_fl,ckxj,glf,ckje,lqbt,xkje,sycs,sfrq,jyno,gzzid,sflx,CZY)
values(:iKH,:pCardNo,:bh,:hjje,:fl,:ckxj,:glf,:ckje,:bt,:xkje,:sycs_ck,:ckrq,:glngfkjno,:glnggzzid,:sflx,:GSTRUSERNAME);
if sqlca.sqlcode <> 0 then
rollback using sqlca ;
st_readmsg.text = ""
cb_write.enabled = false
cb_read.enabled = true
messagebox(sAppTitle,"数据库操作错误,请检查数据库连接(ck)!"+sqlca.sqlerrtext,Stopsign!)
return 
end if

// 写卡
st_readmsg.text = "正在写卡,稍候..."

//此处略了写卡操作,大概耗时3秒(WriteCard)
commit using sqlca ;
if sqlca.sqlcode <> 0 then
rollback using sqlca;
this.enabled = false
this.default = false
cb_read.enabled = true
cb_read.default = true
st_readmsg.text = ""
messagebox (sAppTitle,"数据库提交失败,必须作卡片修复!",stopsign!)
return
end if