2009-09-16 35 views
1

當我嘗試使用它打開帶有2個「擴展名」(「filename.tst.csv」)的文件時,出現Jet拋出錯誤3011的問題。打開帶有2個「擴展名」的文件時出現Jet錯誤3011

運行時錯誤 '3011'

Microsoft Jet數據庫引擎找不到對象 'filename.tst.csv'。確保對象存在,並且正確拼寫其名稱和路徑名。

當代碼如下所示:

Dim db as Database, rs as Recordset 
Set db = OpenDatabase("SELECT TOP 1 * FROM [" & fileName & "];") 
Set rs = db.OpenRecordset("SELECT TOP 1 * FROM [" & fileName & "];") 

我已經找到了問題所在是第二次延長(或表觀擴展名)「.tst」但我不知道爲什麼錯誤正在發生,我無法通過谷歌或通過這裏找到答案 - 但我認爲有人可能會對這些限制有所瞭解。

這是在VB6中使用DAO 3.6。

+0

有一個在我的代碼中的錯誤上面 - 我不會再投入到工作中,直到下週三,但我周圍的解決具有不同的工作誤差(剛打開的文件記錄和使用第一行 - 基本相同的東西)。我會發布實際答案,並在上班時修正上面的代碼與實際存在的代碼。 – Corazu 2009-09-18 06:01:14

回答

1

這不完全是你正在談論的情況,但是在閱讀本文時,在原因部分中,關於一些不支持長文件名的驅動程序的信息看起來好像適用,因爲它不是8.3格式。

http://social.technet.microsoft.com/Search/en-US?query=3011&ac=8

所以,你需要重命名文件或使用其他方法來加載數據(例如使用一個StreamReader)。就我個人而言,我會重命名文件。它會容易得多。

+0

技術上不是我尋找的解決方案,但似乎提供了一個理由,爲什麼這是失敗的,或至少是我能找到的最好的暗示,爲什麼它失敗。 – Corazu 2009-09-18 06:02:02

2

這有點hackey,但你可以編程方式重命名文件,然後再打開它以更友好的擴展名。只要保留舊的擴展名,以便在完成後可以將其設置回去。

+0

是的,如果我找不到更好的解決方案,這可能是我將要使用的解決方案 - 它只是用於導入(複製到內部格式),因此我只是將它複製到具有更好文件名的臨時文件夾中。 – Corazu 2009-09-16 14:56:18

0

您需要爲您的導入文件創建一個schema.ini文件,或者將擴展名添加到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text \ Format註冊表項中,以便ADO知道如何解析文件。有詳細的解釋http://msdn.microsoft.com/en-us/library/ms974559.aspx

+0

Schema.ini已經創建 - 這不是問題。此外,我不使用ADO我正在使用DAO。 – Corazu 2009-09-16 18:29:52

+0

對不起,我錯過了DAO。我跳了進來,因爲幾年前我有這個問題,導入一個奇怪的擴展到VFP表的CSV文件。 – jac 2009-09-16 21:12:04

1

爲什麼不使用短文件名呢?它不會包含多個期間。只需從Karl E Peterson的優秀網站this提供的CFileInfo類中下載(它具有用於調用GetShortPathName API的封裝方法)。

我想卷可能不支持短文件名(它是optional)。

0

我對此沒有把握,因爲我沒有使用過DAO,因爲它在VB6中已經過時了。我知道Jet的規則在OLE DB提供程序,ODBC驅動程序和DAO之間可能非常不同。

您是否嘗試過替換「。」這些文件名中的字符是「#」個字符?或者也許只是最後一個?就在你的SQL語句文本中。

+0

我也想到了這個,但是當我嘗試它似乎並沒有工作:( – onedaywhen 2009-09-17 08:34:13

+0

是的,我沒有嘗試過,它出現了相同的錯誤,雖然。 – Corazu 2009-09-18 05:57:35

0

根據我的觀點,你的第二行代碼不能返回任何東西!

Set db = OpenDatabase("SELECT TOP 1 * FROM [" & fileName & "];") 

您無法使用SELECT指令打開數據庫!您的代碼shouls樣子

Set db = DBEngine.Workspaces(0).OpenDatabase(filenamne) 
相關問題