zoukankan      html  css  js  c++  java
  • 【Delphi学习】ADOQuery 用法

    一、

    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 用法

    都知道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:现在用过这两个事件,以后还会补上其他相应事件。

  • 相关阅读:
    UITextField小结
    由iPhone项目生成iPad项目
    ios界面动画小结
    UIImagePickerController Class
    Xcode调试相关小结
    cocos2d简易引导
    python 多个装饰器组合应用,实现面向切面之AOP编程
    python 元类型编程, 单例模式SingleTon的一种实现方式
    python 实现简单的PerformanceCountCallHandler装饰器
    wxpython 之 GDI(二)
  • 原文地址:https://www.cnblogs.com/jijm123/p/13302230.html
Copyright © 2011-2022 走看看