郁闷!紧急求救:VC+ADO+SQL Server 2000多用户并发操作问题

ylyan20xx 2012-06-06 02:50:28
我做一个生产系统,产品生产时按工艺流程,依次经过多个站位,每个站位运行完成时都向服务器端的同一个数据库表写入相关数据,后一站位要从数据库表中读取到前一站位已经完成的信息才能继续做。
起初,每个站位都先双击exe打开应用程序,打开程序界面时我就连接了数据库,现在问题是,某个站位插入了一条记录后,我怎么更新,其他站位都不能读到这条记录,除非把程序关闭了再打开,或者每个站位的程序不先连接数据库,而是每次点击程序界面上的按钮实际工作时才连接数据库,然后运行结束时关闭数据库,这种方法太憋足,效率也低。这个更新该怎么写?求各位帮帮忙了,谢谢!

没分了,给不了多少,请包涵。
...全文
257 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylyan20xx 2012-06-07
  • 打赏
  • 举报
回复
我是楼主,不能更新问题我已改成每次运行程序(不是指双击exe启动程序,指点击程序界面按钮进行实际工作)时都连接/断开一次数据库。
再问个问题,服务器端能否开启多个SQL Server服务?多个SQL Server服务是否就是多个实例的概念?我发现新建组可以,但是注册新服务时就无法找到本机(因为本机已经作为默认实例的服务器了)。如果想跑多个,是要找来安装盘在重新安装的过程中设置,还是只要对现行已安装好的进行一下配置就能实现?如果要重装才行就算了,产线的服务器我也不能随便弄。
cxmcxm 2012-06-07
  • 打赏
  • 举报
回复
在程序中再加一个查询专门在当前站位更新数据前查询上一站位是否已完成,如未完成,提示上一站位未完成.
sql server为数据库服务器,通过在客户端发sql命令到服务器,服务器再将执行结果返回到客户端,如果一次应将数据全部取到客户端,在客户端对全部数据进行操作,再提交数据,多用户操作时难以同步,效率也低.

查询写一专门查询上一站位是否完成的查询,如查询较复杂,可做成存储过程.每次执行存储过程
三断笛 2012-06-07
  • 打赏
  • 举报
回复
其他站点读取数据的游标类型使用AdOpenDynamic试试,并且定时Requery
ylyan20xx 2012-06-07
  • 打赏
  • 举报
回复
XP能否作为服务器?紧急
ylyan20xx 2012-06-07
  • 打赏
  • 举报
回复
两台XP装了SQL Server 2000开发版,且都打了SP4补丁,各自本地服务器连接、查询等各种操作都OK,但是一台访问另外一台时,在服务管理器工具界面的“服务(R):”下拉里边一直为空,这是怎么回事?
1、能ping成功对方IP;
2、netstat -a,显示列表里没看到有1433 LISTENING的信息,看到有一行(它的上一行是1432端口的信息)是这样的:TCP,ms-sql-m,TIME_WAIT;
3、但是telnet 对方IP:1433却能成功。
有知道的,帮忙说下。
谢谢!
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
感谢楼上答复!
在我的实现里,只在打开表时用到一次SQL语言(SELECT * FROM %s),其他地方全用ADO(MoveFirst、MoveLast、AddNew、PutCollect、GetCollect、Update...),这种写法是不是效率很差?你提到的问题,必须通过代码实现还是也可在企业管理器中设置实现?谢谢!
zhazhuzhao 2012-06-06
  • 打赏
  • 举报
回复
一般来说,你的数据insert完了之后,其他的地方立马就可以查询到了,除非:你的事务封装的不好,事务没有commit,或者你的数据库的事务隔离级别设置有问题。
两个方面好好查查看。
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
今天没人吗?再顶下
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
来看了,没人回复
自己先顶一个
royy918 2012-06-06
  • 打赏
  • 举报
回复
不是SQL Server做不到,这个已经超出了SQL Server的范围了,看你的需求,一般来说有2中方法。
1.各客户端定时主动查询前一步是否完成。(这个也不是用打开的ADO连接能做到的,必须重新连接,查询)
2.由服务器端主动推送完成信息给各客户端,各客户端接收消息后进行相应的操作。
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
感谢楼上!是SQL Server本身就做不到,还是我用ADO实现不了?那么一些大中网站用SQL Server的,怎么实现多用户交互的?
royy918 2012-06-06
  • 打赏
  • 举报
回复
这个是做不到的,你在一台机器上用ADO,addnew,然后指望其他机器上打开的ADO连接能够响应这个addnew是不可能的,其他机器必须重新打开一次(也就是说必须重新执行一次查询)才能知道数据是否添加或改变。
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
这个系统其实不需要给各个站位的操作者显示出数据库里的数据,我也没拉控件去绑定数据库,所以不是绑定的控件不更新显示的问题,而是我代码里操作数据库查不到前一站位插入的记录。
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
会不会跟表设计有关?现在是第一列名为ID,int型,设为主键,自动加1,第二列名为日期和时间,datetime型,默认值为getdate,后面列名都是些char型,前两个列不允许空,后面的都允许空,之外再没设置什么了
十三门徒 2012-06-06
  • 打赏
  • 举报
回复
你可以在点击程序界面的运行按钮的时候在从数据库里面查询一遍啊 不用重新连接数据库
重连连接,重新赋值 你是数据源和控件绑定?
ylyan20xx 2012-06-06
  • 打赏
  • 举报
回复
感谢以上两位!
第一站位AddNew插入一行记录后,它自己是可以看到的,GetRecordCount会增加,用企业管理器打开表查看也是有的,同时,其他站位的程序如果是在第一站位执行插入记录操作之后启动的,也是可以看到这条记录的。问题是,如果各个站位程序都先打开了界面(同时会连接数据库),这时当第一站位插入记录时,其他站位的程序在不重启的情况下是检测不到的,除非其他站位关闭程序然后重新打开程序。
我是希望各个站位打开程序界面时只连接一次数据库,而后程序处于就绪状态,做产品时点击程序界面的运行按钮运行即可,不再每运行一次就连接--关闭一次数据库。如果不能实现,那只能用这种办法了。
“其他人刷新下数据库连接”,指断开并重新连接数据库吗?还有我目前都用ADO,是不是用SQL做一下Update可以有效?
谢谢!

十三门徒 2012-06-06
  • 打赏
  • 举报
回复
你是不是只是在登录的时候有查询记录,后面都是处理这个记录了?
如果是这样,
你可不可以在做其他操作的时候,再重新从数据库里面查询数据呢
这样应该就没问题
gogodiy 2012-06-06
  • 打赏
  • 举报
回复
首先:第一站位处插入记录后,他自己能不能看到?
第二:如果他自己能看到,那说明记录已经存在数据库,其他人刷新下数据库连接,重新从数据库获取下记录不就行了。
第三:如果他不能看到,那说明他这个起点都没添加成功记录,那后面其他站位当然看不到。
最后:不推荐一打开程序就登录数据库,应该是在需要获取数据或者对数据进行操作的时候再连接数据库,操作完毕立刻关闭与数据库的连接。这样更好。

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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