Excel 如何从VBA访问SQLite?

Excel 如何从VBA访问SQLite?,excel,vba,sqlite,Excel,Vba,Sqlite,我有一个Excel工作簿,其中包含一些查询本地access数据库的adodb代码。我希望对SQLite也这样做,因为我相信这将提供更好的性能。我该怎么做?我可以使用adodb或odbc连接到SQLite文件吗 我需要一些简单的东西,我可以部署,这样,如果我可以尽量减少不必要的配置和安装,可能会使用excel的人在pc上没有管理员权限,因此他们无法安装软件。有一些DLL,您可以使用adodb从Visual Basic访问SQLITE数据库。我想这就是你要找的信息。我从未尝试过,但是链接对你有用 祝

我有一个Excel工作簿,其中包含一些查询本地access数据库的adodb代码。我希望对SQLite也这样做,因为我相信这将提供更好的性能。我该怎么做?我可以使用adodb或odbc连接到SQLite文件吗


我需要一些简单的东西,我可以部署,这样,如果我可以尽量减少不必要的配置和安装,可能会使用excel的人在pc上没有管理员权限,因此他们无法安装软件。

有一些DLL,您可以使用adodb从Visual Basic访问SQLITE数据库。我想这就是你要找的信息。我从未尝试过,但是链接对你有用


祝你好运。

我使用了Datenhaus,它工作得很好。

面对同样的问题,我创建了一个轻量级库,可以从Excel VBA直接访问SQLite3。最终的结果是一个更简单的解决方案,没有中间的ODBC或OleDb/ADO层,性能反映了SQLite数据库的性能,而不是不透明包装器的性能。这也很好,因为您不需要在注册表中注册COM组件,只需在工作簿中复制两个.dll,然后在项目中添加一个.bas模块

这种方法的一个缺点是API不是标准的DAO或ADO接口,因此您可能需要制作一些包装器,或者转换一些代码以使其工作。这也意味着您需要熟悉SQLite API才能使用它,但SQLite文档非常清楚

我已将该项目的早期版本放在CodePlex上:提供了SQLite3 API函数的高性能路径,保留了SQLite3库调用的语义,并允许在不重新编译的情况下访问分布式SQLite3.dll

如有任何反馈,将不胜感激


更新:项目现在仍在继续。

如何从以下位置从vba宏访问sqlite:

软件环境:

1) Win7(32位)2)Excel2007(带VBA函数)

步骤:

1) 首先,, 下载并安装SQLite ODBC驱动程序

注意:如果使用Win7,则需要管理员权限, 否则安装将失败。最简单的步骤是使用 管理员登录,然后安装SQLite ODBC驱动程序

2) 打开Excel VBA代码编辑器窗口,菜单栏[工具]-> [参考],添加Microsoft ActiveX Data Objects 2.7,目的是 使用VBA和数据库连接

3) 使用以下代码连接SQLite数据库:


谷歌sqliteforexcel并从github下载

戈弗特已经回应了这一点(造物主),这对我来说是一个简单的解决方案,除非你不能。。不要使用访问权限。将数据传输到sqlite db文件。您甚至可以对服务器或DAO使用ADO,并将rs直接读入sqlite表


它不需要驱动程序或安装。您可以让工作簿从文件打开时的共享位置下载2.dll(检查它们是否在文件系统中不存在,例如c:\temp),然后用户运行sqlite。我猜想,如果您这么想问这个问题,您可能希望编写一个函数来循环调用相应的sqlite函数(在示例文档中解释),并将返回的数据读入vba数组。然后你可以用它做任何你想做的事情。

非常好,除非你有一个用户群,没有特权不能安装随机驱动程序。它的灵活性也不如使用.dll,后者可以按照您的意愿直接从sqlite读取/写入数据。更多的事情可能会出错。我希望能够像govert一样编写自己的.dll,但结果集除外,只要让它始终像记录集一样返回vba数组即可。无论如何都可以这样做,但存在编码问题,需要设置vba数组的大小或保留/转置redim。
Dim conn As New ADODB.Connection 
Dim dbName As String 

'Define the connection string 

dbName = "Driver = {SQLite3 ODBC Driver}; Database = D: \ yourdbname.db" 

'Open the database 

ff.Open dbName 

ff.Execute "create table a (a, b, c);" 

'Other operations on and VBA to connect to other DB like Access the same. 


'Close connection 
ff.Close