我正在开发一个需要数据库后端的 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
引用资料:
大多数 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
关于excel - 是否可以将 Sqlite 数据库嵌入到 excel 2007 文件(zip 存档)中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068022/