ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

EH搜索     
EH云课堂-专业的职场技能充电站 Excel转在线管理系统,怎么做看这里 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
Excel不给力? 何不试试FoxTable! Excel 2016函数公式学习大典 高效办公必会的Office实战技巧 免费下载Excel行业应用视频
300集Office 2010微视频教程 Tableau-数据可视化工具 精品推荐-800套精选PPT模板,点击获取 ExcelHome出品 - VBA代码宝免费下载
你的Excel 2010实战技巧学习锦囊 欲罢不能, 过目难忘的 Office 新界面 Excel VBA经典代码实践指南
查看: 11720|回复: 13

SQLite for Excel

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-4-21 21:25 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:其他专业开发
https://sqliteforexcel.codeplex.com/

OverviewSQLite http://www.sqlite.org is a small, easy-to-use, open-source SQL database engine. This project, SQLite for Excel, is a lightweight wrapper to give access to the SQLite3 library from VBA. It provides a high-performance path to the SQLite3 API functions, preserving the semantics of the SQLite3 library calls and allowing access to the distributed SQLite3.dll without recompilation.

The current release has the following parts:
  • SQLite3_StdCall is a small and very simple C .dll that makes it possible to use the standard SQLite3 .dll from VBA. It just passes calls from VBA on to SQLite without any change in the parameters, but this allows the StdCall calling convention that VB6 and VBA is limited to.
  • Sqlite3.bas VBA module has all the VBA Declares, and does the parameter and string conversions. It exposes a number of SQLite3xxxx functions. These map as directly as possible to the SQLite C API, with no change in the semantics. Although I have not exposed the whole API, most of the core interface is included, in particular the prepared statement, binding, retrieval and backup functions. Date values are stored as Julian day real numbers in the database.
  • Sqlite3Demo.bas VBA module has tests that serve as nice examples of how to use the SQLite3xxxx functions.
  • SQLite3Demo.xls contains the two VBA modules.
  • 64-bit support for use with the 64-bit versions of Excel can be found in SQLiteForExcel_64.xlsm which has VBA code that supports both 32-bit and 64-bit versions of Excel. A 64-bit build of SQLite 3.7.13 is located in x64\SQLite3.dll. The corresponding Sqlite3Demo_64.bas module shows how to target both 32-bit and 64-bit Excel with the same VBA code (some #Ifs are required). (Note that the default install of Office is always the 32-bit version, even on a 64-bit version of Windows. Only if the 64-bit version of Office has been specifically selected will the 64-bit modules be required.)
Getting Started
  • Download the release archive.
  • Unzip the download to a convenient location.
  • Open the Distribution\SQLiteForExcel.xls file.
  • Open the VBA Editor (Alt+F11).
  • Note the SQLite3 module which contains the declarations and helper functions to access SQLite.
  • Examine and run the example test code in the SQLite3Demo module.
  • Find the documentation for the SQLite functions here: http://sqlite.org/cintro.html. The complete query language for SQLite is documented here: http://sqlite.org/lang.html.
Sample projects
  • Mark Camilleri has posted a sample project, XLSQLite, that provides a GUI interface to SQLite in Excel. The project can be downloaded from the Gatekeeper for Excel site:http://www.gatekeeperforexcel.com/other-freebies.html. XLSQLite.xlam is an add-in that allows you to create and manipulate (both DDL and DML) SQLite databases from within Excel. It offers a basic gui interface that allows you to perform basic tasks on your SQLite databases.
Related Projects
  • The SQLite home is at http://www.sqlite.org and the most recent version of the SQLite3.dll library can be found here http://www.sqlite.org/download.html.
  • To create User-Defined Functions (UDFs) for Excel using C#, VB.NET or F#, have a look at my Excel-DNAproject. It provides free and easy integration of .NET with Excel.
  • For access to SQLite from .NET I recommend:
    • the official System.Data.SQLite is a full-featured ADO.NET driver with full Linq and Entity Framework support, or
    • the sweet-looking sqlite-net, a light-weight wrapper with attribute-based object-to-database mapping and some Linq support.

SupportStart a discussion or create a new issue here on CodePlex. You are also welcome to contact me directly atgovert@icon.co.za with questions, comments or suggestions.



Last edited May 17, 2013 at 4:51 AM by govert, version 28



SQLiteForExcel-0.9.zip

1.07 MB, 下载次数: 809

评分

参与人数 1鲜花 +1 收起 理由
office8424 + 1 值得肯定

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-4-22 06:15 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-22 08:39 来自手机 | 显示全部楼层
几年前试过,因为效率低就放弃了,希望现在有更好的表现

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-22 09:44 | 显示全部楼层
本帖最后由 liucqa 于 2014-4-22 09:45 编辑
xinjiana 发表于 2014-4-22 08:39
几年前试过,因为效率低就放弃了,希望现在有更好的表现

SQLite效率不低,前提是对事务的操作要正确,你百度一下就知道了
大部分公司的移动应用都使用这个小型数据库

TA的精华主题

TA的得分主题

发表于 2014-4-22 10:56 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2014-4-22 11:14 | 显示全部楼层
liucqa 发表于 2014-4-22 09:44
SQLite效率不低,前提是对事务的操作要正确,你百度一下就知道了
大部分公司的移动应用都使用这个小型数 ...

放个例子来看看,怎么用SQLite

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-22 11:25 | 显示全部楼层
本帖最后由 liucqa 于 2014-4-22 11:33 编辑
coby001 发表于 2014-4-22 11:14
放个例子来看看,怎么用SQLite

http://bbs.csdn.net/topics/360042960

http://www.trinea.cn/android/database-performance/


当然,还有一个更加省力气的办法,就是换成高速固态硬盘,这样IO基本就没瓶颈了,事务再多也不怕

TA的精华主题

TA的得分主题

发表于 2014-4-22 11:40 | 显示全部楼层
liucqa 发表于 2014-4-22 11:25
http://bbs.csdn.net/topics/360042960

http://www.trinea.cn/android/database-performance/

SQLite用过一下
作简单查询还是可以的,复杂的就力不从心了

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-4-22 19:57 | 显示全部楼层
coby001 发表于 2014-4-22 11:40
SQLite用过一下
作简单查询还是可以的,复杂的就力不从心了

SQLite性能和限制
分类: 数据库2012-03-20 14:04 7117人阅读 评论(0) [url=]收藏[/url] 举报

sqlite数据库嵌入式postgresql网络insert
性能和限制
SQLite是一个很快的数据库,但"快"这个词本身是一个主观的和模糊不清的词。坦白地讲,对于有些事情,SQLite比其他数据库做得快,也有些事情比不上其他数据库。利用SQLite提供的配置参数,SQLite是足够快速和高效的。与大多数数据库一样,SQLite使用B-tree做索引,使用B+-tree处理表。因此,在对单表进行查询时,平均而言,SQLite与其他数据库一样快(至少不慢于)。简单的SELECT、INSERT和UPDATE语句是相当快速的--几乎与内存(如果是内存数据库)或者磁盘同速。SQLite通常要快于其他数据库,因为它在处理一个事务开始,或者一个查询计划的产生方面开销较小,并且没有调用服务器的网络或认证以及权限协商的开销。它的简单性使它更快。
但是随着查询变大变复杂,查询时间使得网络调用或者事务处理开销相形见绌,SQLite将会与其他数据库一样。这时一些大型的设计复杂的数据库开始发挥作用了。虽然SQLite也能处理复杂的查询,但是它没有精密的优化器或者查询计划器。SQLite知道如何使用索引,但是它没有保存详细的表统计信息。假如执行17路join,SQLite也会连接表并给您结果,并不像您在Oracle或者PostgreSQL中期望的那样,SQLite没有通过计算各种替代查询计划并选择最快的候选计划来尝试判断优化路径。因此,假如您在大型数据集合上运行复杂的查询,SQLite与那些有复杂设计的查询计划器的数据库运行一样快的机会是非常小的。
一些情况下,SQLite可能不如大型数据库快,但大多数的这些情况是预期的。SQLite是为中小规模的应用程序设计的一个嵌入式的数据库,这些限制是设计目的预见到的。许多新用户错误地认为使用SQLite可以代替大型关系数据库。事实是有时可以这样做,有时不行,这完全取决于您准备用SQLite来做什么。
一般情况下,SQLite的局限性主要有以下两方面:
并发。SQLite的锁机制是粗粒度的,它允许多个读,但是一次只允许一个写。写锁会在写期间排他地锁定数据库,其他人在此期间不能访问数据库。SQLite已经采取措施以最小化排它锁所占用的时间。通常来讲,SQLite中的锁只保持几毫秒。但是按照一般经验,如果您的应用程序有很高的写并发(许多连接竞争向同一数据库写),并且是时间关键型,您可能需要其他数据库。需要实际测试您的应用程序才能知道能获得怎样的性能。作者曾见过一个简单的网络应用程序中,SQLite用100个并发连接每秒处理500多个事务。您的事务所修改的记录数以及查询所涉及的复杂性可能有所不同。什么样的并发性是可接受的,这取决于具体的应用程序,只能通过直接测试来判断。总之,对任何数据库都是真理:直到您做了实际测试才能知道应用程序能获得怎样的性能。
网络。虽然SQLite数据库可以通过网络文件系统共享,但是与这种文件系统相关的潜在延时会导致性能受损。更糟的是,网络文件系统实现中的一些缺陷也使得打开和修改远程文件--SQLite或其他--很容易出错。如果文件系统的锁实现不当,可能允许两个客户端同时修改同一个数据库文件,这样必然会导致数据库出错。实际上,并不是因为SQLite的实现导致SQLite不能在网络文件系统上工作。相反,SQLite在底层文件系统和有线协议下工作,但是这些技术有时并不完善。例如,许多NFS使用有缺陷的fcntl(),这意味着锁可能并不像设想的那样工作。一些较新版本的NFS,如Solaris NFSV4就可以工作正常,SQLite需要的锁机制也是相当可靠的。然而,SQLite开发者既没有时间,也没有资源去验证任何给定的网络文件系统在所有的情况下都可以无缺陷工作。
再次申明,绝大部分限制是有意设计的--它们是SQLite设计的结果。例如,支持高度的写并发会带来很大的复杂性,这将使SQLite的简单性无法保持。同样,作为嵌入式数据库,SQLite是有意不支持网络的。这一点并不奇怪。总之,SQLite不能做的都是它所能做的直接结果。它开始的设计就是一款模块化、简单、紧凑的以及易于使用的嵌入式关系数据库,它的基础代码都在使用它的程序员的掌握范围内。从多方面看,它能完成许多其他数据库不能做的事情,例如,运行在电力消耗实际上是一项制约因素的嵌入式环境中。
尽管SQLite的实现已经相当好了,但仍有部分特性未能实现,这些特性有:
完整的触发器支持。SQLite支持几乎所有的标准触发器功能,包括递归触发器和INSTEAD OF触发器。但是对于所有的触发器类型,当受触发器查询影响的每一行做评估时,SQLite需要FOR EACH ROW行为。ANSI SQL92也说明了当前不支持FOR EACH STATEMENT。
完整的修改表结构支持。目前只支持RENAME TABLE和ADD COLUMN类型的ALTER TABLE命令。其他类型的ALTER TABLE操作,例如DROP COLUMN、ALTER COLUMN以及ADD CONSTRAINT还未实现。
右外连接与全外连接。左外连接(LEFT OUT JOIN)已经支持,但是右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)还未实现。所有的右外连接在语义上都有相同的左外连接,相反也成立。通过简单逆向表的顺序和修改连接限制,左外连接可以作为右外连接的实现。全外连接可以通过组合左外连接和UNION以及在WHERE子句中进行恰当的NULL过滤实现。
可更新的视图。SQLite的视图使只读的,您不能在视图上执行DELETE、INSERT或者UPDATE语句。但是您可以创建一个启动对视图进行DELETE、INSERT或者UPDATE的触发器,在触发器内完成您需要执行的操作。
窗口功能。ANSI SQL99的新功能之一就是窗口功能。该功能提供结果集的后处理分析,例如排序、平均移动以及超前和滞后计算等。SQLite目前支持ANSI SQL92的一部分,因此,它不支持像RANK()、ROW_NUMBER()等。
授权和撤销。由于SQLite能读写普通的磁盘文件,因此,唯一可以应用的访问权限就是所在操作系统的普通文件的访问权限。授权(GRANT)和撤销(REVOKE)命令一般是在高端系统中使用的,这些系统中有多个用户,不同用户对数据库中的数据有不同的访问级别。SQLite模型中,应用程序是主用户,能够访问整个数据库。这种模型中的访问明确定义为应用程序级--具体地说,就是应用程序可以访问数据库文件。
除了这里列出的,SQLite Wiki上有个专门的页面列出SQLite不支持的SQL。网址是www.sqlite.org/cvstrac/wiki?p=UnsupportedSql

TA的精华主题

TA的得分主题

发表于 2014-5-16 16:23 | 显示全部楼层
用ACCESS有容量的限制,想转用一下这个Sqlite,但是搞不清楚如何用SQL语言来批量导入CSV数据(MYSQL或ACCESS都可以用对应的SQL语句来实现),虽然它的控制台可以用.import命令来实现,但如何在VBA里编程实现这个功能呢?楼主有做过这样的测试吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关注官方微信,每天学会一个新技能

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2019-8-22 06:46 , Processed in 0.127694 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2020 Wooffice Inc.

   

沪公网安备 31011702000001号 沪ICP备11019229号

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:徐怀玉律师 李志群律师

快速回复 返回顶部 返回列表