多層架構的自動編號 |
尚未結案
|
sundy6719
初階會員 發表:136 回覆:78 積分:42 註冊:2002-07-10 發送簡訊給我 |
||
cosuki
一般會員 發表:10 回覆:40 積分:10 註冊:2003-06-05 發送簡訊給我 |
||
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
||
speedup
資深會員 發表:19 回覆:259 積分:280 註冊:2003-07-04 發送簡訊給我 |
引言: 請教一個問題在多層架構應用系統中在用戶端要做自動編號的程式要怎麼做才比較好因為還要考慮到多人同時增加資料的問題 我在單機上使用自己編號的程式沒問題可是要用於多層架構真的想不透要怎麼用才是最好的謝謝~~~編號(若為主鍵)一定要在Database 或APServer(假設你的編號是有規則的)做掉 另外一個重點是你必須將DataSetProvider的Options中的poPropogateChanges設定True ,如此一來,當Client下達ApplyUpdate後,Client的編號才會自動更新為新值,而不須手動下RefreshRecord或其他手動Merge Server 回傳資料方式 ps. 1.如果你採用資料庫自動編號,請在k-top 查 AutoInc Field 或'自動編號' 可獲得更詳細的做法 2.如果想自行在於AP端撰寫編號程式,個人建議可嘗試以下做法 cliet 先自行產生暫時的key值(在OnNewRecord做) Ap端的BeforeUpdateRecord對於新增資料,將其編碼欄位的NewValue依據你的規則設定將Client產生的暫存值提換成新的編碼值 if UpdateKind = ukInsert then begin DeltaDS.FieldByName('xxx').NewValue := 你的編碼規則函數 end;當然你的編碼規則函數也必須確保所產生的值為唯一的 混心雜欲 棄修身~唉
------
唉~ |
|
jieshu
版主 發表:42 回覆:894 積分:745 註冊:2002-04-15 發送簡訊給我 |
引言: 另外一個重點是你必須將DataSetProvider的Options中的poPropogateChanges設定True ,如此一來,當Client下達ApplyUpdate後,Client的編號才會自動更新為新值,而不須手動下RefreshRecord或其他手動Merge Server 回傳資料方式speedup兄,請問一下,我使用Delphi5 SocketConnection BDE MSSQL,經測試將DataSetProvider的Options中的poPropogateChanges設定True,結果Client下達ApplyUpdate後,並無自動更新編號,不知您是否有使用成功過,如有使用的環境為何?謝謝! > <>補充:這篇也有同樣問題> <><><>< src="http://www.coss.com.tw/jieshu/img/jsDesign.jpg"> | 人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/ |
引言: speedup兄,請問一下,我使用Delphi5 SocketConnection BDE MSSQL,經測試將DataSetProvider的Options中的poPropogateChanges設定True,結果Client下達ApplyUpdate後,並無自動更新編號,不知您是否有使用成功過,如有使用的環境為何?謝謝! > <>補充:這篇也有同樣問題> <><><>< src="http://www.coss.com.tw/jieshu/img/jsDesign.jpg">
DeltaDS.FieldByName('xxx').NewValue := ?????這樣就Client會自動Merge新值(當然記的要設poPropogateChanges) 混心雜欲 棄修身~唉
引言: 5,6,7 都可以 差只差在我都用ADO (我想用ADO or BDE 並不會照成此差異) 重點有兩個 1.寫在BeforeUpdateRecord/AfterUpdateRecord 2.改的是NewValue 而不是直接改值我查出原因了,應該是我將Delta傳到Server去,用DataSetProvider存,而不是用ApplyUpdate的方式,所以他不會更新,不曉得我這種存法,有沒有會自動更新的方法。 謝謝您speedup兄!DeltaDS.FieldByName('xxx').NewValue := ?????這樣就Client會自動Merge新值(當然記的要設poPropogateChanges) 混心雜欲 棄修身~唉
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/ |
引言: 我查出原因了,應該是我將Delta傳到Server去,用DataSetProvider存,而不是用ApplyUpdate的方式,所以他不會更新,不曉得我這種存法,有沒有會自動更新的方法。 謝謝您speedup兄!如果你自己開Interface 方法自行處理Delta資料,同樣的你只需要將Provider回傳的Merge資料,透過ClientDataSet的Reconcile指令合併結果會一樣,Client會自動更新,不過Reconcile正常後,記的多下一道MergeChangeLog 可避開一些問題 混心雜欲 棄修身~唉 發表人 - jieshu 於 2004/03/10 15:29:32
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
引言: 如果你自己開Interface 方法自行處理Delta資料,同樣的你只需要將Provider回傳的Merge資料,透過ClientDataSet的Reconcile指令合併結果會一樣,Client會自動更新,不過Reconcile正常後,記的多下一道MergeChangeLog 可避開一些問題 混心雜欲 棄修身~唉speedup兄謝謝您!我試出來了,我用最簡單的(沒設RemoteServer)測試碼如下: ClientDataSet1.Reconcile(DataSetProvider1.ApplyUpdates(ClientDataSet1.Delta, 0, li_E)); 我原本用ClientDataSet1.Data := DataSetProvider1.Data;,但這樣傳的資料比較多,如果Update的資料多的話,可能會影響效能!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/ |
引言: if UpdateKind = ukInsert then begin DeltaDS.FieldByName('xxx').NewValue := 你的編碼規則函數 end; 這個編碼規則函數要怎麼寫我有寫過單機的編碼函數可以正常使用可是用到這裡就有問題 第一是我有使用檢查這個資料表(IF ADOQUERY1.ISEMPTY THEN ....程式碼) 是否有資料如沒有則以A001開始計算如有則會一直加1計算 可是我在這裡用這程式碼不管裡面有無資料都程式都會認定無資料 那我應要怎麼做~~謝謝一般應該都是直接下SQL到資料庫裡面找最大的, 怎麼會在DataSet去判斷呢? 那不是要取出全部資料, 資料少還好, 資料多那就有的等了. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |