在大量更新Access資料時出現索引鍵資料行資料不足或不正確... |
尚未結案
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
抱歉,我再說清楚一點及將我的程式碼貼上來,請您們幫我看一下,是否我的寫法不好,須要換另一種寫法,請不吝指教,謝謝! 我目前的這個程式是用Access做資料庫,須要定期去查詢及更新資料,而要去查詢的資料原來是 DBF 檔,大約有五,六百萬筆資料,我將它轉成ACCESS檔案,例如檔名為EPA91.MDB,我再利用迴圈查詢EPA91.MDB檔,查沒有多久就出現了[索引鍵資料行資訊不足或不正確;太多資料列被更新]的錯誤訊息,程式碼如下: if (FileExists(Path 'Epa' IntToStr(ThisYear-1) '.MDB')) then
begin
if Q4.Active then
Q4.Close; CuPath2:='Provider=Microsoft.Jet.OLEDB.4.0;Password="";Data Source=' Form1.Path 'Epa' IntToStr((wYear-1911)-1) '.MDB ;Persist Security Info=True';
Q4.ConnectionString:=CuPath2; Q1.Close;
Q1.SQL.Clear;
Q1.SQL.Add('SELECT 車號, 稽查日期, 回檢日期 FROM 攔巡查資料 WHERE 回檢日期 IS NULL ');
Q1.Open;
I:=0;J:=0;
Q1Rec:=Q1.RecordCount;
WHILE NOT Q1.Eof DO
begin
CARNO:=Q1.FieldByName('車號').ASSTRING;
Application.ProcessMessages;
I:=I 1;
if StopAP then
Exit;
StatusBar1.Panels[1].Text:= IntToStr(I) ' / ' IntToStr(Q1Rec); QS2:='SELECT CAR_NO, TEST_DATE, ISSUE_DT FROM Epa' IntToStr(ThisYear-1) ' WHERE CAR_NO = ''' CARNO ''' ';
Q4.Close;
Q4.SQL.Clear;
Q4.SQL.Add(QS2);
Q4.Open;
Q2Rec:=Q4.RecordCount;
if Q2Rec <> 0 then
begin
DeCodeDate(Date, wQ2Year, wQ2Month, wQ2Day);
if ((Copy(Q4.Fields[2].AsString,3,2) = '02') and (Copy(Q4.Fields[2].AsString,5,2)='29')) then
ISU_DT:=IntToStr(wQ2Year) '/' Copy(Q4.Fields[2].AsString,3,2) '/' '28'
else
ISU_DT:=IntToStr(wQ2Year) '/' Copy(Q4.Fields[2].AsString,3,2) '/' Copy(Q4.Fields[2].AsString,5,2); if ((Copy(Q4.Fields[2].AsString,3,2)='')) then
ISU_DT:=IntToStr(wQ2Year) '/' '01' '/' '01'; if (Copy(Q5.Fields[2].AsString,4,2)='') then
ISU_DT:=IntToStr(wQ2Year) '/' Copy(Q4.Fields[2].AsString,3,2) '/' '01'; if Q4.Fields[2].IsNull then
ISU_DT:=IntToStr(wQ2Year) '/' '01' '/' '01'; if ((Copy(Q4.Fields[2].AsString,3,2) = '02') and (Copy(Q4.Fields[2].AsString,5,2)='29')) then
sDate1:=IntToStr((wQ2Year-1)) '/' Copy(Q4.Fields[2].AsString,3,2) '/' '28'
else
sDate1:=IntToStr((wQ2Year-1)) '/' Copy(Q4.Fields[2].AsString,3,2) '/' Copy(Q4.Fields[2].AsString,5,2); if ((Copy(Q4.Fields[2].AsString,3,2)='')) then
sDate1 := IntToStr(wQ2Year) '/' '01' '/' '01'; if ((Copy(Q4.Fields[2].AsString,5,2)='')) then
sDate1:=IntToStr((wQ2Year-1)) '/' Copy(Q4.Fields[2].AsString,3,2) '/' '01'; if Q4.Fields[2].IsNull then
sDate1:=IntToStr((wQ2Year-1)) '/' '01' '/' '28'; if (Q4.FieldByName('TEST_DATE').AsVariant <= StrToDate(ISU_DT) ) or (Q4.FieldByName('TEST_DATE').AsVariant >= StrToDate(sDate1)) then
begin
if Q2Rec = 1 then
begin J:=J 1;
Q1.Edit;
Q1.FieldByName('回檢日期').AsVariant:= Q4.FieldByName('TEST_DATE').AsVariant;
Q1.Post;
StatusBar1.Panels[3].Text:= IntToStr(J); // 寫入定檢筆數
end; if Q2Rec > 1 then
begin J:=J 1;
Q4.Last;
Q1.Edit;
Q1.FieldByName('回檢日期').AsVariant:=Q4.FieldByName('TEST_DATE').AsVariant;
Q1.Post;
StatusBar1.Panels[3].Text:= IntToStr(J); // 寫入定檢筆數
end;
end;
end;
Q1.Next;
end;
end;
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
bestlong
站務副站長 發表:126 回覆:734 積分:512 註冊:2002-10-19 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
|
kwon
一般會員 發表:14 回覆:64 積分:22 註冊:2002-08-08 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |