在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一、 ADOQuery的LockType 今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性。 把控件DBGridEh的一列的checkbox设为true,将其绑定DataSourceA和DOQuery。用Button添加了一个事件,用来取消对checkbox的操作:ADOQuery.CancelBatch();可是只能取消最后一步的操作。检查了很长时间才发现在DBGridEh的DataSource的Dataset 下的LockType的属性设置问题,我设置成了:ItOptimistic 后来将此属性改为:ltBatchOptimistic 就可以了 在网上查了一下,有如下说法: 1.ADOQuery.Update;ADOQuery.Delete;不用设置属性. ADOQuery的属性含义: ltUnspecified 不特別指定
二、 Delphi中的ADOquery 用法 都知道Delphi在数据库操作是非常好用的,delphi把ADO一些方法属性都集成了,以下是我的一些总结:
***************************************
通过sql的存储过程来实现:
添加
With ADOQuery1 do begin Close; SQL.Clear; SQL.Add(' Insert Into Table1(Field1,Field2)') SQL.Add(' Values(10,20)'); ExecSQL; end; 修改 With ADOQuery1 do begin Close; SQL.Clear; SQL.Add(' Update Table1 Set Field1=20,Field2=30)') ExecSQL; end; 删除 With ADOQuery1 do begin Close; SQL.Clear; SQL.Add(' Delete From Table1') SQL.Add(' Where Field1=20 and Field2=30'); ExecSQL; end; 查询 With ADOQuery1 do begin Close; SQL.Clear; SQL.Add(' Select Field1,Field2 From Table1') SQL.Add(' Where Field1=20 and Field2=30'); Open; end; ***************************************************
通过Delphi自有的方法属性实现:
添加: with ADOQuery1 do append; ...... post; 删除: with ADOQuery1 do delete(选择删除的记录); //默认删除记录指针指向的记录 修改: with ADOQuery1 do edit; ...... post; adotable1.Append; //添加 ADotable1.Fields.FieldByName('gxid1').Value:=gx; adotable1.Post; adotable1.delete; //删除 adotable1.edit; //修改 ADotable1.Fields.FieldByName('gxid1').Value:=gx; adotable1.post; WITHI adoquery do begin//添加 adoquery.open;//motice set adoquery.sql adoquery.append;//OR adoquery.insert; fieldbyname(fieldname).asstring:=trim(edit1.text); ...... adoquery.post; end; 删除: adoquery.delete 修改: adoquery.edit; fieldbyname(fieldname).asstring:=trim(edit1.text); 有关细节可以参看帮助OR DEMO
三、 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:现在用过这两个事件,以后还会补上其他相应事件。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论