線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2939
推到 Plurk!
推到 Facebook!

多層架構的自動編號

尚未結案
sundy6719
初階會員


發表:136
回覆:78
積分:42
註冊:2002-07-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-03-09 15:27:31 IP:211.74.xxx.xxx 未訂閱
請教一個問題在多層架構應用系統中在用戶端要做自動編號的程式要怎麼做才比較好因為還要考慮到多人同時增加資料的問題 我在單機上使用自己編號的程式沒問題可是要用於多層架構真的想不透要怎麼用才是最好的謝謝~~~
cosuki
一般會員


發表:10
回覆:40
積分:10
註冊:2003-06-05

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-03-09 18:24:37 IP:61.219.xxx.xxx 未訂閱
我的做法是在資料庫寫trigger 在befer insert時做判斷流沒欄位沒有值時給他流水號存入,
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-03-09 18:26:42 IP:211.75.xxx.xxx 未訂閱
可由資料庫去做,類似像oracle的sequence http://www.fanqiang.com/a2/b2/20010514/10150052.html < >..萬一你的程式跟資料庫無關..就當我沒講過< > 永遠追不上技術更新的速度
------
星期一,二...無窮迴圈@@
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-03-10 09:26:57 IP:61.224.xxx.xxx 未訂閱
引言: 請教一個問題在多層架構應用系統中在用戶端要做自動編號的程式要怎麼做才比較好因為還要考慮到多人同時增加資料的問題 我在單機上使用自己編號的程式沒問題可是要用於多層架構真的想不透要怎麼用才是最好的謝謝~~~
編號(若為主鍵)一定要在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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-03-10 10:36:14 IP:203.204.xxx.xxx 未訂閱
引言: 另外一個重點是你必須將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/
發表人 - jieshu 於 2004/03/10 10:44:30
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-03-10 12:19:38 IP:61.224.xxx.xxx 未訂閱
引言: speedup兄,請問一下,我使用Delphi5 SocketConnection BDE MSSQL,經測試將DataSetProvider的Options中的poPropogateChanges設定True,結果Client下達ApplyUpdate後,並無自動更新編號,不知您是否有使用成功過,如有使用的環境為何?謝謝! <>補充:這篇也有同樣問題> <><><>< src="http://www.coss.com.tw/jieshu/img/jsDesign.jpg">人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。[/green] 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/ 發表人 - jieshu 於 2004/03/10 10:44:30
5,6,7 都可以 差只差在我都用ADO (我想用ADO or BDE 並不會照成此差異) 重點有兩個 1.寫在BeforeUpdateRecord/AfterUpdateRecord 2.改的是NewValue 而不是直接改值
 
    DeltaDS.FieldByName('xxx').NewValue :=  ?????
這樣就Client會自動Merge新值(當然記的要設poPropogateChanges) 混心雜欲 棄修身~唉
------
唉~
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-03-10 14:20:06 IP:203.204.xxx.xxx 未訂閱
引言: 5,6,7 都可以 差只差在我都用ADO (我想用ADO or BDE 並不會照成此差異) 重點有兩個 1.寫在BeforeUpdateRecord/AfterUpdateRecord 2.改的是NewValue 而不是直接改值
 
    DeltaDS.FieldByName('xxx').NewValue :=  ?????
這樣就Client會自動Merge新值(當然記的要設poPropogateChanges) 混心雜欲 棄修身~唉
我查出原因了,應該是我將Delta傳到Server去,用DataSetProvider存,而不是用ApplyUpdate的方式,所以他不會更新,不曉得我這種存法,有沒有會自動更新的方法。 謝謝您speedup兄!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-03-10 14:35:15 IP:210.243.xxx.xxx 未訂閱
引言: 我查出原因了,應該是我將Delta傳到Server去,用DataSetProvider存,而不是用ApplyUpdate的方式,所以他不會更新,不曉得我這種存法,有沒有會自動更新的方法。 謝謝您speedup兄!
人生有夢,逐夢而行。 人若為善,福雖未至,禍已遠離。 人若為惡,禍雖未至,福已遠離。 http://www.coss.com.tw/jieshu/
如果你自己開Interface 方法自行處理Delta資料,同樣的你只需要將Provider回傳的Merge資料,透過ClientDataSet的Reconcile指令合併結果會一樣,Client會自動更新,不過Reconcile正常後,記的多下一道MergeChangeLog 可避開一些問題 混心雜欲 棄修身~唉 發表人 - jieshu 於 2004/03/10 15:29:32
------
唉~
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-03-10 15:40:56 IP:203.204.xxx.xxx 未訂閱
引言: 如果你自己開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/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
sundy6719
初階會員


發表:136
回覆:78
積分:42
註冊:2002-07-10

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-05 14:32:04 IP:211.74.xxx.xxx 未訂閱
if UpdateKind = ukInsert then begin DeltaDS.FieldByName('xxx').NewValue := 你的編碼規則函數 end; 這個編碼規則函數要怎麼寫我有寫過單機的編碼函數可以正常使用可是用到這裡就有問題 第一是我有使用檢查這個資料表(IF ADOQUERY1.ISEMPTY THEN ....程式碼) 是否有資料如沒有則以A001開始計算如有則會一直加1計算 可是我在這裡用這程式碼不管裡面有無資料都程式都會認定無資料 那我應要怎麼做~~謝謝
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-08 09:34:28 IP:203.204.xxx.xxx 未訂閱
引言: 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/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#12 引用回覆 回覆 發表時間:2007-04-30 13:44:43 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-19 21:19:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!