打开具有2个“扩展名”的文件时出现Jet错误3011

时间:2009-09-16 14:42:10

标签: ms-access vb6 dao jet

当我尝试用它打开一个带有2个“扩展名”(“filename.tst.csv”)的文件时,我遇到了Jet throw错误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”,但我不确定错误发生的原因并且我无法通过Google或通过Google找到答案在这里 - 但我认为有人可能会对限制有所了解。

这是在VB6中使用DAO 3.6。

6 个答案:

答案 0 :(得分:2)

这有点hackey,但您可以以编程方式重命名该文件,然后再将其打开为更友好的扩展名。只需保留旧的扩展名,这样就可以在完成后将其重新设置。

答案 1 :(得分:1)

这并不是你所说的情况,但在阅读本文时,在CAUSE部分中,有关不支持长文件名的某些驱动程序的信息看起来会适用,因为它不是8.3格式。

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

因此,您需要重命名文件或使用其他方法加载数据(例如使用StreamReader)。就个人而言,我会重命名该文件。这会容易得多。

答案 2 :(得分:1)

为什么不直接使用短文件名呢?它不会包含多个期间。只需从Karl E Peterson优秀网站提供this提供的CFileInfo类(它有GetShortPathName API调用的包装方法)。

我认为该卷可能不支持短文件名(optional)。

答案 3 :(得分:0)

您需要为导入文件创建schema.ini文件,或者将扩展名添加到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Jet \ 4.0 \ Engines \ Text \ Format注册表项,以便ADO知道如何解析文件。 http://msdn.microsoft.com/en-us/library/ms974559.aspx

有详细解释

答案 4 :(得分:0)

我不确定这是因为我没有使用DAO,因为它在VB6中已经过时了。我知道Jet的规则在OLE DB提供程序,ODBC驱动程序和DAO之间可能会有很大差异。

您是否尝试过更换“。”这些文件名中的字符用“#”字符表示?或者也许只是最后一个?就在您的SQL语句文本中。

答案 5 :(得分:0)

据我所知,你的第二行代码无法返回任何内容!

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

您无法使用SELECT指令打开数据库!你的代码看起来像

Set db = DBEngine.Workspaces(0).OpenDatabase(filenamne)