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

如何插入一筆資料, 且下次進來後可照畫面資料排序

答題得分者是:jeffreck
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-05 09:05:53 IP:218.160.xxx.xxx 未訂閱
各位先進大家好: 如何在DataSet中插入一筆資料並且下次進來看到的資料還是照此次的資料紀錄排序.目前的做法是開一個新的欄位, 存檔時從第一筆存到最後一筆, 那個欄位一直累加一存入, 下次進來就照累加的欄位排序, 但是當我資料量大時, 這個方法行不通, 因為實在太久了, 是否有其他方法. 小弟使用的是InterBase 感謝各位不吝賜教. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-05 09:44:30 IP:211.76.xxx.xxx 未訂閱
有一個不是很好的方法. 不過可以試試, 尤其當資料量大的時候. 將你新開的欄位其格式改為 numeric(9,9) (或是其他類似浮點數的欄位皆可), 原有的資料填入整數即可. 然後在 user 輸入資料時, 看插入的位置, 其前後 筆的數值來填入插入資料的對應值. 例如: 張三 1 李四 2 王五 3 在張三和李四間插入了, 趙高和李斯兩人的話, 就將 1 和 2 分三份, 分別將 趙高設入值為 1.33333333, 李斯為 1.666666666 如下即可!! 張三 1 趙高 1.3333333 李斯 1.6666666 李四 2 王五 3 之後再插入的資料也是如法炮製, 要是該欄位的離散度不足, 再整個重給一次 整數的排序值即可 (但應該是不會有離散度的問題, 只有精確度的問題, 當精確 度不足時, 再整個重跑一次即可) 如此一來速度應該會快得多!!
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-05 10:01:26 IP:218.160.xxx.xxx 未訂閱
引言: 有一個不是很好的方法. 不過可以試試, 尤其當資料量大的時候. 將你新開的欄位其格式改為 numeric(9,9) (或是其他類似浮點數的欄位皆可), 原有的資料填入整數即可. 然後在 user 輸入資料時, 看插入的位置, 其前後 筆的數值來填入插入資料的對應值. 例如: 張三 1 李四 2 王五 3 在張三和李四間插入了, 趙高和李斯兩人的話, 就將 1 和 2 分三份, 分別將 趙高設入值為 1.33333333, 李斯為 1.666666666 如下即可!! 張三 1 趙高 1.3333333 李斯 1.6666666 李四 2 王五 3 之後再插入的資料也是如法炮製, 要是該欄位的離散度不足, 再整個重給一次 整數的排序值即可 (但應該是不會有離散度的問題, 只有精確度的問題, 當精確 度不足時, 再整個重跑一次即可) 如此一來速度應該會快得多!!
Dear : 這方式我有想過, 不過目前可能不會使用, 因為變數太多了. 感謝timhuang大大的回答. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-05 10:15:03 IP:211.74.xxx.xxx 未訂閱
你應該把你那個新的欄位(SEQ_NO)也寫進Table當成key值,應該就可以Order by了吧..POST時候用SQL語法整批寫回..因為SEQ_NO有可能隨著插入一筆而改變了 TRY TRY SEE..
引言: 各位先進大家好: 如何在DataSet中插入一筆資料並且下次進來看到的資料還是照此次的資料紀錄排序.目前的做法是開一個新的欄位, 存檔時從第一筆存到最後一筆, 那個欄位一直累加一存入, 下次進來就照累加的欄位排序, 但是當我資料量大時, 這個方法行不通, 因為實在太久了, 是否有其他方法. 小弟使用的是InterBase 感謝各位不吝賜教. 我不是高手, 高手是正在銀幕前微笑的人.
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-05 10:19:17 IP:61.220.xxx.xxx 未訂閱
你可以在存檔前找一個事件下sql 找出max(序號欄位) 然後新增時 再把它 1 應該很快 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-05 11:17:46 IP:218.160.xxx.xxx 未訂閱
引言: 你應該把你那個新的欄位(SEQ_NO)也寫進Table當成key值,應該就可以Order by了吧..POST時候用SQL語法整批寫回..因為SEQ_NO有可能隨著插入一筆而改變了 TRY TRY SEE..
chih先進你好: 請問我要如何新增一個Seq_NO的欄位, 我的意思是會隨著資料變動跟著變動的欄位, 小弟已經有在Table中多一個紀錄順序的欄位, 只是要回存時變成需要一個迴圈去填那個欄位 感謝不吝賜教 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-05 11:20:28 IP:218.160.xxx.xxx 未訂閱
引言: 你可以在存檔前找一個事件下sql 找出max(序號欄位) 然後新增時 再把它 1 應該很快 天行健 君子當自強不息~~@.@
TJB先進您好: 因為現在會有插入的功能, 所以並不是單純找出最大值, 插入後的紀錄都要跟著變動加一, 造成要回寫資料庫很慢, 因為我需要用個迴圈全部重填. 感謝相助 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-05 11:49:17 IP:211.74.xxx.xxx 未訂閱
原資料 ID SEQ_NO A1 紀錄順序欄位 ------------------------------- 1 10 A 1 1 20 B 2 1 30 C 3 在 B跟C間插入一筆後變成 ID SEQ_NO A1 紀錄順序欄位 ------------------------------------------- 1 10 A 1 1 20 B 2 1 30 D 3 1 40 C 4 那這樣應該可以用你自己紀錄順序欄位去更新SEQ_NO了吧?? 因為沒有你的Table格式,我隨寫幾個..不知道這樣清不清楚?? TRY TRY SEE..
引言: chih先進你好: 請問我要如何新增一個Seq_NO的欄位, 我的意思是會隨著資料變動跟著變動的欄位, 小弟已經有在Table中多一個紀錄順序的欄位, 只是要回存時變成需要一個迴圈去填那個欄位 感謝不吝賜教 我不是高手, 高手是正在銀幕前微笑的人. < face="Verdana, Arial, Helvetica">
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-05 11:57:09 IP:61.221.xxx.xxx 未訂閱
Miles你好: 如果在加一個STRINGGRID會比較好吧!! 資料的顯示不是用BDgrid,在變更(插入)資料時先新增到STRINGGRID,在新增到 資料庫!!! 不會太麻煩吧!!!
------
======================
昏睡~
不昏睡~
不由昏睡~
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-05 12:45:23 IP:61.218.xxx.xxx 未訂閱
使用 QUERY 的 UPDATE試試 1 AA 2 BB 3 CC 4 DD 於 BB及CC中新增一筆 使用 QUERY 的 UPDATE ,試試速度是否較快 如下: UPDATE Table1 SET Table1.順序 = [順序] 1 WHERE (((Table1.順序)>2));
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-05 16:35:51 IP:218.160.xxx.xxx 未訂閱
引言: 使用 QUERY 的 UPDATE試試 1 AA 2 BB 3 CC 4 DD 於 BB及CC中新增一筆 使用 QUERY 的 UPDATE ,試試速度是否較快 如下: UPDATE Table1 SET Table1.順序 = [順序] 1 WHERE (((Table1.順序)>2));
感謝jeffreck兄提供的方法, 目前只好先這樣做, 也許可以利用Store Procedure 或Trigger的方式, 但小弟對InterBase的東西還不太熟, 若各位先進有 更好的想法請再幫幫忙, 也感謝timhuang, chih, T.J.B,ko兄的幫忙. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
懷舊的人
高階會員


發表:28
回覆:152
積分:141
註冊:2003-01-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-05 19:48:43 IP:152.104.xxx.xxx 未訂閱
如果你一定要這樣的排序,那麼你應該參考 資料結構和演算法 的書,因為這一類的書專門討論這些, 比如說 LinkList 就滿適合這樣的需求,慢慢想,尋找多一點的資訊,幫助多一點,煩惱少一點。
系統時間:2024-05-10 16:25:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!