2009-11-21 41 views
1

我正在使用Visual Studio 2008(在vb.net)中的一個項目。該應用程序需要從Visual FoxPro數據庫(dbc文件)導入數據。不要問爲什麼FoxPro。它需要是vfp,並且數據庫每天由另一個應用程序更新;因此,我不能使用任何其他數據庫格式。Visual FoxPro和VS2008不顯示所有的DBF記錄。一個單獨的版本

我通過OleDb FoxPro驅動程序(最新版本)連接到數據庫。一切都還好(除了速度)。我可以從我需要的所有表格(dbf文件)導入數據。我將它加載到一個數據集中,然後對數據集本身進行操作,以避免重新連接時間(我只需要在此階段讀取數據)。

問題是: 當我編譯和運行代碼時,並不是所有的記錄都顯示出來。

然而,當我運行從發行文件夾(在目錄)的編譯版本,應用程序會顯示更多的記錄。

更令人費解的是,當我在Visual FoxPro 9.0中打開相同的數據表文件時,我只能看到VS2008中顯示的數據(不是在Realease版本中)。 但是,如果我在OpenOffice Calc中打開dbf,它會顯示所有記錄 - 即與我的應用程序的發佈版本相同的記錄。

我的第一個想法是:如果它沒有顯示VFP 9中的所有內容,則這些文件必須已經在不同版本的VFP中創建,所以我應該更改連接字符串。但是,爲什麼編譯的發佈版本顯示所有正確的數據?連接字符串必須正確。

我下載了DBF Viewer Plus來看看我的dbfs在另一個應用程序中,但它也看不到所有的記錄。

我不知道爲什麼它的行爲如此。而且這很煩人,因爲我每次想測試它時都需要構建我的應用程序。

我在Windows Vista上開發。

謝謝你的幫助!

回答

1

幾年來一直沒有與foxpro合作過,但它曾經是dbf文件的一個「功能」,當你刪除一個記錄時,它實際上並沒有消失,直到你「打包」這個文件。它只是設置一個標誌,指示記錄被刪除,並且大多數文件的foxpro視圖都會相應地過濾掉它,但它仍然存在,並且對oledb連接可見。

編輯: 另一種可能性是該指數使用的是 - 如果它指定爲「唯一」,它會過濾掉所有,但在特定視圖中的「重複」記錄一個

+0

恐怕不是這樣。 FoxPro顯示標記爲已刪除的記錄,但不顯示其他幾個。我需要的那些。只有在運行我的應用程序構建或OpenOffice Calc時,才能看到它們。順便說一句,OOffice無法看到在FoxPro中標記爲已刪除的記錄。 – jfrej 2009-11-21 18:23:58

+0

至於我可以看到 - 無法在FoxPro中看到整個表格 - 所有索引都是唯一的。這可能是原因,但爲什麼編譯的版本會顯示沒有問題的所有記錄?我認爲在VS編譯/調試和VS版本構建之間存在問題。也許一些VS設置? VS環境中的行爲與其外部的行爲不同。 – jfrej 2009-11-21 18:38:36

+0

僅供參考在OLE DB連接字符串中有一個用於包含/排除已刪除記錄的DELETED選項:https://www.connectionstrings.com/visual-foxpro/ – Keith 2014-12-18 19:46:52

0

我可以從經驗說,我從來沒有見過提供者這樣做。

VFP可以設置「過濾器」,這些過濾器會影響您以有時不明顯的方式看到的內容。它們可能存儲在DBC中 - 其他應用程序是否可能設置了過濾器?

不太明白爲什麼數據會有所不同,取決於你從哪裏運行應用程序,這讓我覺得別的事情正在發生。

如果可能的話,我會建議您獲得VFP9開發環境的副本,並在其中打開DBC - 這將爲您提供更多的幫助。

0

開發環境是否有可能查看不同的數據集?開發環境的不同連接字符串或DSN設置?

裏克Schummer VFP MVP

+0

我認爲這是可能的。它的行爲就像有一個不同的連接字符串(或DSN設置),但它將在哪裏設置?我沒有更改任何默認的VS設置,我不使用數據集設計器 - 所有事情都是以編程方式完成的。 – jfrej 2009-12-22 11:55:16

+0

不確定,因爲我不是Visual Studio開發者。希望我能有更多的幫助。 – 2009-12-23 15:55:15