当我尝试用它打开一个带有2个“扩展名”的文件时,我遇到了Jet throw错误3011的问题。 (QUOT; filename.tst.csv&QUOT)。

  

运行时错误'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。

有帮助吗?

解决方案

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

http://social.technet.microsoft.com ?/搜索/ EN-US查询= 3011&安培; AC = 8

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

其他提示

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

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

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

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

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

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

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

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

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

Set db = DBEngine.Workspaces(0).OpenDatabase(filenamne)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top