Jet OLEDB Provider 可在除 Windows 7 64 位上的 Excel 2010 之外的任何地方工作
我在某些 VBA 代码中使用“Microsoft.Jet.OLEDB.4.0”提供程序进行基本连接,并且该代码在除运行 64 位安装的 Microsoft Office Excel 2010 的 Windows 7 64 位操作系统之外的任何地方都可以工作。
从字面上看,XP 32 或 64、Vista 32 或 64 以及 7 32 的所有其他组合,以及 Excel 2003、2007 或 2010 安装运行此代码没有问题,但在上述系统上,它会导致有关“缺少提供程序”的错误,并且我无法创建连接字符串。
With Conn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Mode = adModeRead
.ConnectionString = "Data Source=" & path & ";Extended Properties='text;HDR=YES;FMT=Delimited'"
.Open
End With
我已经进行了大量研究,但据我所知,操作系统应该附带一整套提供程序,包括 32 位版本的 Jet Provider(不存在 64 位版本)和 Excel使用它进行连接应该没有问题。有什么想法吗?
I'm using the "Microsoft.Jet.OLEDB.4.0" provider for a basic connection in some VBA code, and the code works everywhere except on windows 7 64-bit operating systems running a 64-bit installation of Microsoft Office Excel 2010.
Literally every other combination of XP 32 or 64, Vista 32 or 64, and 7 32, with Excel 2003, 2007, or 2010 installations has no problem running this code, but on the above described system, it results in an error about a "Missing Provider" and I can't create the connection string.
With Conn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Mode = adModeRead
.ConnectionString = "Data Source=" & path & ";Extended Properties='text;HDR=YES;FMT=Delimited'"
.Open
End With
I've done a ton of research, but from what I can tell, the operating system is supposed to come with a full set of providers, including the 32-bit version of the Jet Provider (no 64 bit version exists), and Excel should have no problem using it for the connection. Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我不知道这对我的具体示例之外的人是否有帮助。我正在使用提供程序对 CSV 执行查询。例如:
这里,源文件已被修改,以便所有列都通过其标题命名为 Cn:
因此,在我的例子中,我有一个如下所示的文件:
通常,使用 Jet OLEDB 提供程序,上面的查询字符串可用于将文件内容读入单元格:
但在上面的代码中,“ProviderError”将在 64 位计算机上触发,因为没有可用的 Jet 提供程序。我的解决方法如下。我实际上将文件加载到 Excel 中,并自己解析查询字符串。我用逗号分隔符分隔查询字符串,以便查询字符串的每个部分都成为新单元格的公式。为了创建公式,我只需在前面添加一个
=
符号,并将字符串“Cn”替换为对源列的引用。这样,像(C2+C4*10000000)
这样的复杂查询仍然可以得到评估。然后,我根据源数据的长度复制公式,然后用硬编码值覆盖公式。最终结果与执行复杂的 Jet OLEDB 查询相同,尽管速度稍慢。代码如下。上述解决方案假设查询有 3 列,但可以轻松调整以接受任何查询,使用 split 获取尽可能多的列,并动态重新调整 pos() 和 col() 数组。
I don't know if this will be helpful to people outside my specific example. I was using the provider to perform a query on a CSV. For instance:
Here, the source file has been modified so that all of the columns are named Cn by their headers:
So in my case, I have a file that looks like this:
Normally, using the Jet OLEDB provider, the above query string can be used to read the contents of the file into a cell:
But in the above code "ProviderError" will get triggered on 64 bit machines because there is no Jet provider available. My workaround was as follows. I actually load the file into excel, and parse the query string myself. I break the query string by comma delimiter so that each section of the query string becomes the formula for a new cell. To create the formula, I simply prepend an
=
sign and replace the string "Cn" with a reference to the source column. This way, complex queries like(C2+C4*10000000)
still get evaluated. I then copy down the formula according to the length of the source data, and then overwrite the formulas with hard coded values. The end result is identical to doing a complex Jet OLEDB query, albeit slightly slower. Code is below.The above solution assumes a query with 3 columns, but could easily be adjusted to take a any query, use split to get as many columns as there are, and dynamically redim pos() and col() arrays.