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

DBase 發生 Files is Lock?

答題得分者是:P.D.
y2485967
一般會員


發表:9
回覆:0
積分:1
註冊:2002-10-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-02 13:28:08 IP:211.23.xxx.xxx 未訂閱
我用 DBASE 作網路資料庫 如何做到 Lock 問題? example: 狀態:A,B兩台電腦使用者共同使用一個 Test.DBF. Q1.當 A Append Test.DBF 時 B 只能看不能編輯此 Test.DBF? Q2.B 如何確知 A 對 Test.DBF 已編輯完成? P.D 兄所指導 function RecordLock(aDataSet: TDataSet): boolean; var RecordProps: RECProps; wresult: DBIresult; begin with (aDataSet as TTable) do begin if State = dsInactive then begin Application.MessageBox(pChar(''無法鎖定被關閉的資料 庫''), ''網路錯 誤'',MB_ICONERROR MB_OK); exit; end; UpdateCursorPos; wresult:= DbiGetRecord(Handle, dbiWriteLock, nil, @RecordProps); if wresult = DBIERR_NONE then begin DbiRelRecordLock(Handle, False); result:= False; end else begin IDkey:=Application.MessageBox(''記錄被鎖定'','' 錯誤'' MB_ICONERROR MB_OK); end; end; 好像只能對自已電腦,且還是沒 下 post 指令有效.
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-02 16:57:44 IP:61.66.xxx.xxx 未訂閱
[quote] 我用 DBASE 作網路資料庫 如何做到 Lock 問題? example: 狀態:A,B兩台電腦使用者共同使用一個 Test.DBF. Q1.當 A Append Test.DBF 時 B 只能看不能編輯此 Test.DBF? 不太清楚你的意思, 不過 TTable 有一個特性, 在 A, B台先執行 Table.open時即以將資料全部載入, 然後當A台再新增(APPEND)一筆記錄而未POST前, SERVER上並不會有這筆記錄直到A台下POST,POST後, B台在用搜尋方式可以找到新增的記錄, 但如果A台是做EDIT記錄也下了POST後, B台的畫面如果剛好也在同一筆記錄時, B台的記錄並不會自動更新, 必須由使用者重新移動記錄指標, 系統才會把A台更新過的資料重新載回B台, 而Append 時系統並不會鎖定資料庫(除非做整個table鎖定) Q2.B 如何確知 A 對 Test.DBF 已編輯完成? 檢查 TTable.Modified 指標, 如果為 true, 表示TTable被編輯過, post或cancle後 指標會為 false 好像只能對自已電腦,且還是沒 下 post 指令有效. 這個功能並不只可以對自己電腦, 網路上亦可適用, 不過有幾個限制 1.必須使用 TTable 型態 2.必須使用 BDE 連結 (因為鎖定函式是 dbi 提供出來的) 3.如果要使用在不同的電腦, 務必將 bde 調整為網路上可適用的模式 至於 post之後, 鎖定功能自然解除, 或者資料庫有close再open也會自然解除, 因為 dbi 提供的鎖定方式是以 memory 方式作業, 如果你希望不論在任何時候都可以自由鎖定, 那唯一的方法就是以一個實質的欄位來註記!
系統時間:2024-05-17 7:21:47
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!