全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1609
推到 Plurk!
推到 Facebook!

從 DBF 檔是否就可知道其是使用那些欄位當索引

缺席
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-07-04 18:10:41 IP:61.219.xxx.xxx 未訂閱
各位大大: 請問有沒有辦法光憑 *.DBF 檔,就可以判斷其是使用那些欄位當索引嗎? 謝謝 Thomas Chiou
------
Thomas Chiou
P.D.
版主


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-07-04 19:22:12 IP:61.66.xxx.xxx 未訂閱
引言: 各位大大: 請問有沒有辦法光憑 *.DBF 檔,就可以判斷其是使用那些欄位當索引嗎? 謝謝 Thomas Chiou
db檔可以, dbf沒聽說過, 因為 dbf與索引檔是獨立分開的, 在dbf的檔頭會記 錄是否有索引, 但要知那些欄位做了索引, 如果有我也蠻想知道的啦!
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-07-08 13:48:00 IP:218.163.xxx.xxx 未訂閱
DBASE IV : DBF 第32Byte起(0-31 Bytes 是 File Structure), 之後每 32 bytes (Field descriptor Array 每個 32 bytes), 若 33 byte 是 0DH 則表是最後一個 Field Descriptor. 每個 Field Descriptor 的最後一個 byte 若為 01H 則表示有建 index 在此 Field, 00H 則無 index.
P.D.
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-07-08 18:46:56 IP:61.66.xxx.xxx 未訂閱
引言: DBASE IV : DBF 第32Byte起(0-31 Bytes 是 File Structure), 之後每 32 bytes (Field descriptor Array 每個 32 bytes), 若 33 byte 是 0DH 則表是最後一個 Field Descriptor. 每個 Field Descriptor 的最後一個 byte 若為 01H 則表示有建 index 在此 Field, 00H 則無 index.
不過要去解開這樣的內容, 好像不容易, 另外, 如果dbf的index是 field1 field2的話, 不知在byte上是如何解? 謝謝!
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-07-08 21:14:52 IP:218.32.xxx.xxx 未訂閱
P.D. 兄 :    這是光從 DBF File Format Specification 節錄的.    小弟並未真正測試過 Field1 + Field2 ... 等, 多 Fields Index 是如何的紀錄於 Field descriptor 應可用
P.D.
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-07-09 11:48:36 IP:61.66.xxx.xxx 未訂閱
引言: P.D. 兄 : 這是光從 DBF File Format Specification 節錄的. 小弟並未真正測試過 Field1 Field2 ... 等, 多 Fields Index 是如何的紀錄於 Field descriptor 應可用 >< face="Verdana, Arial, Helvetica"> 這或許太難了, 不過上面所談的是DbaseV格式, Dbase在for Win上的結構好像 是有做了大幅度的修正, 我記得沒錯的話, Dbase3的結構檔, 只有記錄這個主體 是否有加入索引鍵(在第28Byte, 01 or 00), 至於鍵值如何, 應該是記錄在 ndx內, 而不在dbf中, 因此要取得indexkey, 個人功力太淺, 因為之前就很想能有 這樣的功能, 因為如果可以取得indexkey內容, 就可以破解這支程式很多的流 程, 這對我大部份接爛攤子的case來說, 助益很大!
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-07-09 13:38:47 IP:218.163.xxx.xxx 未訂閱
File Header 28th byte 記錄 Index Flag 應該是 DBASE 5.0 http://www.wotsit.org/default.asp 有相關資料可參考
P.D.
版主


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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-07-09 14:48:19 IP:61.66.xxx.xxx 未訂閱
引言: File Header 28th byte 記錄 Index Flag 應該是 DBASE 5.0 http://www.wotsit.org/default.asp 有相關資料可參考
dbase3也適用!
thomas0728
中階會員


發表:112
回覆:260
積分:89
註冊:2002-03-12

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-07-09 21:15:18 IP:61.219.xxx.xxx 未訂閱
各位大大     謝謝大家的回應,我想我說明一下我要這樣做的原因 我有一套  dos 時代寫的人事考勤系統,中央信託局現在在用,裡面大約有一百多個 dbf,刷卡檔的資料約有一百多萬筆,我現在寫一支自動定時備份程式,會把 dbf 裡的資料轉到 ms sql 2000 上,如果一個 dbf 一個寫轉檔,那會寫死,且以後如果新增 dbf 那可也要在加寫,所以我用程式自動重某個目錄底下讀進 *.dbf 的檔案,在用 adodateset 去開啓它,然後判斷有那些欄位及每個欄位的資料型態,在到 sql 上去找有沒有相對的 table,如有有則比對雙方的資料,把新增的資料轉進 sql 裡,但這時一定要知道每個 dbf 的主鍵值是由那些欄位串接而成的,且資料型態是否需要轉換,我現在是在建立一個 table 對照表,勉強可以達成我要的功能,如果能自動判斷 dbf 的主鍵值是由那些組成,那程式就更厲害了,就變成通用的資料轉檔程式,對於交易檔也可以在轉完檔之後清掉某些時段的資料了
------
Thomas Chiou
P.D.
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-07-09 22:40:31 IP:61.66.xxx.xxx 未訂閱
引言: 各位大大 謝謝大家的回應,我想我說明一下我要這樣做的原因 我有一套 dos 時代寫的人事考勤系統,中央信託局現在在用,裡面大約有一百多個 dbf,刷卡檔的資料約有一百多萬筆,我現在寫一支自動定時備份程式,會把 dbf 裡的資料轉到 ms sql 2000 上,如果一個 dbf 一個寫轉檔,那會寫死,且以後如果新增 dbf 那可也要在加寫,所以我用程式自動重某個目錄底下讀進 *.dbf 的檔案,在用 adodateset 去開啓它,然後判斷有那些欄位及每個欄位的資料型態,在到 sql 上去找有沒有相對的 table,如有有則比對雙方的資料,把新增的資料轉進 sql 裡,但這時一定要知道每個 dbf 的主鍵值是由那些欄位串接而成的,且資料型態是否需要轉換,我現在是在建立一個 table 對照表,勉強可以達成我要的功能,如果能自動判斷 dbf 的主鍵值是由那些組成,那程式就更厲害了,就變成通用的資料轉檔程式,對於交易檔也可以在轉完檔之後清掉某些時段的資料了 >< face="Verdana, Arial, Helvetica"> 如果你是要轉入 SQL2000中, 是否有考慮使用業主的SQL中MTS系統, 因為本身它 就是一個轉檔程式, 而且功能十分齊全, 也包含各種資料庫的索引通融性, 或許你可以朝MTS 定時計劃 封裝功能就可以達到你要的功能
系統時間:2024-06-02 2:38:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!