excel - 是否可以将 Sqlite 数据库嵌入到 excel 2007 文件(zip 存档)中

标签 excel sqlite odbc

我正在开发一个需要数据库后端的 Excel 应用程序。我的偏好是使用 SQLite 3,并尽可能为最终用户提供无缝和可移植性。

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

感谢您的输入。

最佳答案

一些笔记。到目前为止,还没有人提示文件打不开。请注意,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
Connection strings

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

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for 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

关于excel - 是否可以将 Sqlite 数据库嵌入到 excel 2007 文件(zip 存档)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068022/

相关文章:

excel - VBA - 用户表单新实例

excel - 精确的流程事件时间线图(例如在 Excel 中)

c# - 为什么 Xamarin 文档建议使用单例进行数据库连接?

android - 编译 SELECT 语句时没有这样的列

java - 从方法返回多个值

odbc - 多个用户如何处理同一个企业架构师文件?

c++ - 如何使用 ODBC (C++) 从 MS SQL 获取 nvarchar 作为字符串?

excel - 如何将单元格值定义到工作簿中每个工作表的同一列VBA

excel - vba 列出共享工作簿中的所有事件用户?

php - 我可以 "redeclare"(更新)表添加一些新列吗?