是否有可能将Sqlite数据库embedded到Excel 2007文件(zip存档)

我正在开发一个需要数据库后端的excel应用程序。 我的首选是使用SQLite 3,并为最终用户尽可能无缝和便携。

最近我了解到,Excel 2007文件只是一个带xlsm扩展名的zip文件。 我的问题是,我可以将我的后端SQLite 3数据库存储在Zip存档中,并使用ODBC与数据库进行交互。 如果是这样的话,谁能指点一些背景资料,文章,指导实现这个目标。 这种方法有什么缺点,或者我应该知道更好的select。

感谢您的input。

一些笔记。 到目前为止,没有人抱怨文件没有打开。 请注意,Excel文件在ADO代码运行之前保存。

非常隐藏:

ThisWorkbook.Worksheets("Courses").Visible = xlVeryHidden ThisWorkbook.Worksheets("System").Visible = xlVeryHidden 

一段代码:

  Const gCN = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" 

<…>

 Set rs = CreateObject("ADODB.Recordset") Set cn = CreateObject("ADODB.Connection") Set fs = CreateObject("Scripting.FileSystemObject") scn = gCN & ThisWorkbook.FullName _ & ";Extended Properties=""Excel 8.0;HDR=Yes;"";" cn.Open scn ''If they do not have an ID, they do not exist. sSQL = "SELECT ID,FirstName,LastName, " _ & "CourseName,AdditionalText,Format(ExpiryDate,'dd/mm/yyyy') As ExpiryDate " _ & "FROM [Applicants$] WHERE DateCancelled Is Null AND ID Is Not Null " _ & "AND (FirstName Is Null OR LastName Is Null Or CourseName Is Null " _ & "Or ExpiryDate Is Null) " & sWhere rs.Open sSQL, cn 

参考文献:

Excel ADO
连接string

大多数可用于Jet的方法都可以与Excel一起使用

用于Access 2000的基本Microsoft Jet SQL
用于Access 2000的中级Microsoft Jet SQL
先进的Microsoft Jet SQL为Access 2000

编辑评论

我没有发现泄漏特别糟糕,但我没有运行很多迭代,这是一个很好的机器。

下面的代码使用DAO,这不会导致内存泄漏。

 'Reference: Microsoft Office 12.0 Access Database Engine Object Library Dim ws As DAO.Workspace Dim db As DAO.Database Dim rs As DAO.Recordset Dim sDb As String Dim sSQL As String sDb = ActiveWorkbook.FullName Set ws = DBEngine.Workspaces(0) Set db = ws.OpenDatabase(sDb, False, True, "Excel 8.0;HDR=Yes;") sSQL = "SELECT * FROM [Sheet1$];" Set rs = db.OpenRecordset(sSQL) Do While Not rs.EOF For i = 0 To rs.Fields.Count - 1 Debug.Print rs.Fields(i) Next rs.MoveNext Loop rs.Close db.Close ws.Close 'Release objects from memory. Set rs = Nothing Set db = Nothing Set ws = Nothing 

致谢: http : //www.ozgrid.com/forum/showthread.php? t = 37398

这是一个替代scheme。

1)打开(VBA中的EVENT)从Excel .xlsm,sqlite和dbFile解压缩。

2)处理你的…..

3)保存(VBA中的EVENT)本书,然后将Excel .xlsm,sqlite,dbFile附加到Excel .xlsm中。

Excel会在每次保存时重写文件,因此您自己添加的文件将被删除。 此外,没有SQLite驱动程序可以访问zip档案内的数据库文件。

您可以将数据库文件与Excel文件一起发送,也可以在应用程序检测到数据库文件丢失时使用SQL命令列表重新创build数据库。
这仍然需要在用户的机器上安装一些SQLite(ODBC)驱动程序。

将数据存储在Excel文件中的最无缝和便携的方式是将其存储在Excel表单中,如Remou所述。 但是,ADO驱动程序在Excel中已经打开时可能会拒绝打开该文件,因此您必须使用Excel函数来访问数据。