updatesql控制項

updatesql控制項是一個計算機術語,當Query的數據集為唯讀的時候,如果要修改數據,可以利用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 表名 來指定。

相關詞條

熱門詞條

聯絡我們