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

[Delphi][問題]請問Access的自動編號取得問題

尚未結案
silveryfox
一般會員


發表:6
回覆:7
積分:2
註冊:2004-10-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-03 19:08:54 IP:211.23.xxx.xxx 未訂閱
各位高手好﹐ 小弟遇到一個問題﹐目前用Access來做資料庫 而有一個欄位是自動編號產生的編號欄位 可是該欄位一定要在資料插入後才會生成? 想請問﹐有沒有方法可以在未插入資料之前得知下一個自動編號的數字是多少? 多謝指教
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-03 21:41:53 IP:218.32.xxx.xxx 未訂閱
不好意思, 您對"自動編號"的欄位特性, 可能不是很清楚, 如果你有這樣的需求, 似乎該考慮, 不要用這種欄位型態.
lcjan
初階會員


發表:11
回覆:60
積分:29
註冊:2002-03-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-03 22:17:56 IP:218.170.xxx.xxx 未訂閱
引言: 各位高手好﹐ 小弟遇到一個問題﹐目前用Access來做資料庫 而有一個欄位是自動編號產生的編號欄位 可是該欄位一定要在資料插入後才會生成? 想請問﹐有沒有方法可以在未插入資料之前得知下一個自動編號的數字是多少? 多謝指教
Insert前先Select 出最大號碼再加1 Insert. 不知可行否..
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-05-03 22:18:59 IP:219.86.xxx.xxx 未訂閱
如 Mickey 兄所言,是較妥當的作法。 若仍要得知 下一編號 我覺得簡單來說 Select Max(ID) from TableName 加一 不就是了。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
silveryfox
一般會員


發表:6
回覆:7
積分:2
註冊:2004-10-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-05-04 01:04:07 IP:220.228.xxx.xxx 未訂閱
引言: 如 Mickey 兄所言,是較妥當的作法。 若仍要得知 下一編號 我覺得簡單來說 Select Max(ID) from TableName 加一 不就是了。 ~~~~~~~~~~~ 難得聰明,常常糊塗。 ~~~~~~~~~~~
回Mickey兄 我的確是個新手﹐而且也不熟Access的操作 不過我還是有爬文﹐知道一點點"自動欄位"是不可被編輯的特性 嚴格來說我提出的不是"需求"而只是問題 因為在參考過板上的文章後個人覺得是很難辦到的 所以才厚著臉皮發文求問... 至於lcjan兄與wameng兄所提的我有想過 但是自動欄位的增加似乎不是依據現有的最大值加一 所以一旦最大值被砍掉就會有落差﹐小弟應該沒講錯 不論如何﹐很謝謝各位的指教
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-05-04 10:04:11 IP:60.248.xxx.xxx 未訂閱
嗯,自動編號是會一直累計的,所以除非你沒刪除過紀錄 不然,是不一定是最大值 1 的 不過,如果資料庫重整之後是會符合這個公式的 但我想,也不太可能為了知道編號就重整吧 :p 另外,就是根據經驗,自動編號是在寫入紀錄的時候產生的 所以,看來是沒有辦法在寫入之前就知道編號 除非,要嘛,自動編號的欄位你自己弄 要嘛,就是你的資料庫只有你一個 AP 在用 也不會有別的 AP 對他做刪除動作 這樣就可以強迫讓編號 = 最大值 1 不然就是,有個最簡單的方法,把本來希望取得編號的動作 看看有沒有方法移到 AfterPost 事件來做 如果要這麼用的原因是因為紀錄中的欄位會根據自動編號來改變內容的話,就 法1: 加個旗標上去,讓程式判斷 AfterPost 的事件是使用者新增紀錄時觸發的呢? 還是你在做自動編號的處理時,自行修改欄位時觸發的 法2: 在 record 裡加一個 field 來紀錄有沒有根據自動欄位做某運算 爾後才批次去進行處理 目前,我想到的方法大概是這樣 不過,最後我覺得太麻煩了 就把程式邏輯修改成不需要在寫入時先預知編號... 畢竟程式是我自己寫的,我沒必要找自己麻煩
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-05-04 12:20:31 IP:210.243.xxx.xxx 未訂閱
就我所知.... 1.其實很多資料庫是有Sequences的,所以可以設定其default 一次增加多少,用來做流水號 2.就算沒有,也可以自己開一個table記錄所有使用到的流水號 再新增前就要一個號碼,當然每次都要加一這樣就會有流水號的 效果了 3.還有個位大大所說的用程式或sql語法來控制max() 1也是一 個方法,不過那就會有最大值被殺掉的可能了
silveryfox
一般會員


發表:6
回覆:7
積分:2
註冊:2004-10-22

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-05-04 20:26:52 IP:211.23.xxx.xxx 未訂閱
引言: 就我所知.... 1.其實很多資料庫是有Sequences的,所以可以設定其default 一次增加多少,用來做流水號 2.就算沒有,也可以自己開一個table記錄所有使用到的流水號 再新增前就要一個號碼,當然每次都要加一這樣就會有流水號的 效果了 3.還有個位大大所說的用程式或sql語法來控制max() 1也是一 個方法,不過那就會有最大值被殺掉的可能了
嗯 看來大家的想法都差不多 小弟就此結案﹐多謝大家的指教
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-05-04 21:02:37 IP:218.32.xxx.xxx 未訂閱
大家辛苦了...哈哈
系統時間:2024-06-24 2:37:34
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!