关于这个简单的问题论坛有类似的讨论,我查了一下,但不切底,我也没有得到一个清晰的答案,现在在这个地方提出来,希望大家能讨论清楚,以正视听:问题描述:(最普通、最典型的delphi数据库开发示例子)我是用delphi+sql2000开发的一个小型C/S架构的信息管理系统用于单位人事和财务管理,供多个人同时使用,对数据库的操作采用的delphi中的DBedit控件(DBNavigator)-->DataSource控件-->ADOTable控件-->ADOConnection控件-->SQL数据库
关于控件的属性设置就用的它们的默认设置,也就是拖下来就用了。下面讨论一下关于数据并发操作的问题:1、当前所描述的例子是不是就已经可以解决多用户并发访问数据的问题?
   如:当一个人正在用DBNavigator控件浏览并修改数据时,他还没有点“确定”,而另一个人也在随后用同样方式访问该记录并很快修改完成,这时第一个人点确定的时候会出现什么问题,屏幕上是不是可能提示“数据行无法定位”之类的提示。怎么截获这个信息并作相应的处理,有例子吗?2、是不是我对上面的相关数据控件的属性要做什么样设置才行?3、对我所描述的这个简单的例子是不是我不应该用这种简单的解决方案(听人说delphi的优势正在于此呀),应该用什么样的方案?4、SQL个人版是不是最多只5个并发访问?

解决方案 »

  1.   

    并发是由数据库完成的,一般情况下,不可能出现同时修改某条记录的情况,如果表或记录被锁定,SQL修改出错,可用try...except来截获
      

  2.   

    并发有数据库控制了,你不用担心,在一个修改提交时,Sql Server 自动回锁定该记录,修改解锁,其他提交会等待,实际上的并发是在极短的时间发生的,多用户的操作,都可以提交,记录以最后提交为准,如果某用户要对一个表较长的时间操作(在存储过程中),可以主动上锁.
      

  3.   

    数据库的并发和客户端并发访问概念是不同的,现在的大型数据库系统都支持并发处理了。对MSSQL主要是通过锁的概念来解决并发处理的冲突。如果对于多数据(多表)提交使用事务来解决数据同步的问题。你所描述的第一个问题其实是有两种答案的:1、如果你在设计时使用的是采用关键字判断更新,则就算其他人更新了数据,你还是可以同过关键字正确更新, 但是你的同事的更新就有可能被你的更新修该了。2、如果你的设计是采用所有字段参与判断更新,则会出现你讲的情况,一般这样的时候就提示对方是否需要继续更新,如果是就采用第1方法进行更新
      

  4.   

    同时保存对同一条记录的修改,的确是有可能出现数据不一致的问题,尽管概率很小。
    sql server的个人版应该是只能5人访问的。印象中,就企业版对同时访问的用户没要求。解决这种PV操作,sql server中有一种RowVersion的数据类型。你在表中做一个该类型的字段。
    只要一条记录发生改变,该字段也会更新,你在更新的条件加上and RowVersion=.......
    这样的话,同时提交的信息,有一个会提交失败。可以解决这种并发访问的问题。