国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQLite > 正文

在TCX中使用SQLite3

2024-09-07 00:10:01
字體:
來源:轉載
供稿:網友

我早就鼓吹過: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可是開源免費跨平臺的哦。

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1609484

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 弥渡县| 平遥县| 长治县| 昭觉县| 三台县| 通山县| 江川县| 南靖县| 正定县| 安乡县| 新平| 乐昌市| 温泉县| 仪征市| 清新县| 施秉县| 托克逊县| 平邑县| 靖安县| 莆田市| 太康县| 连南| 卓尼县| 自治县| 宁乡县| 和林格尔县| 洪江市| 凌海市| 驻马店市| 云阳县| 德庆县| 贞丰县| 桃江县| 上思县| 海林市| 海城市| 桂林市| 井研县| 思南县| 阜平县| 伽师县|