莫名奇妙的问题,soft.....

wsygt 2004-10-23 06:24:12
我用pb7.0开发一个进销存软件,数据库是sql7.0。是多用户使用。但有时数据保存时总死机.我察看数据库管理中的进程信息,发现死机的机器的软件该进程(假设该进程是54)最后tql语句是(insert....),它堵塞另一个进程55(最后语句是select...)但并不是死索,如果把55进程kill,那么
死机的机器虽恢复正常,但保存的数据不完整(保存时我是最后才全部提交的或全部回滚)我在所有select语句后加commit;以避免堵塞。但有时还会出现上述情况。如何解决:请各位大拿执教
我是用数据窗口更新的 属性也没有问题但在数据窗口更新前还用sql语句更新过其他表,但也是最后提交的,更新的两个表中都有触发器,检查过没有问题,不存在嵌套和递归问题,sql服务器配置属性已设置
...全文
87 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongxiuxie 2004-10-24
  • 打赏
  • 举报
回复
所有操作数据的语句, insert, update后, 都要判断sqlca.sqlcode是否为0
if sqlca.sqlcode = 0 then
commit;
else
rollback;
messagebox('出错','错误信息是'+sqlca.sqlerrtext )
end if

所有数据窗口的update(true)语句也一样
if dw_1.update( true ) = 1 and dw_2.update( true ) = 1 then
commit;
else
rollback;
end if
wanghan226 2004-10-23
  • 打赏
  • 举报
回复
由于是多用户操作我分析可能是数据库操作语句不当或优化不好导致的进程阻塞,进程阻塞与死锁很相似。办法:1首先查看操作的数据窗口中的数据窗口对象rows--update proper属性调整到第一项:
key columns
2在程序程序开始事件中()打开数据库的锁设置:sqlca.lock = 'RU'
3查找语句中是否有多项操作容易引起同一数据表的地方并改进优化,及时设置commit and rollback;
luotitan 2004-10-23
  • 打赏
  • 举报
回复
建议将SQLCA.AutoCommit设置为TRUE,在需要更新的时候改为FALSE,更新完后再设置为TRUE。
swzlxm 2004-10-23
  • 打赏
  • 举报
回复
没有吧,这种并发都搞不定,MICROSOFT不关门

从来没这事.

建议用2000,改用.NET,

609

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧