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

急! 如何開啟有索引檔的dbf檔

答題得分者是:ccchen
P.D.
版主


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-25 23:48:10 IP:210.85.xxx.xxx 未訂閱
請問各位! 我要讀取一個 dbf檔, 該檔原先已建立一個 mdx索引檔, 因程式需要重建索引, 所以我先刪除 mdx索引檔, 但此時如果我以程式 table1.open 會造成 index does not exist 的錯誤而無法開啟 但如果我以 desktop database 系統來開該支 dbf檔, 會有一個視窗出現要求我 Open Read Only Fail Open Open and Detach 只要我選第三個打開並分離索引檔, table就可以開啟沒有問題, 請問 我要如何將這個功能以程式來做, 也就是當索引被刪除時, 我可以利用程式將其資料庫與索引檔分開同時打開而不會造成錯誤! 謝謝!
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-26 08:18:32 IP:61.219.xxx.xxx 未訂閱
dbf檔在第28byte記錄著是否有index,將其設為0就不會去找index了    
function disableIndex(fname:string):integer;
//attempts disable .mdx by clear .dbf's byte 28
// return 1 if it has intex file 
var
    F:File of byte;
    old,value :byte;
begin
  value := 0;
  try
    assignFile(F, fname);
  except
    showmessage('can not open file:'  fname);
  end;
  Reset(F);
  Seek(F, 28);
  read(F, old);
  if old = 1 then begin
    Seek(F, 28);
    Write(F, value);
    result := 1;
    end
  else
    result := 0;
  CloseFile(F);
end;
P.D.
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-26 10:43:05 IP:61.222.xxx.xxx 未訂閱
引言: dbf檔在第28byte記錄著是否有index,將其設為0就不會去找index了
function disableIndex(fname:string):integer;
//attempts disable .mdx by clear .dbf's byte 28
// return 1 if it has intex file 
var
    F:File of byte;
    old,value :byte;
begin
  value := 0;
  try
    assignFile(F, fname);
  except
    showmessage('can not open file:'  fname);
  end;
  Reset(F);
  Seek(F, 28);
  read(F, old);
  if old = 1 then begin
    Seek(F, 28);
    Write(F, value);
    result := 1;
    end
  else
    result := 0;
  CloseFile(F);
end;
版主, 感謝你, 另外再和你請教一個問題 是否所有定義 .dbf 的檔都是一樣, 因為我的資料來源有可能是 foxpro, dbase, clipper 等早期 dos 下的 DBF檔! 如果我改錯了BYTE, 會不會造成所有DATA毀損, 抑或再改回原來的BYTE資料就可以恢復?
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-26 14:33:07 IP:203.217.xxx.xxx 未訂閱
是否所有定義 .dbf 的檔都是一樣 不同版本是有些差異, foxpro, dbase, clipper則除index外差異不大 dbf之檔案格式可看 http://www.wotsit.org/download.asp?f=ti838d 如果我改錯了BYTE, 會不會造成所有DATA毀損抑或再改回原來的BYTE資料就可以恢復 當然 我在Delphi1.0時還直接用blockwrite方式用binary寫dbf檔頭來create DBF檔
hhchen
一般會員


發表:1
回覆:2
積分:0
註冊:2002-10-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-12-15 02:39:55 IP:211.21.xxx.xxx 未訂閱
版主, 您好 想請問一個問題 我要將 .DBF 的檔案轉入 SQL server 會出現 "index not found" 奇怪的是之前曾成功過 但現在卻每次都出現錯誤訊息 我參考您寫的 function function TForm1.disableIndex(fname:string):integer; //attempts disable .mdx by clear .dbf's byte 28 // return 1 if it has intex file var F:File of byte; old,value :byte; begin value := 0; try assignFile(F, fname); except showmessage('can not open file:' fname); end; Reset(F); Seek(F, 28); read(F, old); if old = 1 then begin Seek(F, 28); Write(F, value); result := 1; end else result := 0; CloseFile(F); end; 結果第28byte OLD=174 請問可以給我一點建議嗎? ps, dbf 同一目錄下有同檔名的 mtx file Tks
ccchen
版主


發表:61
回覆:940
積分:1394
註冊:2002-04-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-12-15 09:26:15 IP:203.217.xxx.xxx 未訂閱
我要將 .DBF 的檔案轉入 SQL server 為何需要執行DisableIndex?
hhchen
一般會員


發表:1
回覆:2
積分:0
註冊:2002-10-24

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-12-16 17:11:27 IP:140.122.xxx.xxx 未訂閱
版主您好 謝謝! 我之前的問題已藉由您的disableIndex 解決了 問題的前因後果應該是 1. 開始時 dbf 轉入 SQL 會出現 index not found (該目錄存有mtx 索引檔, 但 SQL server 找不到, 此時未執行disableindex function) 2. 執行disableindex function 後, SQL server 已不會再去找 index file, 也不再出現index not found 訊息, 而順利將資料轉入 SQL server. 世事真奇妙, 您幾年前寫的function 卻幫了我一個大忙 Thanks again! hhchen
系統時間:2024-05-10 0:33:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!