为什么两个客户端的程序不能同时向同一个表中写数据?(100分)

  • 主题发起人 主题发起人 孙于
  • 开始时间 开始时间

孙于

Unregistered / Unconfirmed
GUEST, unregistred user!
我的程序,client端用c++ builder, server端用SQL Server,当两个用户在
用同一个表时,为什么当一个用户向表里POST时,总是存不进去,死在那儿。只有另一个用户退出时,才能存进去。SQL Server能否支持多用户同时向表中写数据,
怎样配置SQL Server端?
 
这是因为当一个用户在对表进行写操作时,dbms要将表锁住,不允许其他用户进行
写操作,
你的程序中出现这种情况,应该和你的程序有关,我没用过 c++ builder,但是我用
别的语言写类似的程序,当对表进行完写操作后,都有语句可停止dbms对表的锁定.
 
Tangqs确是高见。估计你用来访问数据库的控件应该是DBGRID、DBEDIT之类的
Db类控件。这类控件在访问数据库时必须和数据库保持着连接。这样,被访问
的数据库表就会被加锁(对SQL Server来说,这个锁是共享锁)。这时,其他
程序要更改这些数据时,也要对被修改的数据加锁(从SQL Server来说,这个
锁是排他锁,即必须要独占这些资源)。若共享锁存在,则dbms必须等待共享
锁解除后才能加锁。
DB类控件用来访问文件型数据库还可以,若访问大型数据库,就会出现这个问
题。建议改用TQuery、TStringGrid、TEdit等控件来取代TTable、TDbGrid、
TDbEdit等控件,把查询的数据读如内存后立即关闭与数据库的连接。
 
1.sql7支持行级羧,所以不编辑同一条记录,不会出现以上问题;
2.别用TABLE!
 
请问各位高手,我的client端一个界面大约有30个DbEdit与
表中的字段相连,且需要大约20 minute 来完成填写各个字段,
向数据库中 Post DbEdit 中的数据.为什么别的用户不能同时
使用同一个程序,做同样的操作,向数据库中 Post DbEdit
中的数据,只能一个人使用?如果两个人使用,一个人向表里
Post 时,就会死在那里,直到另一个用户退出程序才行?

我要如何修改程序?Help!
 
TQuery+TUpdateSQL,决无问题
 
实在不行就用edit,最后一次post。不过程序复杂点。先对付着使吧。
 
用CachedUpdates+Transaction.
 
我一直用walala和delphiwolf的方法!
虽然麻烦了点,但自己的控制却更灵活,也更放心!
 
Table控件是表锁,也就是说,一个程序进行操作时,
所涉及到的表都会被锁住。
建议用Query,用Insert语句插入数据,
这样是页锁,一次只会锁住2K(1页)的数据,
而且锁的粒度是可调的
 
Help!还用TDBEdit 控件,我要如何修改程序?
 
接受答案了.
 
后退
顶部