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

解决方案 »

  1.   

    一般来说,你的数据insert完了之后,其他的地方立马就可以查询到了,除非:你的事务封装的不好,事务没有commit,或者你的数据库的事务隔离级别设置有问题。
    两个方面好好查查看。
      

  2.   

    感谢楼上答复!
    在我的实现里,只在打开表时用到一次SQL语言(SELECT * FROM %s),其他地方全用ADO(MoveFirst、MoveLast、AddNew、PutCollect、GetCollect、Update...),这种写法是不是效率很差?你提到的问题,必须通过代码实现还是也可在企业管理器中设置实现?谢谢!
      

  3.   

    感谢以上两位!
    第一站位AddNew插入一行记录后,它自己是可以看到的,GetRecordCount会增加,用企业管理器打开表查看也是有的,同时,其他站位的程序如果是在第一站位执行插入记录操作之后启动的,也是可以看到这条记录的。问题是,如果各个站位程序都先打开了界面(同时会连接数据库),这时当第一站位插入记录时,其他站位的程序在不重启的情况下是检测不到的,除非其他站位关闭程序然后重新打开程序。
    我是希望各个站位打开程序界面时只连接一次数据库,而后程序处于就绪状态,做产品时点击程序界面的运行按钮运行即可,不再每运行一次就连接--关闭一次数据库。如果不能实现,那只能用这种办法了。
    “其他人刷新下数据库连接”,指断开并重新连接数据库吗?还有我目前都用ADO,是不是用SQL做一下Update可以有效?
    谢谢!
      

  4.   

    会不会跟表设计有关?现在是第一列名为ID,int型,设为主键,自动加1,第二列名为日期和时间,datetime型,默认值为getdate,后面列名都是些char型,前两个列不允许空,后面的都允许空,之外再没设置什么了
      

  5.   

    这个是做不到的,你在一台机器上用ADO,addnew,然后指望其他机器上打开的ADO连接能够响应这个addnew是不可能的,其他机器必须重新打开一次(也就是说必须重新执行一次查询)才能知道数据是否添加或改变。
      

  6.   

    感谢楼上!是SQL Server本身就做不到,还是我用ADO实现不了?那么一些大中网站用SQL Server的,怎么实现多用户交互的?
      

  7.   

    不是SQL Server做不到,这个已经超出了SQL Server的范围了,看你的需求,一般来说有2中方法。
    1.各客户端定时主动查询前一步是否完成。(这个也不是用打开的ADO连接能做到的,必须重新连接,查询)
    2.由服务器端主动推送完成信息给各客户端,各客户端接收消息后进行相应的操作。
      

  8.   

    两台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却能成功。
    有知道的,帮忙说下。
    谢谢!
      

  9.   

    其他站点读取数据的游标类型使用AdOpenDynamic试试,并且定时Requery
      

  10.   

    在程序中再加一个查询专门在当前站位更新数据前查询上一站位是否已完成,如未完成,提示上一站位未完成.
    sql server为数据库服务器,通过在客户端发sql命令到服务器,服务器再将执行结果返回到客户端,如果一次应将数据全部取到客户端,在客户端对全部数据进行操作,再提交数据,多用户操作时难以同步,效率也低.查询写一专门查询上一站位是否完成的查询,如查询较复杂,可做成存储过程.每次执行存储过程
      

  11.   

    我是楼主,不能更新问题我已改成每次运行程序(不是指双击exe启动程序,指点击程序界面按钮进行实际工作)时都连接/断开一次数据库。
    再问个问题,服务器端能否开启多个SQL Server服务?多个SQL Server服务是否就是多个实例的概念?我发现新建组可以,但是注册新服务时就无法找到本机(因为本机已经作为默认实例的服务器了)。如果想跑多个,是要找来安装盘在重新安装的过程中设置,还是只要对现行已安装好的进行一下配置就能实现?如果要重装才行就算了,产线的服务器我也不能随便弄。