加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 19:09:33 所属栏目:百科 来源:网络整理
导读:我正在开发一个需要数据库后端的excel应用程序.我的偏好是使用SQLite 3并使其尽可能无缝和便携,以供最终用户使用. 最近我了解到Excel 2007文件只是一个带有xlsm扩展名的zip存档.我的问题是,我可以将我的后端SQLite 3数据库存储在Zip存档中,并使用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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读