2011-05-15 35 views
0

我在Delphi 2007中連接到舊的FoxPro 2.6表。
我已經安裝了BDE,並在窗體上放置了一個TTable。使用古老的FoxPro 2.6表時,我得到無效的索引描述符

一臺不工作
設置databasenamec:\datadir
的表名到contacts.dbf

當我設置主動爲真,我得到

無效索引描述。

另一臺正常工作
我有一個名爲article.dbf另一個表加載的罰款,並在原來的程序,一切工作正常,以及。

這是我已經試過
我已經重新索引在原計劃的一切,但沒什麼區別。
事實上,Foxpro的診斷說,一切都很好。
我並不關心任何索引,因爲表中沒有那麼多記錄。
我試過設置indexfile屬性,但這沒有幫助。

如何讓德爾福只連接到表並停止抱怨索引?

+0

如果您不需要回寫該文件,則可以刪除.dbf副本上的'cdx'標誌並打開該文件。字節28 - >不是0x01([參見此處](http://www.dbf2002.com/dbf-file-format.html))。 – 2011-05-15 22:25:51

回答

3

可能您的contacts.dbf表包含無法由BDE評估的表達式索引。這裏是一個解釋,我發現here

問題:不被支持的BDE哪些類型的FoxPro指標 的?當 試圖打開某些表時,我得到一個 「無效索引描述符」錯誤。

答案:當 生產指數(.CDX)相關聯的 表有其具有 表達該BDE不能 評估索引標籤發生該錯誤。解決方案是使用FoxPro刪除 標籤創建一個 等效索引,BDE可以從 瞭解。

以下條件不是由BDE支持的 ,並將導致 「無效索引描述符」錯誤。

不支持DTOC(,1)格式;使用 DTOC()。 ALLTRIM功能不支持 ;使用LTRIM(RTRIM(字段))。

2

這是Sertac描述的代碼,它將從頭中刪除自動打開的CDX標誌。 當然,先製作數據庫的副本

var 
    Stream: TFileStream; 
    ByteRead: Byte; 
begin 
    Stream := TFileStream.Create("YourFile.dbf", fmOpenReadWrite or fmShareDenyNone); 
    try 
    // Byte offset 28 has a value of 0x01 if a structural (auto-open) index exists, 
    // or 0x00 if no such index exists. If the value is not set, we do nothing. 
    Stream.Position := 28; 
    Stream.Read(ByteRead, SizeOf(ByteRead)); 
    if ByteRead = 1 then 
    begin 
     ByteRead := 0; 
     Stream.Position := 28; 
     Stream.Write(ByteRead, SizeOf(Byte)); 
    end; 
    finally 
    Stream.Free; 
    end; 
end; 
相關問題