請問 Lock file has grown too large 該如何處理? |
尚未結案
|
hipo
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2003-04-08 發送簡訊給我 |
|
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
hipo
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2003-04-08 發送簡訊給我 |
謝謝Justmade的指教
我觀察程式執行真的會產生PARADOX.LCK,PDOXUSRS.LCK 及 _Q*.*
我的程式是用sql語法挑選資料,當挑選資料範圍是4月1日到4月5日時,或4月6日到4月10日,程式可正常結束, .LCK 也會自動消失,是正常執行 可是當我挑選資料範圍是4月1日到4月10日時,到4月8日即會出現訊息 "Lock file has grown too large" 程式就停住了,此時.LCK 在使用中也無法刪除,除非我把程式強制關掉, .LCK 即會消失 不知道還有什麼方法可以解決這個問題,因為我需要的是挑選4月1日到4月30日的資料, 謝謝!!
|
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
|
hipo
一般會員 ![]() ![]() 發表:5 回覆:4 積分:1 註冊:2003-04-08 發送簡訊給我 |
謝謝你!
我的出勤檔有7000筆資料(每月挑完後)
請假檔有 400筆資料(每月挑完後) 程式Post如下,寬度好像不夠,會彎到第二行,請見諒 //開始日期
datep := datetimepicker1.Date;
//結束日期
daten := datetimepicker2.Date;
ymd := datep;
while ymd <= daten do
begin
label1.Caption := datetostr(ymd);
label1.Refresh;
application.ProcessMessages;
whrs := 0; wa1t := 0; wa1lt := 0; wa1et := 0; wa3t := 0; wa3et := 0; wa3lt := 0;
with at02.dQuery1 do //p.165-52
begin
close; sql.clear; //read 出勤檔 ,當日所有出勤者資料
sql.add('select * from ":at000706:daycal.db" where yearmonthday =''' datetostr(ymd) '''');
open; First; if at02.dQuery1.RecordCount <> 0 then
begin
while not eof do //p.170-58
//依出勤檔日期 read請假檔資料,扣抵遲到.早退.曠職
begin
case screen.Cursor of // 游標旋轉
crSizeNESW: screen.Cursor := crSizeWE;
crSizeWE: screen.Cursor := crSizeNWSE;
crSizeNWSE: screen.Cursor := crSizeNS;
crSizeNS: screen.Cursor := crSizeNESW;
end;
fempno := at02.dquery1.fieldbyname('empno').value; //showmessage(fempno);
sumaxt := at02.dquery1.fieldbyname('a1t').value at02.dquery1.fieldbyname('a2t').value at02.dquery1.fieldbyname('a3et').value at02.dquery1.fieldbyname('a3lt').value;
//update 出勤檔
with at02.dquery3 do //p.193-73
begin
close; sql.clear; requestlive := true;
sql.add('UPDATE ":at000706:daycal.db"');
sql.Add('set norectime =''' inttostr(sumaxt) '''');
sql.add('where yearmonthday =''' datetostr(ymd) '''and empno = ''' fempno '''');
ExecSQL;
end; //with at02.dquery3 do//p.193-73
//read 請假檔
with at02.dquery2 do //p.184-66
begin
close; sql.clear;
sql.add('select * from ":sa000215:attendrecord.db" r,":sa000215:attendance.db" c');
sql.add(' where r.datef =''' datetostr(ymd) '''and r.empno =''' fempno ''' and r.attendanceno = c.attendanceno');
open;
end; //t_attendrecord1 p.184-66 if at02.dquery2.RecordCount = 0 then
begin
checkhrs := sumaxt; //未打卡時間
ak := ''; // 請假類別
ah := 0; // 請假分鐘
lts := at02.dquery1.fieldbyname('latetimes').value; // 遲到次數
eys := at02.dquery1.fieldbyname('earlytimes').value; // 早退次數
end
else begin
ak := '';
ah := 0;
lts := at02.dquery1.fieldbyname('latetimes').value; // 遲到次數
eys := at02.dquery1.fieldbyname('earlytimes').value; // 早退次數
wa1et := at02.dquery1.FieldByName('a1et').value;
wa1lt := at02.dquery1.FieldByName('a1lt').value;
wa3et := at02.dquery1.FieldByName('a3et').value;
wa3lt := at02.dquery1.FieldByName('a3lt').value;
at02.dquery2.first;
while not at02.dquery2.eof do
begin
whrs := at02.dquery2.fieldbyname('hrs').value * 60;
//扣除遲到
if (wa1lt > 0) and (whrs > 0) then
begin
wa1lt := whrs - wa1lt;
if wa1lt >= 0 then
begin
whrs := wa1lt;
wa1lt := 0;
lts := '0';
end
else
begin
wa1lt := -wa1lt;
lts := '1';
whrs := 0;
end;
end;
//扣除遲到
//扣除早退
if (wa1et > 0) and (whrs > 0) then
begin
wa1et := whrs - wa1et;
if wa1et >= 0 then
begin
whrs := wa1et;
wa1et := 0;
eys := '0';
end
else
begin
wa1et := -wa1et;
eys := '1';
whrs := 0;
end;
end;
//扣除早退
//扣除遲曠
if (wa3lt > 0) and (whrs > 0) then
begin
wa3lt := whrs - wa3lt;
if wa3lt >= 0 then
begin
whrs := wa3lt;
wa3lt := 0;
end
else
begin
wa3lt := -wa3lt;
whrs := 0;
end;
end;
//扣除遲曠
//扣除早曠
if (wa3et > 0) and (whrs > 0) then
begin
wa3et := whrs - wa3et;
if wa3et >= 0 then
begin
whrs := wa3et;
wa3et := 0;
end
else
begin
wa3et := -wa3et;
whrs := 0;
end;
end;
//扣除早曠
if at02.dquery2.recordcount = 1 then
ak := at02.dquery2.fieldbyname('attendancename').value
else
ak := ak copy(at02.dquery2.fieldbyname('attendancename').value, 1, 2) ',';
ah := ah at02.dquery2.fieldbyname('hrs').value * 60;
at02.dquery2.next;
end;
wa1t := wa1lt wa1et;
checkhrs := wa1t wa3et wa3lt; if checkhrs >= 0 then
begin
with at02.dquery3 do
begin
//update 出勤檔
close; sql.clear; requestlive := true;
sql.add('UPDATE ":at000706:daycal.db"');
sql.Add('set norectime =''' inttostr(checkhrs) '''');
sql.Add(', attenkind =''' ak '''');
sql.Add(', attenhour =''' inttostr(ah) '''');
sql.Add(', latetimes =''' lts '''');
sql.Add(', earlytimes =''' eys '''');
sql.add(', a1t=''' inttostr(wa1t) '''');
sql.add(', a1lt=''' inttostr(wa1lt) '''');
sql.add(', a1et=''' inttostr(wa1et) '''');
sql.add(', a3lt=''' inttostr(wa3lt) '''');
sql.add(', a3et=''' inttostr(wa3et) '''');
sql.add('where yearmonthday =''' datetostr(ymd) '''and empno = ''' fempno '''');
ExecSQL;
end;
end
else begin
//update 出勤檔
with at02.dquery3 do
begin
close; sql.clear; requestlive := true;
sql.add('UPDATE ":at000706:daycal.db"');
sql.Add('set norectime = 0');
sql.Add(', attenkind =''' ak '''');
sql.Add(', attenhour =''' inttostr(ah) '''');
sql.Add(', latetimes =''' lts '''');
sql.Add(', earlytimes =''' eys '''');
sql.add(', a1t=''' inttostr(wa1t) '''');
sql.add(', a1lt=''' inttostr(wa1lt) '''');
sql.add(', a1et=''' inttostr(wa1et) '''');
sql.add(', a3lt=''' inttostr(wa3lt) '''');
sql.add(', a3et=''' inttostr(wa3et) '''');
sql.add('where yearmonthday =''' datetostr(ymd) '''and empno = ''' fempno '''');
ExecSQL;
end;
end;
end;
next;
end; //依出勤檔日期 read請假檔資料,扣抵遲到.早退.曠職
end; // if at02.dQuery1.RecordCount <> 0
end; // 該天所有的卡鐘記錄p.165-52
ymd := ymd 1; //下一天
end; //while ymd < daten do
screen.Cursor := crDefault;
showmessage('請假結算完成');
|
Justmade
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:94 回覆:1934 積分:2030 註冊:2003-03-12 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |