###怎样动态的把数据集设定为只读状态?######不是很容易哦!(100分)

  • 主题发起人 主题发起人 LUCKWZY
  • 开始时间 开始时间
L

LUCKWZY

Unregistered / Unconfirmed
GUEST, unregistred user!

我有一个数据集(Adotable1),当我一条一条的浏览时,想根据特定的条件
设定它的读写状态!(有的记录允许更改、有的则只能查看)

说明:1、由于某种原因,我不能用DBGIRD,而用了很多DBEDIT、DBCOMBOBOX等控件
因此不能用 dbgrid1.readonly:=true;

2、用dataset的locktype adotable1.locktype:=ltreadonly
是可以实现数据的只读! 但每设定一次dataset的读写都必须先关闭数据集
然后再打开,这样太浪费网络资源

3、建立一个过程,在过程用循环设定dataset字段为只读,
Adotable1.field[0].readonly:=true;
在程序中调用(我现在用的就是这个方法)
这样也有一个问题,就是速度较慢(有明显的等待时间)

请各位大侠,拔刀相助,给小弟指条明路!



 
BeforeEdit里修一修如何 ?
 
能修改的数据用一个ADOTable/ADOQuery读出,设其ReadOnly属性为True,只能看的数据用
另一个ADOTable/ADOQuery读出,在程序界面上用不同的数据感知控件关联这两个数据集,
以区别只读和可读写。即使你千辛万苦地实现了在一个DBGrid里有些行能修改,有些行又不
能,用户用起来也会非常困惑,所以建议不要干这种出力不讨好的事。
 
两个办法:
1、最简单的方法就是设置
DataSource.AutoEdit:=False;
这样DBEdit可以输入,但滚动时不会被保存,稍欠完美。

2、设置DataSource的onStateChange事件
if DataSource1.DataSet.State in [dsEdit,dsInsert] Then
DataSource1.DataSet.Cancel;
这个可以锁住DBEdit了,不过DBNavigator的保存按钮回闪动,还是不爽。

如果以上两个结合起来,应该可以做到完美一些。
 
这个问题已经讨论过了,无解!!!!?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1298456
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
911
SUNSTONE的Delphi笔记
S
后退
顶部