DBase 發生 Files is Lock? |
答題得分者是:P.D.
|
y2485967
一般會員 發表:9 回覆:0 積分:1 註冊:2002-10-21 發送簡訊給我 |
我用 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 發送簡訊給我 |
[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 方式作業, 如果你希望不論在任何時候都可以自由鎖定, 那唯一的方法就是以一個實質的欄位來註記!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |