1

当我尝试使用 Jet 打开带有 2 个“扩展名”(“filename.tst.csv”)的文件时,遇到了 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。

4

6 回答 6

2

这有点骇人听闻,但您可以在将文件打开为更友好的扩展名之前以编程方式重命名文件。只需保留旧的扩展名,以便在完成后将其重新设置。

于 2009-09-16T14:47:08.797 回答
1

这不完全是您正在谈论的情况,但是在阅读本文时,在原因部分中,有关某些不支持长文件名的驱动程序的信息看起来会适用,因为这不是 8.3 格式。

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

因此,您需要重命名文件或使用另一种方法来加载数据(例如使用 StreamReader)。就个人而言,我会重命名文件。会容易很多。

于 2009-09-16T14:52:58.663 回答
1

为什么不直接使用短文件名呢?它不会包含多个句点。只需从 Karl E Peterson 的优秀网站中加入 CFileInfo 类(它有一个用于GetShortPathName API 调用的包装方法)。

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

于 2009-09-16T19:02:31.123 回答
0

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

于 2009-09-16T17:22:16.037 回答
0

我不确定这一点,因为自从它在 VB6 中过时以来,我没有过多地使用 DAO。我知道 Jet 的规则在 OLE DB 提供程序、ODBC 驱动程序和 DAO 之间可能会有很大不同。

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

于 2009-09-17T04:53:26.173 回答
0

据我说,你的第二行代码不能返回任何东西!

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

您不能使用 SELECT 指令打开数据库!你的代码应该看起来像

Set db = DBEngine.Workspaces(0).OpenDatabase(filenamne)
于 2009-09-17T04:59:46.223 回答