词条 | updatesql控件 |
释义 | 当Query的数据集为只读的时候,如果要修改数据,可以利用UpdateSql. 1.将Query 的CacheUpdate设为True;UpdateObject设为UpdateSql1; 2.双击Updatesql1弹出编辑器,在'sql'标签中编写修改数据的sql语句如: update temptable set custNo = :custNo where custNo = :OLD_custNo 3.然后在程序中修改数据; 如;Query1.edit; Query1.FieldByname('Field1').asstring:='ff'; Query1.post; Query1.ApplyUpdates; 如此OK,即可改变数据库中的值。 原理:Query1的数据集虽然是只读的,但利用缓冲(CacheUpdate)可以将修改值保存在其Delta中后用Post,ApplyUpdates来将修改值更新至实际数据库中的值.此时Query1将根据操作(修改删除插入从UpdateSql中寻找相应的SQl语句,并通过BDE传递至后台数据库中实际执行,这样达到修改只读数据集的目的。 Query.sql.add('select * from table1 as T join Table2 as T2' ) Query.open;//该数据集即为只读 因为主要是设置属性,源码很简单和普通的一样.操作步骤: 1.拖拉3个控件:Tquery,Tdatabase,TUpdateSql,名分别为:query1,database1,UpdateSql1 (BDE面板上) 2.设置Database1属性:aliaseName:DBDEMOS ,DatabaseName:DB, 设置Query1属性:DataBaseName:=DB, SQL:='Select C.*,o.* from Customer as c join orders as o on C.Custno=O.custno' CacheUpdate设为True;UpdateObject设为UpdateSql1; 3.双击Updatesql1控件,弹出对话框;按generate Sql,切换至'sql'标签 选择Modify 修改sql语句: update customer set CustNo = :CustNo, Company = :Company, Addr1 = :Addr1, Addr2 = :Addr2, City = :City, State = :State, Zip = :Zip, Country = :Country, Phone = :Phone, FAX = :FAX, TaxRate = :TaxRate, Contact = :Contact, LastInvoiceDate = :LastInvoiceDate where CustNo = :OLD_CustNo 按确定 4.拖拉TBotton,TDBGRid,TDataSource至窗体名为(Btn1,Grid1,Datasource1) 连接Grid1.datasource:=Datasource1;Datasource1.dataset:=Query1 5.BtnOnlick事件: query1.open; Query1.First Query1.edit; Query1.FieldByname('Company').asstring:='company china'; Query1.post; Query1.ApplyUpdates; 1.updatesql用于数据集是只读, 不能用正常的方法直接修改 我举的例子是从两个表选出的数据,是只读的 只是为了说明updatesql的用途.其他任何只读数据集都可以用updatesql来修改 2.对数据集中数据的赋值是通过其他任何一种修改数据的方法进行,和其他的数据修改一样, 如FieldByName('custno').asstring:='ffff'或通过DBEDit,dbgrid 等等,也就是只读的数据集从表面上和其他数据集没什么两样.只是在更新修改的数据时,新赋的值自动赋给updatesql的sql 语句中的参数如:custno等,然后updatesql自动执行sql语句更新后台数据库 3.这个只是根据你的需要,因为只读数据集通常是从两个表中选出的数据, 4.:custNo参数接受的是你的要赋的新值 .如果你修改的正好是where 内的关键字段,如果用where custno=:custno此时:custno是新值,那么sql语句就无法找到原来的记录了.为了找到原来的那条记录就要用此记录关键字段未改变前的数据值,updatesql自动记录各字段的原值,以:old_字段名来表示如:old_Custno 。 5.要更改那个表,可以在sql语句中from 表名 来指定。 |
随便看 |
|
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。