当我尝试用它打开一个带有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。
答案 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)