用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
Raptor的公告
<div class="about"> <center>本站作者:<b>猛禽</b><br/>号:老鸟,别号:大叔,英文名:Raptor。<br/><br/><!--Creative Commons License--><a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/"><img alt="Creative Commons License" border="0" src="http://creativecommons.org/images/public/somerights20.png"/></a><br/>&#26412;&#20316;&#21697;&#37319;&#29992;<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/">&#30693;&#35782;&#20849;&#20139;&#32626;&#21517;-&#38750;&#21830;&#19994;&#24615;&#20351;&#29992;-&#30456;&#21516;&#26041;&#24335;&#20849;&#20139; 2.5 &#20013;&#22269;&#22823;&#38470;&#35768;&#21487;&#21327;&#35758;</a>&#36827;&#34892;&#35768;&#21487;&#12290;<!--/Creative Commons License--><!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <Work rdf:about=""> <license rdf:resource="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/" /> <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" /> </Work> <License rdf:about="http://creativecommons.org/licenses/by-nc-sa/2.5/cn/"><permits rdf:resource="http://web.resource.org/cc/Reproduction"/><permits rdf:resource="http://web.resource.org/cc/Distribution"/><requires rdf:resource="http://web.resource.org/cc/Notice"/><requires rdf:resource="http://web.resource.org/cc/Attribution"/><prohibits rdf:resource="http://web.resource.org/cc/CommercialUse"/><permits rdf:resource="http://web.resource.org/cc/DerivativeWorks"/><requires rdf:resource="http://web.resource.org/cc/ShareAlike"/></License></rdf:RDF> --><br/> 联系方式:<BR/><img src="http://mental.we8log.com/images/raptor_gmail.gif"/><script language="javascript" type="text/javascript" src="http://js.users.51.la/35323.js"></script> <noscript><a href="http://www.51.la/?35323" target="_blank"><img alt="&#x6211;&#x8981;&#x5566;&#x514D;&#x8D39;&#x7EDF;&#x8BA1;" src="http://img.users.51.la/35323.asp" style="border:none" /></a></noscript></center> </div> <p align="center"> <a href="http://www.smilinglibrary.org"><img src="http://www.smilinglibrary.org/sldoc/pics/smilesmall.jpg" alt="微笑图书室" width="140" height="44" /></a> <a href="http://www.1kg.cn"><img src="http://www.blogbus.com/images/site-v3/1kg_logo.gif" alt="多背一公斤" width="140" height="44" /></a> </p> <iframe scrolling="no" frameborder="0" marginheight="0" marginwidth="0" width="120" height="60" src="http://union.wps.kingsoft.com/union/wpsau/style_304.html?uid=12273&sid=0" id="ksu_style_304"></iframe> <script src="http://feed.feedsky.com/verybsav/jsout&n=3"></script>
文章分类
0. 个人链接
0. 8周刊
1. 猛禽的河蟹BLOG(RSS)
2. 寻找世界的美丽(RSS)
3. Mental Studio-个人主页(RSS)
1. CSDN BLOG
0. 狗屎皮
1. 令狐虫
2. 韩磊(RSS)
3. lxpbuaa(桂枝香在故国晚秋)
4. 一竿残照.金棣@CODELPHI
5. deadcat's blog
8. 蝈蝈
2. 技术BLOG
6. gigix(透明思考)
chechy
CoolSlob
FrameSniper(FS)
hkbarton
小伍
小小
小眼镜
摩托
百合MM
3. 洋人BLOG
Allen Bauer
Anders Ohlsson
Danny Thorpe
Don Box
Herb.Sutter
James Gosling
Martin Fowler
存档

原创  在TCX中使用SQLite3 收藏

我早就鼓吹过:SQLite是最好的本地文件型数据库。

在Windows下,它只要一个几百K的DLL就可以驱动,管理工具也只是一 个几百K的EXE程序就行了。相比之下,ACCESS庞大得令人生厌,即使是一个OLE-DB驱动也有至少10M以上的size,更不用说Foxpro, Paradox……那一大堆的表文件了。当然,SQLite的性能还不能跟那个BT的BerkeleyDB相比——BDB根本不能算是一个完整的数据库,连 SQL都不支持。

不过因为VCL提供的BDE、ADO、DBX等开发手段都没有提供对SQLite的支持——PostgreSQL至少还可 以通过OLD-DB驱动用ADO方式连接。所以用Delphi或BCB访问SQLite还是比较麻烦的。我之前都只是在Python应用中使用 SQLite。

幸好开源社区很快为此提供了支持,那就是优秀的开源数据库控件包:ZEOSDBO。它基于VCL标准的数据库接口实现,可以像BDE、ADO、DBX那样使用这一组控件,它支持的数据库和开发工具有:

支持的数据库:Sybase/ASA、Oracle、MS SQL、MySQL、InterBase/Firebird、PostgreSQL、SQLite/3等。
支持的VCL开发工具:Delphi 5-10,BCB 5/6,Kylix 2/3,Lazarus等。

然 而因为版权的原因,我现在只使用CodeGear的免费开发工具:Turbo C++ Explorer(TCX)。由于免费版的License限制,不能在TCX中安装任何第三方控件,所以我无法直接使用ZEOSDBO。不过我既然已经大 言不惭地号称DELPHI专家多年,要是连这也搞不定,那也太没面子了吧。挖卡卡。

经过一番试验,这个问题最终还是得以解决。其实也没有什么技术含量,无非是麻烦一点罢了:

启动TCX,创建一个VCL应用,在Project里加入以下文件夹中的所有PAS文件:

ZEOSDBO\src\core
ZEOSDBO\src\dbc
ZEOSDBO\src\parsesql
ZEOSDBO\src\plain

然后在Project里加入 ZEOSDBO\src\component 文件夹中的必要文 件——用到哪几个控件就加哪几个控件的文件,比如常用的ZConnection.pas和ZDataset.pas,其它不必要的文件不用加入。特别是文 件名中包含"Editor"的属性编辑功能单元,因为它们用到了控件Design的一些东西,而这些在免费版的TCX中是没有的,加入这些单元将导致编译 失败。

加好文件以后暂时不要在程序中引用,而是先编译一下,生成必要的相关文件——如.hpp等。正常情况下除了会出现几个HINT或WARNING以外,都能成功编译。

之后就可以在程序中引用ZEOSDBO访问SQLite了。

Unit1.h内容大致如下(其中偷懒用了STL中的auto_ptr管理ZEOSDBO控件对象的生命周期):

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ZConnection.hpp>
#include <ZDataset.hpp>

#include <memory>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
std::auto_ptr<TZConnection> zConn;
std::auto_ptr<TZTable> tblPerson;
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

在Unit1.cpp中就可以如下代码所示访问SQLite了:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner),
zConn( new TZConnection(this) ),
tblPerson( new TZTable( this) )
{
zConn->Protocol = "sqlite-3";
zConn->HostName = "localhost";
zConn->Database = ChangeFileExt( Application->ExeName, ".sqlite3" );
zConn->User = "";
zConn->Password = "";
zConn->Connect();
tblPerson->Connection = zConn.get();
tblPerson->TableName = "person";
tblPerson->Open( );
//...
}

最后再废话一句:SQLite可是开源免费跨平台的哦。

 

发表于 @ 2007年05月15日 10:06:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:我对开源的理解 | 新一篇:创建一个MDB文件

  • 发表评论
  • 评论内容:
  •  
Copyright © Raptor
Powered by CSDN Blog