一、
ADOQuery的LockType
今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性。
把控件DBGridEh的一列的checkbox设为true,将其绑定DataSourceA和DOQuery。用Button添加了一个事件,用来取消对checkbox的操作:ADOQuery.CancelBatch();可是只能取消最后一步的操作。检查了很长时间才发现在DBGridEh的DataSource的Dataset 下的LockType的属性设置问题,我设置成了:ItOptimistic 后来将此属性改为:ltBatchOptimistic 就可以了
在网上查了一下,有如下说法:
1.ADOQuery.Update;ADOQuery.Delete;不用设置属性.
2.locktype指定用户打开数据集时对数据集的锁定级别:
ltUnspecified 未指定锁定级别
ltReadOnly Read-only 只读
ltPessimistic 记录级别(该记录被编辑时其它用户不能用)
ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)
ltBatchOptimistic 批量模式(使用缓存,进行批量提交)
ADOQuery的属性含义:
ltUnspecified 不特別指定
ltReadOnly 选出來的资料表只能读,无法写入
ltPessimistic 选出来的资料表可以写入,当改记录写入时会立刻写入并锁定
ltOptimistic 选出来的资料表可写入,当该记录表写入时不会立刻写入但会锁定,当执行updates时才正式写入改记录
ltBatchOptimistic 选出来的资料表可写入,当该记录写入时不会立刻写入但会锁定,当执行updates才正式整批写入该记录(可以修改多条整批update)
二、
Delphi中的ADOquery 用法
三、
ADOQuery的几个事件:
procedure ADOQuery1_BeforePost ( DataSet : TDataSet);
begin
end;
是在ADOQuery1或者相关联的DataSource的数据集改动后,在将改动保存到内存之前激发的事件,上次使用这个事件是用来判断修改之后的数据是否规范,如果不规范,就给出提示
示例如下: 要修改的列关联的Column 是Score
procedure ADOQuery1_BeforePost ( DataSet : TDataSet);】
var
score:string;
begin
score:=DataSet.FieldByName(‘score’).AsString; // 提取修改之后的数据
if (‘score不符合规则’) then
self.msgWarning(‘’输入的数据有错);
end;
procedure ADOQuery1_AfterScroll (DataSet: TDataSet);
begin
end;
是在点击与ADOQuery1相关联的DBGridEh1中的记录后激发的事件,可以用来做两个DBGridEh控件的关联事件。
如:点击DBGridEh1 中的记录1,在DBGridEh2中就显示记录1的详细信息(DBGridEh2与ADOQuery2相关联),(示例如下:
procedure ADOQuery1_AfterScroll (DataSet: TDataSet);
var
sql : string;
begin
sql:=’select * from tableneme where key=’”+ADOQuery1.fieldbyname(‘key’).AsString+”’’
ADOQuery2.SQL.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(sql);
ADOQuery2.SQL.Open;
end;
PS:现在用过这两个事件,以后还会补上其他相应事件。
原文:https://www.cnblogs.com/jijm123/p/13302230.html