【Delphi学习】ADOQuery 用法
<p>一、</p><p>ADOQuery的LockType</p>
<p>今天终于把纠缠了几天的问题改完了,说到底只是一个很小的问题,就是ADOQuery的一个小属性。</p>
<p> 把控件DBGridEh的一列的checkbox设为true,将其绑定DataSourceA和DOQuery。用Button添加了一个事件,用来取消对checkbox的操作:ADOQuery.CancelBatch();可是只能取消最后一步的操作。检查了很长时间才发现在DBGridEh的DataSource的Dataset 下的LockType的属性设置问题,我设置成了:ItOptimistic 后来将此属性改为:ltBatchOptimistic 就可以了</p>
<p>在网上查了一下,有如下说法:</p>
<p>1.ADOQuery.Update;ADOQuery.Delete;不用设置属性.<br>2.locktype指定用户打开数据集时对数据集的锁定级别:<br>ltUnspecified 未指定锁定级别<br>ltReadOnly Read-only 只读<br>ltPessimistic 记录级别(该记录被编辑时其它用户不能用)<br>ltOptimistic 独立模式(与原来结果集对照,如果在此期间其它用户修改了结果,则你的结果不能保存)<br>ltBatchOptimistic 批量模式(使用缓存,进行批量提交)</p>
<p>ADOQuery的属性含义:</p>
<p>ltUnspecified 不特別指定<br>ltReadOnly 选出來的资料表只能读,无法写入<br>ltPessimistic 选出来的资料表可以写入,当改记录写入时会立刻写入并锁定<br>ltOptimistic 选出来的资料表可写入,当该记录表写入时不会立刻写入但会锁定,当执行updates时才正式写入改记录<br>ltBatchOptimistic 选出来的资料表可写入,当该记录写入时不会立刻写入但会锁定,当执行updates才正式整批写入该记录(可以修改多条整批update)</p>
<p> </p>
<p>二、</p>
<p>Delphi中的ADOquery 用法</p>
<div>
<div>都知道Delphi在数据库操作是非常好用的,delphi把ADO一些方法属性都集成了,以下是我的一些总结:</div>
<div>***************************************</div>
<div>通过sql的存储过程来实现:</div>
<div>添加<br>With ADOQuery1 do<br>begin<br>Close;<br>SQL.Clear;<br>SQL.Add(' Insert Into Table1(Field1,Field2)')<br>SQL.Add(' Values(10,20)');<br>ExecSQL;<br>end;<br><br>修改<br>With ADOQuery1 do<br>begin<br>Close;<br>SQL.Clear;<br>SQL.Add(' Update Table1 Set Field1=20,Field2=30)')<br>ExecSQL;<br>end;<br><br>删除<br>With ADOQuery1 do<br>begin<br>Close;<br>SQL.Clear;<br>SQL.Add(' Delete From Table1')<br>SQL.Add(' Where Field1=20 and Field2=30');<br>ExecSQL;<br>end;<br><br>查询<br>With ADOQuery1 do<br>begin<br>Close;<br>SQL.Clear;<br>SQL.Add(' Select Field1,Field2 From Table1')<br>SQL.Add(' Where Field1=20 and Field2=30');<br>Open;<br>end;</div>
<div> </div>
<div> </div>
<div>***************************************************</div>
<div>通过Delphi自有的方法属性实现:</div>
<div><br>添加:<br>with ADOQuery1 do<br>append;<br>......<br>post;<br>删除:<br>with ADOQuery1 do<br>delete(选择删除的记录); //默认删除记录指针指向的记录<br>修改:<br>with ADOQuery1 do<br>edit;<br>......<br>post;<br><br><br>adotable1.Append; //添加<br>ADotable1.Fields.FieldByName('gxid1').Value:=gx;<br>adotable1.Post;<br><br>adotable1.delete; //删除<br><br>adotable1.edit; //修改<br>ADotable1.Fields.FieldByName('gxid1').Value:=gx;<br>adotable1.post;</div>
<div><br>WITHI adoquery do<br>begin//添加<br>adoquery.open;//motice set adoquery.sql<br>adoquery.append;//OR adoquery.insert;<br>fieldbyname(fieldname).asstring:=trim(edit1.text);<br>......<br>adoquery.post;<br>end;</div>
<div><br>删除:<br>adoquery.delete</div>
<div><br>修改:<br>adoquery.edit;<br>fieldbyname(fieldname).asstring:=trim(edit1.text);<br>有关细节可以参看帮助OR DEMO</div>
</div>
<p> </p>
<p>三、</p>
<p>ADOQuery的几个事件:</p>
<p>procedure ADOQuery1_BeforePost ( DataSet : TDataSet);</p>
<p>begin</p>
<p>end;</p>
<p>是在ADOQuery1或者相关联的DataSource的数据集改动后,在将改动保存到内存之前激发的事件,上次使用这个事件是用来判断修改之后的数据是否规范,如果不规范,就给出提示</p>
<p>示例如下: 要修改的列关联的Column 是Score</p>
<p>procedure ADOQuery1_BeforePost ( DataSet : TDataSet);】</p>
<p>var </p>
<p>score:string;</p>
<p>begin</p>
<p>score:=DataSet.FieldByName(‘score’).AsString; // 提取修改之后的数据</p>
<p>if (‘score不符合规则’) then </p>
<p>self.msgWarning(‘’输入的数据有错); </p>
<p>end;</p>
<p> </p>
<p>procedure ADOQuery1_AfterScroll (DataSet: TDataSet);</p>
<p>begin</p>
<p>end;</p>
<p>是在点击与ADOQuery1相关联的DBGridEh1中的记录后激发的事件,可以用来做两个DBGridEh控件的关联事件。</p>
<p>如:点击DBGridEh1 中的记录1,在DBGridEh2中就显示记录1的详细信息(DBGridEh2与ADOQuery2相关联),(示例如下:</p>
<p>procedure ADOQuery1_AfterScroll (DataSet: TDataSet);</p>
<p>var </p>
<p>sql : string;</p>
<p>begin</p>
<p>sql:=’select * from tableneme where key=’”+ADOQuery1.fieldbyname(‘key’).AsString+”’’</p>
<p>ADOQuery2.SQL.Close;</p>
<p>ADOQuery2.SQL.Clear;</p>
<p>ADOQuery2.SQL.Add(sql);</p>
<p>ADOQuery2.SQL.Open;</p>
<p>end;</p>
<p> </p>
<p>PS:现在用过这两个事件,以后还会补上其他相应事件。</p>
</div>
<div id="MySignature" role="contentinfo">
好的代码像粥一样,都是用时间熬出来的<br><br>
来源:https://www.cnblogs.com/jijm123/p/13302230.html
頁:
[1]