高分求助:ADO對視圖的更新問題,如何讓ADO只更新視圖中指定的表? ( 积分: 200 )

  • 主题发起人 主题发起人 gaobangsheng
  • 开始时间 开始时间
G

gaobangsheng

Unregistered / Unconfirmed
GUEST, unregistred user!
各位老兄,問一個很久都沒解決的問題啊!<br>三層環境中:<br>&nbsp;&nbsp;&nbsp;&nbsp;中間層讀取數據庫中的視圖數據返回到客戶端,然後,客戶端根據需要,對數據進行了修改,然後進行保存.&nbsp;但存在一個問題,就是ADO會將所以視圖中對應的表中改動的數據全部更新.這樣是不正確的,因為很多join&nbsp;過來的表&nbsp;只是用於顯示,如:&nbsp;客戶名稱,員工名稱等,是不讓改的.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;簡單的說,就是有沒有方法實現,讓ADO只更新視圖中的指定表到數據庫中,類類似於BDE中的&nbsp;TUpdateSQL的功能.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;有控件給我實現也行,謝謝啊
 
唉<br>好像沒有啊<br>那就不要用視圖,用多表查詢,你可以只更新其中的幾個字段啊
 
楼主可以自已写SQL语句更新相关字段,前端只需要Refresh一下即可。
 
To&nbsp;suyi3026:<br>&nbsp;&nbsp;多表查詢如何實現,請幫一下忙,&nbsp;說一下吧!<br>To&nbsp;ChrisMao:<br>&nbsp;&nbsp;自已寫SQL語句?麻煩具體講一下,謝謝<br><br>&nbsp;&nbsp;如果有什麼好方法也可以回我郵箱裡,gaobangsheng@163.com謝謝啊,我好久沒上delphibbs了,分要了也沒用,如果問題解決了,給多少都行啊.
 
写一个触发器吧<br>CREATE&nbsp;TRIGGER&nbsp;[TRIGGER&nbsp;NAME]&nbsp;ON&nbsp;[视图名]&nbsp;<br>FOR&nbsp;INSERT<br>as<br>insert&nbsp;into&nbsp;tablename1(f1,f2,f3)&nbsp;values(v1,v2,v3)<br>insert&nbsp;into&nbsp;tablename2(f1,f2,f3)&nbsp;values(v1,v2,v3)<br>insert&nbsp;into&nbsp;tablename3(f1,f2,f3)&nbsp;values(v1,v2,v3)<br>就可以了。
 
写一个触发器吧<br>CREATE&nbsp;TRIGGER&nbsp;[TRIGGER&nbsp;NAME]&nbsp;ON&nbsp;[视图名]&nbsp;<br>FOR&nbsp;INSERT,UPDATE,&nbsp;DELETE&nbsp;<br>as<br>if(&nbsp;inserted&nbsp;)<br>begin<br>insert&nbsp;into&nbsp;tablename1(f1,f2,f3)&nbsp;values(v1,v2,v3)<br>insert&nbsp;into&nbsp;tablename2(f1,f2,f3)&nbsp;values(v1,v2,v3)<br>insert&nbsp;into&nbsp;tablename3(f1,f2,f3)&nbsp;values(v1,v2,v3)<br>end<br>else&nbsp;if(updated)<br>begin<br>update&nbsp;table1&nbsp;set&nbsp;....<br>update&nbsp;table2&nbsp;set....<br>end<br>else<br>...<br>就可以了。
 
樓上的誤解我的意思了!<br>&nbsp;&nbsp;其實我就是想控制一下,哪些字段更新到數據庫,哪些字段不讓更新.<br>&nbsp;&nbsp;客戶端有改變,在中間層想辦法控制某些字段更新,其它字段不回寫到數據庫中
 
在视图加上来更新/插入触发器啊!你可以在触发器里选择更新/插入哪些字段/表的.<br>此外,在中间层的DataSetProvider(不知你用了没有)的OnUpdateData事件里也可以自己处理更新/插入/删除的;<br>对了,还可以在DataSet.AfterOpen事件里设置字段的ProviderFlags,比如:<br>&nbsp;&nbsp;with&nbsp;DataSet.FieldByName('fieldname')&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;ProviderFlags&nbsp;:=&nbsp;ProviderFlags&nbsp;-&nbsp;[pfInUpdate,&nbsp;pfInWhere];<br>&nbsp;&nbsp;end;
 
To&nbsp;dreamisx:<br>&nbsp;&nbsp;您的方法我覺得可行啊!<br>&nbsp;&nbsp;觸發器中寫的話,不容易控制.<br>&nbsp;&nbsp;後兩種方法可行吧應該,不過我還是想請教一下,在DataSetProvider中控制好像好點,但是沒有用過,您能不能提供點方法,例子什麼的,感激不盡啊!
 
我说错了,对中间层的DataSetProvider,应该在它的BeforeUpdateRecord事件里控制,举例如下(李大嘴写的那本&lt;&lt;Inside&nbsp;VCL&gt;&gt;里有例子):<br>procedure&nbsp;TRemoteDMTest.dspTestBeforeUpdateRecord(Sender:&nbsp;TObject;<br>&nbsp;&nbsp;SourceDS:&nbsp;TDataSet;&nbsp;DeltaDS:&nbsp;TCustomClientDataSet;&nbsp;&nbsp;//DeltaDS里就是要更新的数据<br>&nbsp;&nbsp;UpdateKind:&nbsp;TUpdateKind;&nbsp;var&nbsp;Applied:&nbsp;Boolean);<br><br>&nbsp;&nbsp;procedure&nbsp;DeleteData;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;qryExec&nbsp;do&nbsp;begin&nbsp;&nbsp;//qryExec是一个在RemoteDataModule里建好的专门用于执行SQL的Query组件<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL.Text&nbsp;:=&nbsp;Format('delete&nbsp;from&nbsp;test&nbsp;where&nbsp;KeyID=%d',&nbsp;[DeltaDS.FieldByName('KeyID').AsInteger]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;procedure&nbsp;InsertData;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;//...<br>&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;procedure&nbsp;UpdateData;<br>&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;//...<br>&nbsp;&nbsp;end;<br><br>begin<br>&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;UpdateKind&nbsp;of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ukModify:&nbsp;UpdateData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ukInsert:&nbsp;InsertData;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ukDelete:&nbsp;DeleteData;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:&nbsp;Exception&nbsp;do&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LogError(E.Message);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise;<br>&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;end;<br>&nbsp;&nbsp;Applied&nbsp;:=&nbsp;True;&nbsp;&nbsp;//表示自己处理了<br>end;
 
unit&nbsp;ADOUpdateSQL;<br><br>interface<br><br>uses<br>&nbsp;&nbsp;&nbsp;Windows,&nbsp;Messages,&nbsp;SysUtils,&nbsp;Classes,&nbsp;Graphics,&nbsp;Controls,&nbsp;Forms,&nbsp;Dialogs,<br>&nbsp;&nbsp;&nbsp;Db,&nbsp;ADOInt,&nbsp;ADODB,Variants;<br><br>type<br>&nbsp;&nbsp;&nbsp;TUpdateErrorEvent&nbsp;=&nbsp;procedure(DataSet:&nbsp;TDataSet;&nbsp;E:&nbsp;EDatabaseError;&nbsp;UpdateKind:&nbsp;TUpdateKind;&nbsp;var&nbsp;UpdateAction:&nbsp;TUpdateAction)&nbsp;of&nbsp;object;<br>&nbsp;&nbsp;&nbsp;TADOUpdateSQL&nbsp;=&nbsp;class;<br><br>&nbsp;&nbsp;&nbsp;TADOUpdDataSet&nbsp;=&nbsp;class(TADODataSet)<br>&nbsp;&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject:&nbsp;TADOUpdateSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOnUpdateRecord:&nbsp;TUpdateRecordEvent;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fOnUpdateError:&nbsp;TUpdateErrorEvent;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetUpdateObject(Value:&nbsp;TADOUpdateSQL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;UpdatePending(var&nbsp;UpdateKind:&nbsp;TUpdateKind):&nbsp;boolean;<br>&nbsp;&nbsp;&nbsp;protected<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Protected&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;ApplyUpdates(AffectRecords:&nbsp;TAffectRecords);<br>&nbsp;&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;UpdateBatch(AffectRecords:&nbsp;TAffectRecords&nbsp;=&nbsp;arAll);&nbsp;reintroduce;<br>&nbsp;&nbsp;&nbsp;published<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Published&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;UpdateObject:&nbsp;TADOUpdateSQL&nbsp;read&nbsp;FUpdateObject&nbsp;write&nbsp;SetUpdateObject;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Events&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//property&nbsp;OnUpdateRecord:&nbsp;TUpdateRecordEvent&nbsp;read&nbsp;FOnUpdateRecord&nbsp;write&nbsp;FOnUpdateRecord;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;OnUpdateError:&nbsp;TUpdateErrorEvent&nbsp;read&nbsp;fOnUpdateError&nbsp;write&nbsp;fOnUpdateError;<br>&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;TADOUpdateSQL&nbsp;=&nbsp;class(TComponent)<br>&nbsp;&nbsp;&nbsp;private<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Private&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FDataSet:&nbsp;TADOUpdDataSet;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries:&nbsp;array[TUpdateKind]&nbsp;of&nbsp;TADOQuery;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSQLText:&nbsp;array[TUpdateKind]&nbsp;of&nbsp;TStrings;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetQuery(UpdateKind:&nbsp;TUpdateKind):&nbsp;TADOQuery;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetSQL(UpdateKind:&nbsp;TUpdateKind):&nbsp;TStrings;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetSQLIndex(Index:&nbsp;Integer):&nbsp;TStrings;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetSQL(UpdateKind:&nbsp;TUpdateKind;&nbsp;Value:&nbsp;TStrings);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetSQLIndex(Index:&nbsp;Integer;&nbsp;Value:&nbsp;TStrings);<br>&nbsp;&nbsp;&nbsp;protected<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Protected&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;function&nbsp;GetDataSet:&nbsp;TADOUpdDataSet;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetDataSet(ADataSet:&nbsp;TADOUpdDataSet);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SQLChanged(Sender:&nbsp;TObject);<br>&nbsp;&nbsp;&nbsp;public<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Public&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;constructor&nbsp;Create(AOwner:&nbsp;TComponent);&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;destructor&nbsp;Destroy;&nbsp;override;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;DataSet:&nbsp;TADOUpdDataSet&nbsp;read&nbsp;GetDataSet&nbsp;write&nbsp;SetDataSet;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;Apply(UpdateKind:&nbsp;TUpdateKind);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;ExecSQL(UpdateKind:&nbsp;TUpdateKind);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;procedure&nbsp;SetParams(UpdateKind:&nbsp;TUpdateKind);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;Query[UpdateKind:&nbsp;TUpdateKind]:&nbsp;TADOQuery&nbsp;read&nbsp;GetQuery;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;SQL[UpdateKind:&nbsp;TUpdateKind]:&nbsp;TStrings&nbsp;read&nbsp;GetSQL&nbsp;write&nbsp;SetSQL;<br>&nbsp;&nbsp;&nbsp;published<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Published&nbsp;declarations&nbsp;}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;ModifySQL:&nbsp;TStrings&nbsp;index&nbsp;0&nbsp;read&nbsp;GetSQLIndex&nbsp;write&nbsp;SetSQLIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;InsertSQL:&nbsp;TStrings&nbsp;index&nbsp;1&nbsp;read&nbsp;GetSQLIndex&nbsp;write&nbsp;SetSQLIndex;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;property&nbsp;DeleteSQL:&nbsp;TStrings&nbsp;index&nbsp;2&nbsp;read&nbsp;GetSQLIndex&nbsp;write&nbsp;SetSQLIndex;<br>&nbsp;&nbsp;&nbsp;end;<br><br>procedure&nbsp;Register;<br><br>implementation<br><br>resourcestring<br>&nbsp;&nbsp;&nbsp;rsUpdateFailed&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;'Update&nbsp;failed';<br><br>procedure&nbsp;Register;<br>begin<br>&nbsp;&nbsp;&nbsp;RegisterComponents('FreDsterWare',&nbsp;[TADOUpdDataSet,&nbsp;TADOUpdateSQL]);<br>end;<br><br>{&nbsp;TADOUpdDataSet&nbsp;}<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdDataSet.SetUpdateObject<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:&nbsp;Set&nbsp;the&nbsp;UpdateObject<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If&nbsp;another&nbsp;dataset&nbsp;already&nbsp;references&nbsp;this&nbsp;updateobject,&nbsp;then&nbsp;remove&nbsp;the&nbsp;reference<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdDataSet.SetUpdateObject(Value:&nbsp;TADOUpdateSQL);<br>begin<br>&nbsp;&nbsp;&nbsp;if&nbsp;Value&nbsp;&lt;&gt;&nbsp;FUpdateObject&nbsp;then<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FUpdateObject)&nbsp;and&nbsp;(FUpdateObject.DataSet&nbsp;=&nbsp;Self)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject.DataSet&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject&nbsp;:=&nbsp;Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FUpdateObject)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FUpdateObject.DataSet)&nbsp;and<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(FUpdateObject.DataSet&nbsp;&lt;&gt;&nbsp;Self)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject.DataSet.UpdateObject&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject.DataSet&nbsp;:=&nbsp;Self;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;end;<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdDataSet.UpdateBatch<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdDataSet.UpdateBatch(AffectRecords:&nbsp;TAffectRecords);<br>begin<br>&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FUpdateObject)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or&nbsp;Assigned(FOnUpdateRecord)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ApplyUpdates(AffectRecords)<br>&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inherited&nbsp;UpdateBatch(AffectRecords);<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdDataSet.ApplyUpdates<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdDataSet.ApplyUpdates(AffectRecords:&nbsp;TAffectRecords);<br>var<br>&nbsp;&nbsp;&nbsp;UpdateAction&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TUpdateAction;<br>&nbsp;&nbsp;&nbsp;UpdateKind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TUpdateKind;<br>&nbsp;&nbsp;&nbsp;SavedFilter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;SavedFilterGroup&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TFilterGroup;<br>&nbsp;&nbsp;&nbsp;wasFiltered&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Boolean;<br><br>&nbsp;&nbsp;&nbsp;RequeryNeeded&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Boolean;<br>begin<br><br>&nbsp;&nbsp;&nbsp;SavedFilter&nbsp;:=&nbsp;Filter;<br>&nbsp;&nbsp;&nbsp;SavedFilterGroup&nbsp;:=&nbsp;FilterGroup;<br>&nbsp;&nbsp;&nbsp;wasFiltered&nbsp;:=&nbsp;Filtered;<br>&nbsp;&nbsp;&nbsp;FilterGroup&nbsp;:=&nbsp;fgNone;<br>&nbsp;&nbsp;&nbsp;RequeryNeeded&nbsp;:=&nbsp;False;<br><br>&nbsp;&nbsp;&nbsp;CheckBrowseMode;<br>&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;isEmpty&nbsp;then<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DisableControls;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateCursorPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;(RecordSet.EOF&nbsp;and&nbsp;RecordSet.BOF)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordSet.Filter&nbsp;:=&nbsp;adFilterPendingRecords;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;(RecordSet.EOF&nbsp;and&nbsp;RecordSet.BOF)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordSet.MoveFirst;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;RecordSet.Eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Recordset.Status&nbsp;and&nbsp;adRecDeleted)&nbsp;=&nbsp;adRecDeleted&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateAction&nbsp;:=&nbsp;uaFail;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateKind&nbsp;:=&nbsp;ukDelete;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequeryNeeded&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recordset.CancelBatch(adAffectCurrent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject.Apply(UpdateKind);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:&nbsp;EDatabaseError&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(OnUpdateError)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnUpdateError(Self,&nbsp;E,&nbsp;UpdateKind,&nbsp;UpdateAction)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordSet.MoveNext;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RecordSet.Filter&nbsp;:=&nbsp;adFilterPendingRecords;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterGroup&nbsp;:=&nbsp;fgPendingRecords;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filtered&nbsp;:=&nbsp;true;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;(EOF&nbsp;and&nbsp;BOF)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;First;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;not&nbsp;Eof&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateCursorPos;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;UpdatePending(UpdateKind)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RequeryNeeded&nbsp;:=&nbsp;RequeryNeeded&nbsp;or&nbsp;(UpdateKind&nbsp;&lt;&gt;&nbsp;ukModify);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateAction&nbsp;:=&nbsp;uaFail;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FOnUpdateRecord)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FOnUpdateRecord(self,&nbsp;UpdateKind,&nbsp;UpdateAction)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FUpdateObject.Apply(UpdateKind);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;except<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;on&nbsp;E:&nbsp;EDatabaseError&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(OnUpdateError)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OnUpdateError(Self,&nbsp;E,&nbsp;UpdateKind,&nbsp;UpdateAction)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Recordset.CancelBatch(adAffectCurrent);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Next;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterGroup&nbsp;:=&nbsp;fgNone;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FilterGroup&nbsp;:=&nbsp;SavedFilterGroup;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filter&nbsp;:=&nbsp;SavedFilter;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Filtered&nbsp;:=&nbsp;wasFiltered;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;RequeryNeeded&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Requery<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Refresh;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EnableControls;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;end;<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdDataSet.UpdatePending<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:&nbsp;Map&nbsp;UpdateStatus&nbsp;to&nbsp;UpdateKind<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>function&nbsp;TADOUpdDataSet.UpdatePending(var&nbsp;UpdateKind:&nbsp;TUpdateKind):&nbsp;boolean;<br>var<br>&nbsp;&nbsp;&nbsp;AUpdateStatus&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TUpdateStatus;<br>begin<br>&nbsp;&nbsp;&nbsp;AUpdateStatus&nbsp;:=&nbsp;UpdateStatus;<br>&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;(AUpdateStatus&nbsp;&lt;&gt;&nbsp;usUnmodified);<br>&nbsp;&nbsp;&nbsp;if&nbsp;Result&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UpdateKind&nbsp;:=&nbsp;TUpdateKind(Ord(AUpdateStatus)&nbsp;-&nbsp;1);<br>end;<br><br>{&nbsp;TADOUpdateSQL&nbsp;}<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.Apply<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.Apply(UpdateKind:&nbsp;TUpdateKind);<br>begin<br>&nbsp;&nbsp;&nbsp;SetParams(UpdateKind);<br>&nbsp;&nbsp;&nbsp;ExecSQL(UpdateKind);<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.Create<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>constructor&nbsp;TADOUpdateSQL.Create(AOwner:&nbsp;TComponent);<br>var<br>&nbsp;&nbsp;&nbsp;UpdateKind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TUpdateKind;<br>begin<br>&nbsp;&nbsp;&nbsp;inherited&nbsp;Create(AOwner);<br>&nbsp;&nbsp;&nbsp;for&nbsp;UpdateKind&nbsp;:=&nbsp;Low(TUpdateKind)&nbsp;to&nbsp;High(TUpdateKind)&nbsp;do<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSQLText[UpdateKind]&nbsp;:=&nbsp;TStringList.Create;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TStringList(FSQLText[UpdateKind]).OnChange&nbsp;:=&nbsp;SQLChanged;<br>&nbsp;&nbsp;&nbsp;end;<br><br>{$IFDEF&nbsp;UNREGISTERED}<br>&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;(csDesigning&nbsp;in&nbsp;ComponentState)&nbsp;then&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;running&nbsp;outside&nbsp;IDE}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(FindWindowEx(0,&nbsp;0,&nbsp;'TAppBuilder',&nbsp;nil)&nbsp;=&nbsp;0)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;Delphi&nbsp;not&nbsp;found}<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.NormalizeTopMosts;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ShowMessage(Self.ClassName&nbsp;+&nbsp;'&nbsp;is&nbsp;NOT&nbsp;a&nbsp;public&nbsp;domain&nbsp;product,&nbsp;if&nbsp;you&nbsp;find&nbsp;it&nbsp;usefull&nbsp;then&nbsp;please&nbsp;register&nbsp;it..');<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Application.RestoreTopMosts;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>{$ENDIF}<br><br>end;<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.Destroy<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>destructor&nbsp;TADOUpdateSQL.Destroy;<br>var<br>&nbsp;&nbsp;&nbsp;UpdateKind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TUpdateKind;<br>begin<br>&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FDataSet)&nbsp;and&nbsp;(FDataSet.UpdateObject&nbsp;=&nbsp;Self)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FDataSet.UpdateObject&nbsp;:=&nbsp;nil;<br>&nbsp;&nbsp;&nbsp;for&nbsp;UpdateKind&nbsp;:=&nbsp;Low(TUpdateKind)&nbsp;to&nbsp;High(TUpdateKind)&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FSQLText[UpdateKind].Free;<br>&nbsp;&nbsp;&nbsp;inherited&nbsp;Destroy;<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.ExecSQL<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.ExecSQL(UpdateKind:&nbsp;TUpdateKind);<br>begin<br>&nbsp;&nbsp;&nbsp;with&nbsp;Query[UpdateKind]&nbsp;do<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Prepared&nbsp;:=&nbsp;True;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ExecSQL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(RowsAffected&nbsp;=&nbsp;0)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DatabaseError(rsUpdateFailed);<br>&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.GetQuery<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>function&nbsp;TADOUpdateSQL.GetQuery(UpdateKind:&nbsp;TUpdateKind):&nbsp;TADOQuery;<br>begin<br>&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;Assigned(FQueries[UpdateKind])&nbsp;then<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries[UpdateKind]&nbsp;:=&nbsp;TADOQuery.Create(Self);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries[UpdateKind].SQL.Assign(FSQLText[UpdateKind]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FDataSet.Connection)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries[UpdateKind].Connection&nbsp;:=&nbsp;FDataSet.Connection<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries[UpdateKind].ConnectionString&nbsp;:=&nbsp;FDataSet.ConnectionString;<br>&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;FQueries[UpdateKind];<br>end;<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.GetSQL<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>function&nbsp;TADOUpdateSQL.GetSQL(UpdateKind:&nbsp;TUpdateKind):&nbsp;TStrings;<br>begin<br>&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;FSQLText[UpdateKind];<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.GetSQLIndex<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>function&nbsp;TADOUpdateSQL.GetSQLIndex(Index:&nbsp;Integer):&nbsp;TStrings;<br>begin<br>&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;FSQLText[TUpdateKind(Index)];<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.GetDataSet<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>function&nbsp;TADOUpdateSQL.GetDataSet:&nbsp;TADOUpdDataSet;<br>begin<br>&nbsp;&nbsp;&nbsp;Result&nbsp;:=&nbsp;FDataSet;<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.SetDataSet<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.SetDataSet(ADataSet:&nbsp;TADOUpdDataSet);<br>begin<br>&nbsp;&nbsp;&nbsp;FDataSet&nbsp;:=&nbsp;ADataSet;<br>end;<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.SetParams<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.SetParams(UpdateKind:&nbsp;TUpdateKind);<br>var<br>&nbsp;&nbsp;&nbsp;I&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Integer;<br>&nbsp;&nbsp;&nbsp;isOld&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Boolean;<br>&nbsp;&nbsp;&nbsp;Parameter&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TParameter;<br>&nbsp;&nbsp;&nbsp;ParameterName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;string;<br>&nbsp;&nbsp;&nbsp;AValue&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;Variant;<br>&nbsp;&nbsp;&nbsp;ADOField&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;OleVariant;<br>begin<br>&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;Assigned(FDataSet)&nbsp;then&nbsp;Exit;<br><br>&nbsp;&nbsp;&nbsp;with&nbsp;Query[UpdateKind]&nbsp;do<br>&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameters.ParseSQL(SQL.Text,&nbsp;True);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;I&nbsp;:=&nbsp;0&nbsp;to&nbsp;Parameters.Count&nbsp;-&nbsp;1&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameter&nbsp;:=&nbsp;Parameters.Items;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParameterName&nbsp;:=&nbsp;Parameter.Name;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isOld&nbsp;:=&nbsp;CompareText(Copy(ParameterName,&nbsp;1,&nbsp;4),&nbsp;'OLD_')&nbsp;=&nbsp;0;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;isOld&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Delete(ParameterName,&nbsp;1,&nbsp;4);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;not&nbsp;Assigned(FDataSet.FindField(ParameterName))&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Continue;<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADOField&nbsp;:=&nbsp;FDataSet.Recordset.Fields[ParameterName];<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;isOld&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AValue&nbsp;:=&nbsp;ADOField.OriginalValue<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;VarIsEmpty(ADOField.Value)&nbsp;or&nbsp;VarIsNull(ADOField.Value)&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameter.ParameterObject.Type_&nbsp;:=&nbsp;FDataSet.Recordset.Fields[ParameterName].Type_;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AValue&nbsp;:=&nbsp;NULL;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AValue&nbsp;:=&nbsp;ADOField.Value;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Parameter.Value&nbsp;:=&nbsp;AValue;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;end;<br><br>end;<br><br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.SetSQL<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.SetSQL(UpdateKind:&nbsp;TUpdateKind;&nbsp;Value:&nbsp;TStrings);<br>begin<br>&nbsp;&nbsp;&nbsp;FSQLText[UpdateKind].Assign(Value);<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.SetSQLIndex<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.SetSQLIndex(Index:&nbsp;Integer;&nbsp;Value:&nbsp;TStrings);<br>begin<br>&nbsp;&nbsp;&nbsp;SetSQL(TUpdateKind(Index),&nbsp;Value);<br>end;<br>{-----------------------------------------------------<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TADOUpdateSQL.SQLChanged<br><br>&nbsp;*&nbsp;Purpose&nbsp;&nbsp;:<br>&nbsp;*&nbsp;Author&nbsp;&nbsp;&nbsp;:&nbsp;Fred&nbsp;Schetterer<br>&nbsp;*&nbsp;History&nbsp;&nbsp;:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12-Mar-2000&nbsp;-&nbsp;Created<br>--------------------------------------------------------}<br><br>procedure&nbsp;TADOUpdateSQL.SQLChanged(Sender:&nbsp;TObject);<br>var<br>&nbsp;&nbsp;&nbsp;UpdateKind&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;TUpdateKind;<br>begin<br>&nbsp;&nbsp;&nbsp;for&nbsp;UpdateKind&nbsp;:=&nbsp;Low(TUpdateKind)&nbsp;to&nbsp;High(TUpdateKind)&nbsp;do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Sender&nbsp;=&nbsp;FSQLText[UpdateKind]&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;Assigned(FQueries[UpdateKind])&nbsp;then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;begin<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries[UpdateKind].Parameters.Clear;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FQueries[UpdateKind].SQL.Assign(FSQLText[UpdateKind]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Break;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;end;<br>end;<br><br>end.
 
后退
顶部