就没人用pb11.5 连sql server 2000吗?100分求~~

zjgest 2009-09-23 10:00:16
现在我两种方法连都有问题啊!

第一种ole db连接:
SQLCA.DBMS = "OLE DB"
SQLCA.ServerName = ""
SQLCA.LogId = "sa"
SQLCA.LogPass = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='192.168.1.8',PROVIDERSTRING='database=jxc'"

Connect Using sqlca;
If sqlca.sqlcode<>0 Then
Rollback Using sqlca;
Beep( 1 )
Messagebox( '提 示 信 息','数据库连接失败:'+sqlca.SQLErrText,StopSign! )
Halt
Return
else
Commit Using sqlca;
End If
出现问题:一个客户端对数据表操作后(没有退出程序),其他客户端就如果打开相关的数据表就停止响应了。。。比如管理员新建了一个用户,没有退出程序,那么其他客户端根本就打不开了,因为首页就是登陆页面,需要用到用户表的。但是当管理员那个客户端一退出,其他的客户端就正常了。其他的表也存在这样的问题。。。好像就是客户端更新数据表后,如果没有退出,那么这个数据表就被“锁住了”!

第二种 SNC SQL Native Client连接
SQLCA.DBMS = "SNC SQL Native Client(OLE DB)"
SQLCA.ServerName = "192.168.1.8"
SQLCA.LogId = "sa"
SQLCA.LogPass = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Database='jxc'"

Connect Using sqlca;
If sqlca.sqlcode<>0 Then
Rollback Using sqlca;
Beep( 1 )
Messagebox( '提 示 信 息','数据库连接失败:'+sqlca.SQLErrText,StopSign! )
Halt
Return
else
Commit Using sqlca;
End If
出现问题:客户端打不开,显示
数据库连接失败:sqlstate=08001
Microsoft SNC SQL Native Client
由于打开服务器连接过程中的延迟,无法完成登录过程
客户端sql native client,runtime packager都装了,而且连sql server2000服务器应该是正常的。

这两种方法应该是最常用的了吧,但是都有问题,急死了,有大虾来指教我吗?
...全文
540 25 打赏 收藏 转发到动态 举报
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
zscstar 2009-11-01
  • 打赏
  • 举报
回复
我这里正好有这两个补丁,我传上来,你下载了就ok了
zscstar 2009-10-31
  • 打赏
  • 举报
回复
需要下载一个sql server 的补丁,具体什么补丁忘记了,等下去找找看
zjgest 2009-09-23
  • 打赏
  • 举报
回复
连接数据库的时候这样写:sqlca.autocommit=true

或者每个数据库操作的地方都这样写:
if sqlca.sqlcode = 0 then
commit;
else
rollback;
end if

有什么区别吗?我觉得下面那种麻烦,而且没有必要啊。如果sqlca.sqlcode <> 0,那么这句语句肯定不正确的,为什么还要rollback呢?commit的话也不会影响数据库吧?
WorldMobile 2009-09-23
  • 打赏
  • 举报
回复
还有sqlserver可以用直接连接,存取速度能稍快一些
WorldMobile 2009-09-23
  • 打赏
  • 举报
回复
数据更新后需要commit

单机肯定没有问题,多人使用如果不用commit肯定会出问题

数据更新包括(update insert delete等)

数据窗口的dw_1.update() 后也要commit
jssoft2008 2009-09-23
  • 打赏
  • 举报
回复
可以正常连接压
zjgest 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 jlwei888 的回复:]
只有commit;才会写在数据库中,否则只是内存中修改了!数据会锁上
pb程序退出后,会自动提交!
[/Quote]

再问你一个问题,那我是不是直接在数据库连接的时候 把sqlca.autocommit=false改成true就行了?省的到程序里面一个一个改了,这样有问题吗?
zjgest 2009-09-23
  • 打赏
  • 举报
回复
哦,原来这样啊?我发现我兜了个圈子,又回来了!
原来我是用access做的数据库,放到网络运用中也能使用,但是有这个问题,只有在程序关闭的时候,其他的客户端才能访问更新的数据。被告知access只能是单机的,我以为这就是access数据库本身的问题,然后就改连接sql server,解决了各种问题,结果问题还是回到了这个!其实之前的access的问题也应该是这个commit的问题吧,呵呵!不过也好,网络运用中用access总归不妥的,学习了!
jlwei888 2009-09-23
  • 打赏
  • 举报
回复
只有commit;才会写在数据库中,否则只是内存中修改了!数据会锁上
pb程序退出后,会自动提交!
zjgest 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 jlwei888 的回复:]
修改数据后,别人就不能用,那就是你没有提交,数据已锁了!
这是程序的问题!
当修改,插入数据时,必须马上提交
update....;
if sqlca.sqlcode = 0 then
  commit;
else
  rollback;
end if
[/Quote]

正解!!我也刚查出来了!
原来是这个commit,我发现没有这个commit,在单机设计的时候也能更新,所以都忽略了没加上!
这个命令到底是什么意思呢? 为什么不加,数据库也能更新的,但是就会出现上面的问题。。。
呵呵 看来是基本功不扎实啊!
谢谢诸位,过会结贴
jlwei888 2009-09-23
  • 打赏
  • 举报
回复
修改数据后,别人就不能用,那就是你没有提交,数据已锁了!
这是程序的问题!
当修改,插入数据时,必须马上提交
update....;
if sqlca.sqlcode = 0 then
commit;
else
rollback;
end if
jlwei888 2009-09-23
  • 打赏
  • 举报
回复
那是数据被锁了,缺省是不会的!你数据库做了什么改动吗!
zjgest 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wag_enu 的回复:]
用企业管理器检查一下你的数据库的状态,看是不是设置为单用户访问限制了.
[/Quote]

数据库访问权限我也没改过啊,再说,只要没有数据更新,只是查看的话 几个客户端都没有问题的,只有再其中一个客户端修改了数据后,然后其他的想要去访问修改后的数据的时候就没反应了。。。
zjgest 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 eviler 的回复:]
看你登陆时候做什么操作了 ,做操作之后马上 commit 就可以了
[/Quote]

登陆都还没有操作,只不过是从用户数据表读数据罢了,也不让我读
zjgest 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuam 的回复:]
SQLCA.DBMS = "OLE DB"
SQLCA.ServerName = ""
SQLCA.LogId = "sa"
SQLCA.LogPass = "sa"
SQLCA.AutoCommit = true
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='192.168.1.8',PROVIDERSTRING='database=jxc'"

Connect Using sqlca;
If sqlca.sqlcode <>0 Then
Beep( 1 )
Messagebox( '提 示 信 息','数据库连接失败:'+sqlca.SQLErrText,StopSign! )
Halt
Return

End If

[/Quote]

试过了,不行
wag_enu 2009-09-23
  • 打赏
  • 举报
回复
我用OLE DB 或是 SNC 都没有你讲的问题,连接参数和你给出的是一样的.
wag_enu 2009-09-23
  • 打赏
  • 举报
回复
用企业管理器检查一下你的数据库的状态,看是不是设置为单用户访问限制了.
eviler 2009-09-23
  • 打赏
  • 举报
回复
看你登陆时候做什么操作了 ,做操作之后马上 commit 就可以了
xuam 2009-09-23
  • 打赏
  • 举报
回复
SQLCA.DBMS = "OLE DB"
SQLCA.ServerName = ""
SQLCA.LogId = "sa"
SQLCA.LogPass = "sa"
SQLCA.AutoCommit = true
SQLCA.DBParm = "PROVIDER='SQLOLEDB',DATASOURCE='192.168.1.8',PROVIDERSTRING='database=jxc'"

Connect Using sqlca;
If sqlca.sqlcode <>0 Then
Beep( 1 )
Messagebox( '提 示 信 息','数据库连接失败:'+sqlca.SQLErrText,StopSign! )
Halt
Return

End If
jjoulejcc 2009-09-23
  • 打赏
  • 举报
回复
第一种情况是锁表了,你在dw的retrieveend事件里面加上commit就可以了
第二种情况检查一下你的sql server 2000打上SP4补丁没有,我以前给客户装程序遇到过这个问题,打上sp4补丁就好了
加载更多回复(4)

754

社区成员

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

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