全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1714
推到 Plurk!
推到 Facebook!

關於 ttable post後, 想拿回資料的問題

尚未結案
MatthewSong
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-04-14 11:47:11 IP:202.175.xxx.xxx 訂閱
現在我的的case是
1. 有一個 TABLE - A ,其中一個field - indexNO 是auto number來的
2. 進行insert後, 我想write log
3. write log想把 從前的 TTABLE insert入去的 indexNO 拿出來放入我的log中


現在就是出現一個問題
當我post後, 本身Ttable 沒有更新,拿不到 auto的number
我行 ttable.refresh 也不行

想問下,在這種情況下, 我應該怎樣去做呢?


with tbSelect do
begin
open;
insert;
FieldByName('Name').AsString := 'John';
Post;

WriteLog(FieldByName('indexNO').AsInteger ) <----------- 這里不能更新拿到auto number
end;
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-04-14 15:59:45 IP:59.120.xxx.xxx 訂閱
SELECT MAX(indeNo) FROM Table
用SQL-Query重新取值!!
MatthewSong
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-14 16:38:02 IP:202.175.xxx.xxx 訂閱

但這個table不只是我一人用,可能會有其他人用,這會造成不準確~
max5020
資深會員


發表:30
回覆:277
積分:321
註冊:2003-06-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-14 17:47:07 IP:59.120.xxx.xxx 訂閱
沒有錯, 
這麼做的話,
是有機會取到錯誤的資料!!
不然就要先LOCK-Table
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-14 23:37:43 IP:61.67.xxx.xxx 未訂閱
1.你的table 後頭是那一種資料庫
2.這是一個老問題了, 如何取得唯一序號, 在多人使用上, 目前我還沒有看到十全十美, 保證沒有問題的取法
3.任何auto increase 的欄位, 後端一定都有一個database engine 在控管, 所以基本上使用 select max(...)是可以取得的
dbf檔 --> 不支援
db檔 --> bde 支援
mdf檔 --> M$ SQL
gdb檔 --> Interbase/FireBird
我猜你是 paradox 的資料庫, 你要取得序號, open 後一定要 close, 再open , 資料才會 reflash, 也才能取得
如果一直維持在 open, buffer 是不會更新的
===================引 用 MatthewSong 文 章===================
現在我的的case是
1. 有一個 TABLE - A ,其中一個field - indexNO 是auto number來的
2. 進行insert後, 我想write log
3. write log想把 從前的 TTABLE insert入去的 indexNO 拿出來放入我的log中


現在就是出現一個問題
當我post後, 本身Ttable 沒有更新,拿不到 auto的number
我行 ttable.refresh 也不行

想問下,在這種情況下, 我應該怎樣去做呢?


with tbSelect do
begin
open;
insert;
FieldByName('Name').AsString := 'John';
Post;

WriteLog(FieldByName('indexNO').AsInteger ) <----------- 這里不能更新拿到auto number
end;
earthday
一般會員


發表:3
回覆:11
積分:2
註冊:2004-10-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-15 21:13:41 IP:118.160.xxx.xxx 訂閱
通常在一個多人使用的資料庫中,
我會設計為需登入使用,即須輸入使用者帳號及密碼
因此,我在每個table增加兩個欄位,使用者帳號(user)及日期時間(datetime)
這樣一來,我就可以知道何時被何人改過該筆資料
因此,當您使用auto number時
您可以 refresh table 後
用Select Max(indeNo) From Table Where user = "你的帳號"
這樣你就可以取回剛剛存入的值了

希望有解決您的問題
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-04-16 00:03:21 IP:61.67.xxx.xxx 未訂閱
其實這個題目的確可以好好討論一番, 大家都把重點放在正常的運作, 當然任何正常操作下, 利用其他的資料庫來記錄各種狀況, 當正常結束時都是在我們控制範圍內, 可以做標準程序, 但電腦不可能沒有當機, 各位是否想過, 一旦在當機情況下, 被加入的記錄如何在重新啟動後去判斷是正常或異常寫入的狀況, 這才是程式設計上真正要考量的, 因為當機的狀況
1.程式當掉
2.斷電, 被人關機, 硬碟故障, 按了 CTRL-ALT-DEL, 中毒被重開...
3.電腦爆炸了(我指的是LOCAL炸毀了, 但主機還在, 一般這類資料庫都會在主機)
4.透過遠端連入的PC, 遠端更是難掌握其異常
5.還有很多, 不勝枚舉
===================引 用 earthday 文 章===================
通常在一個多人使用的資料庫中,
我會設計為需登入使用,即須輸入使用者帳號及密碼
因此,我在每個table增加兩個欄位,使用者帳號(user)及日期時間(datetime)
這樣一來,我就可以知道何時被何人改過該筆資料
因此,當您使用auto number時
您可以 refresh table 後
用Select Max(indeNo) From Table Where user = "你的帳號"
這樣你就可以取回剛剛存入的值了

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