delphi中的adoquery是将数据库中的数据先取到本地再进行操作,如果两个客户端对同一条记录进行更新操作,则第一个客户端post后,第二个客户端再进行post操作,这样会出错!
由于adoquery是先将数据取到本地来再进行操作,一个客户端在不重新读库的情况下就看不到其它客户端进行的操作(只能看到取到本地的数据),如果读库则会影响速度(数据量大的情况下).如:一个客户端做完了1销售号单,另一个客户端做完了2号销售单,则第一个客户端看不到2号销售单,怎样才能看得到呢,有什么合理的处理方法,急!急!急!
由于adoquery是先将数据取到本地来再进行操作,一个客户端在不重新读库的情况下就看不到其它客户端进行的操作(只能看到取到本地的数据),如果读库则会影响速度(数据量大的情况下).如:一个客户端做完了1销售号单,另一个客户端做完了2号销售单,则第一个客户端看不到2号销售单,怎样才能看得到呢,有什么合理的处理方法,急!急!急!
是用adoquery.refresh吗?这样不就是重新读库了吗?
这个问题怎么处理呢?
LOCK TABLE [TableName] IN [LockType] MODE 这样加锁别人还能访问么?
关注......
这个问题怎么处理呢?
1。动态刷新,这样会要求你的表的数据量,大的话可能速度较慢,小的话应该没问题。
2。将adoquery有记录数设为1,或与数据库保持同步。你试下2吧。祝你好运!!!
那本书是李维写的吗?李维的新书?
数据库是用sql server2000,用adoquery去连的!!
而adoquery是先将数据取到本地再进行操作的,不是实时地和库连的!!这种做法是正确,不然经常读库可能会影响速度,但这样两个客户端的数据不就不统一了吗?
如:在一号客户端销售的单子,客户到二号客户端去销退,二号客户端根本没有一号客户端的数据(在没有重新连库的情况下),这样就会有问题,总不可能让客户在几号台买的东西去几号台销退吧?
你们说呢?唉,好急呀!!!!!!
1 ado的事务处理,事务不结束,别人不能修改
2 SQL Server的加锁功能
例如:SELECT au_lname FROM authors WITH (TABLOCKX)
2。将adoquery有记录数设为1,或与数据库保持同步。我查了下我做的处理,是这样的:
将adoquery的CacheSize设为1,CursorLocation设为clUseServer,CursorType设为ctDynamic。 不过,我没有用DBGRID,而是自己一次处理一条记录,这样,当记录指针移动时,显示的值就都是数据库中当前的实际内容。 不知你的数据库有多大,记录数有多少,网络环境如何,实际应用效果会怎么样,我的目前还没觉得有什么问题。
[email protected]
這樣就不會出錯了.
adoconnection.begintrans;
adoquery.post;
adoconnection.committrans;
except
on EDatabaseError do //捕获事务提交错误异常
begin
Form_DM_Connection.ADOConnection1.RollbackTrans; //回滚事务
Form_accident_vehicle.DBGrid.SetFocus;
end;
end;
捕获事务提交错误异常时可以给出提示
ctUnspecified : 不指定游标类型.
ctOpenForwardOnly:仅向前移动的游标,对于仅顺序向前读的记录集巨好.
ctKeyset: 键值游标. 不允许其他用户添加记录,而且其他用户删除的记录也不能访问.
ctDynamic :动态游标,其他用户的修改,添加,删除都允许,也可以移动记录指针
ctStatic 静态游标看不到其他人的修改常用于报表处理.游标位置在客户端时,只有这一种有效.
不知道说的是否对,我对英文的理解和平时用的做法是这样.
因些,你的问题中是游标在服务器,而且cursortype用ctDynamic.关于你的第二个问题,你可以在OnWillMove和OnEndOfRecordset事件添加控制代码.火神六号兄给我的答复!!!大家不懂的可以参考!!
要解决的问题:能否控制dbnavigator在到了最后一条记录后next键就变灰,而不用再按一下再灰。
不处理的话,在游标是在client时只是多按一下,而游标在server时就会走向一条空记录(会出问题),请问有什么解决办法没?
我也同样的问题在:
http://expert.csdn.net/Expert/topic/2113/2113565.xml?temp=.8411371还没有解决!!
望各位大虾关注
dbgrid.readonly:=true;
同步。
删除、递交、修改前刷新dbgrid。
不要用dbnavigator,放几个按钮,分别执行edit post delete。------简单就好。子弹可以解决的问题,就不要用刀、用剑来解决。 ^_^
只有这种方法才能保证客户端的数据一致性吗?