全國最多中醫師線上諮詢網站-台灣中醫網
網站公告 :


Delphi K.Top討論區 » 資料庫程式設計討論區(Delphi) » 急! 如何開啟有索引檔的dbf檔
發表新文章
瀏覽次數:6096
推到 Plurk!
推到 Facebook!

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

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




發表:408
回覆:3196
積分:3111
註冊: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.
版主




發表:408
回覆:3196
積分:3111
註冊: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



系統時間:2014-04-19 00:39:06,  線上使用者 249 / Max 973,主題數:96,814,回覆數:219,009。  聯絡我們 | Delphi.ktop討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!
5151線上健康照護網 | 台灣西醫網 | 台灣中醫網 | 台灣牙科網 | 台灣照護網 | 趴趴狗旅遊網
大花蓮旅遊網 | 大花蓮民宿網 | 花蓮旅遊網 | 花蓮旅遊 | 花蓮旅遊 | 花蓮住宿
花蓮民宿網 | 花蓮旅遊 | 花蓮住宿 | 花蓮民宿 | 花蓮旅遊 | 花蓮民宿
花蓮住宿 | 大南投旅遊網 | 大南投民宿網 | 日月潭風景區 | 日月潭旅遊網 | 日月潭民宿網
日月潭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網 | 宜蘭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網
宜蘭住宿網 | 宜蘭旅遊網 | 宜蘭民宿網 | 宜蘭住宿網 | 台東旅遊網 | 台東民宿網
台東住宿網 | 台東旅遊網 | 台東民宿網 | 台東住宿網 | 台東旅遊 | 台東民宿
台東住宿 | 綠島旅遊網 | 綠島民宿網 | 綠島住宿網 | 綠島旅遊網 | 綠島民宿網
綠島住宿網 | 綠島旅遊網 | 綠島民宿網 | 綠島住宿網 | 集集旅遊網 | 集集民宿網
集集住宿網 | 關子嶺旅遊網 | 關子嶺民宿網 | 白河旅遊網 | 白河民宿網 | 心脈大師
尊榮牙醫診所 |