本文的目的在于采用流水账方式来记录学习delphi访问嵌入式数据库sqlite中的一些点滴。欢迎各位同好共同学习和批评指正。

file:1 准备工作part1

       delphi版本:delphi2007 for win32 update3。任意安装版本即可。
sqlite dll版本:3.5.3。目前最新版本的sqlite引擎。[ http://www.sqlite.org/ ]
sqlite for delphi:simple sqlite 3.0 for delphi。目前的最新版本的发布日期为27 August 2007,支持sqlite dll版本3.4.2。经简单测试,3.5.3也是可以的。自带demo。[ http://www.itwriting.com/sqlitesimple.php ]

file:2 准备工作part2

      新 建一个窗体应用程序工程,并设定保存的文件夹。将simple sqlite 3.0 for delphi 中的 sqlite3.pas,sqlite3table.pas,sqlite3udf.pas拷贝至工程所在的文件夹。并在工程中添加这三个文件。拷贝 sqlite.dll到编译生成exe文件的文件夹。这个要看个人的设定。

file:3 初步测试

      引用SQLiteTable3.pas单元。
在窗体上创建一个叫btnVersion的按钮(Tbutton)。在btnVersion的click事件中写入下面的代码。
procedure TfrmAbout.btnVersionClick(Sender: TObject);
var
SqliteDB:TSQLiteDatabase;
begin
SqliteDB:=TSQLiteDatabase.Create('');
showmessage('Sqlite dll version:'+SqliteDb.version);
SqliteDB.Free;
end;
      编译运行,成功的话,将会显示当前的sqlite dll的版本号,我的是3.5.3。

file:4 简单工作原理描述

      在simple sqlite3.0 for delphi的几个文件中,主要用到两个文件。分别是sqlite3.pas,sqlite3table.pas。
sqlite3.pas实现sqlite.dll的接口外部定义。
sqlite3table.pas进行简单的访问函数封装。
在delphi中,通过sqlite3table.pas来实现对sqlite数据库的各种访问。
关于sqlite3udf.pas,根据作者的描述,主要用与创建用户自定义函数,具体功能未测试。

file:5 读取数据

      假设,我们有一个叫做database.db的sqlite数据库文件,在编译生成的exe文件所在的目录。里面有一个叫做countries的表格。
表格创建语句如下。
CREATE TABLE "Countries" (
Name VARCHAR NOT NULL PRIMARY KEY UNIQUE,
Capital VARCHAR NOT NULL,
Area INTEGER NOT NULL,
Pop INTEGER NOT NULL,
PCI INTEGER NOT NULL
);
      我们该如何访问其中的第一条数据呢。
var
SqliteDB:TSQLiteDatabase;
SqliteTB:TSQLiteTable;
begin
SqliteDB:=TSQLiteDatabase.Create('database.db');
SqliteTB:=SqliteDB.GetTable('Select * from countries');
显示控件1.text:=SqliteTB.FieldAsString(SqliteTB.FieldIndex['Name']);
显示控件2.text:=SqliteTB.FieldAsString(SqliteTB.FieldIndex['Capital']);
显示控件3.text:=SqliteTB.FieldAsString(SqliteTB.FieldIndex['Area']);
显示控件4.text:=SqliteTB.FieldAsString(SqliteTB.FieldIndex['Pop']);
显示控件5.text:=SqliteTB.FieldAsString(SqliteTB.FieldIndex['PCI']);
SqliteTB.free;
SqliteDB.free;
end;
      TSQLiteTable类有两个方法,分别是Next和Previous,是用来向后和向前移动数据游标的。配合这两个方法,我们可以读取表格任意数据 内容。例如select * from countries where area >8000000的数据。

file:6 写入数据

      我们可以读取数据,就可以写入数据。如何来做到呢?还是以Countries表为例。
var
SqliteDB:TSQLiteDatabase;
begin
SqliteDB:=TSQLiteDatabase.Create('database.db');
SqliteDB.ExecSQL('Insert Into Countries (Name,Capital,Area,Pop,PCI) values ("China","Beijing",9600000,1500000000,6000)');
SqliteDB.Free; 
end;

同样,数据的update方法也可以按照这种方法来实现。在这里可以看到,字符类数据可以用双引号来标记起来,而不是通常sqlserver的单引号标记。

file:7 字符编码

      访问过MySql数据库数据的朋友应该记得噩梦般的中文数据存取经历。数据库里用了一种编码,程序又是另一种编码,导致中文数据变成乱码。
sqlite中,数据库内用的是UTF-8存取,DELPHI取出的数据是ASCII编码。也就是说,我们需要在存取的同时做编码转换。
有这样两个方法,utf8decode(),utf8encode()。当从数据库中读取数据时,我们用utf8decode();当向数据库中写入数据时,我们用utf8encode();
例如:
显示控件.text:=utf8decode(sltb.FieldAsString(sltb.FieldIndex['Name']));
SqliteDB.ExecSQL(utf8encode('Insert Into Countries (Name,Capital,Area,Pop,PCI) values ("中国","北京",9600000,1500000000,6000)'));
      在有更好的方法之前,我们只能这么用……

file8: Blob Blob Blob

      某些时候,我们会需要向数据库中存储和读取图片,视频,音频等信息的数据,例如:前女友们的性感照片。sqlite中有一种数据类型叫做Blob,可以满足我们的要求。如何访问和读取呢?
下面以在database.db数据库中PhotoLib表格中存取一个JPEG图片为例:
CREATE TABLE "PhotoLib" (Id Integer NOT NULL PRIMARY KEY UNIQUE,
Photo BLOB);
      写入:
var
SqliteDB: TSQLiteDatabase;
FS: TFileStream;
begin
SqliteDB:=TSQLiteDatabase.Create('database.db');
FS := TFileStream.Create('test.jpeg',fmOpenRead);
SqliteDB.UpdateBlob('UPDATE PhotoLib set Photo = ? WHERE ID = 1',FS);
FS.free;
SqliteDB.Free;
end;

读取至TImage控件显示:
var
MS: TMemoryStream;
PIC: TJPegImage;
SqliteDB: TSQLiteDatabase;
SqliteTB: TSQLIteTable;
begin
SqliteDB:=TSQLiteDatabase.Create('database.db');
SqliteTB:=SqliteDB.GetTable('Select * From PhotoLib Where Id=1');
MS := SqliteTB.FieldAsBlob(SqliteTB.FieldIndex['photo']);
if (MS = nil) then
begin
showmessage('该条记录没有前女友照片数据.');
exit;
end;
MS.Position := 0;
PIC := TJPEGImage.Create;
PIC.LoadFromStream(ms);
self.Image2.Picture.Graphic := PIC;
MS.free;
PIC.Free;
end;

posted @ 2012-06-02 22:01 许明吉博客 阅读(5) 评论(0) 编辑

一,准备工作。

1.1安装Delphi2010。

1.2获得FastReport 4.9.31。

二,FastReport文件夹下LibD14目录添加到Delphi中的Library Path

步骤:1,打开Delphi2010,打开菜单Tools->Options。 2,左侧点击Delphi Options的+号,点击Library-win32

            3,在右侧框中找到Library Path,将FastReport->LibD14路径粘贴至该文本框的末尾,粘贴之前输入分号(;)。

三,生成FastReport汉化文件
步骤:1,运行"recompile.exe"文件,设置相应选项,我的设置如下:
           1,Select the compiler 设置为 Embarcadero Rad Studio 2010(Delphi,C++)。(默认值)

           2,Select the FastReport Version 设置为 Enterprise。(默认值)

           3,Select the TeeChart version 设置为 TeeChartStd。(默认值)

           4,What you want to do 下的 Change language To: 设置为 Chinese 。(自己选择)

四,编译运行时包。

步骤:1,在Delphi中打开(File->Open)菜单。

            2,编译,打开如下DPK后,在Delphi中的IDE右侧Project Manager选中该Project右键单击,然后点击Compile。

                           - FastReport\LibD14\fqb140.dpk
                           - FastReport\LibD14\fs14.dpk
                           - FastReport\LibD14\fsDB14.dpk
                           - FastReport\LibD14\fsBDE14.dpk
                           - FastReport\LibD14\fsADO14.dpk
                           - FastReport\LibD14\fsIBX14.dpk
                           - FastReport\LibD14\frx14.dpk
                           - FastReport\LibD14\frxDB14.dpk
                           - FastReport\LibD14\frxADO14.dpk
                           - FastReport\LibD14\frxBDE14.dpk
                           - FastReport\LibD14\frxIBX14.dpk
                           - FastReport\LibD14\frxDBX14.dpk
                           - FastReport\LibD14\frxe14.dpk
                           - FastReport\LibD14\frxcs14.dpk 这个是FastReport的Client/Server,如不需要则不需编译此文件

四,编译并安装Dcl。

步骤:1,在Delphi中打开(File->Open)菜单。

            2,编译,打开如下DPK后,在Delphi中的IDE右侧Project Manager选中该Project右键单击,然后点击Compile,接着在弹出的右键菜单中点击Install。

                           - FastReport\LibD14\dclfs14.dpk
               - FastReport\LibD14\dclfsDB14.dpk
                           - FastReport\LibD14\dclfsBDE14.dpk
                           - FastReport\LibD14\dclfsADO14.dpk
                           - FastReport\LibD14\dclfsIBX14.dpk

                           - FastReport\LibD14\dclfrx14.dpk
                            - FastReport\LibD14\dclfrxDB14.dpk
                           - FastReport\LibD14\dclfrxADO14.dpk
                           - FastReport\LibD14\dclfrxBDE14.dpk
                           - FastReport\LibD14\dclfrxIBX14.dpk
                           - FastReport\LibD14\dclfrxDBX14.dpk
                           - FastReport\LibD14\dclfrxe14.dpk

                          - FastReport\LibD14\dclfrxcs14.dpk 这个是FastReport的Client/Server,如不需要则不需编译、安装此文件。

五、安装结束。

posted @ 2012-03-11 12:44 许明吉博客 阅读(54) 评论(0) 编辑

http://www.cssrain.cn/

http://www.uml.org.cn/

http://www.htmldrive.net

http://www.uml.org.cn/

posted @ 2012-01-21 16:55 许明吉博客 阅读(26) 评论(0) 编辑

www.mfg88.com

http://www.marlinwire.com   金工厂

http://www.metamation-us.com/   金软件

http://www.yellowpages.com  美国黄页

http://www.uskmfg.com/sheet_metal_fabrication.htm  金工厂 机加工 图片资料比较齐全

 

http://www.maloyalaser.com/about.php

posted @ 2012-01-17 16:13 许明吉博客 阅读(8) 评论(0) 编辑

http://www.kubotekusa.com/products/kubotek_spectrum.html

posted @ 2012-01-16 14:33 许明吉博客 阅读(13) 评论(0) 编辑

http://www.hongkiat.com

http://www.hv-designs.co.uk/2011/06/28/milk-ui-kit-freebie/

免费的失量图

http://www.vectorstock.com/free-vectors?order=popular 

国外的下载网站

http://www.sharewarejunction.com

http://www.allulook4.com/95f/KeyCreator+7+5+2.html

http://usenetdownloads.net/usenet.nl/v4/register.php?file=S2V5Y3JlYXRvciAyMDExIDMyYml0

posted @ 2012-01-16 11:46 许明吉博客 阅读(23) 评论(0) 编辑
摘要: 屏幕录像软件 BB FlashBack阅读全文
posted @ 2012-01-12 17:50 许明吉博客 阅读(16) 评论(0) 编辑
摘要: 根据一副 png 图片绘制半透明窗体时,用了 WS_EX_LAYERED 后当前窗体再也不会处理 paint 事件,所以所含的子控件是一辈子也不会画出来的,但是这个控件确实存在,而且可以响应事件 。而此时 windows 画制窗体是使用 UpdateLayeredWindow 这个 api 函数的。 对于按钮,完全可以自己画两个图片然后盖在 button 上面,通过处理 button 的 enter 和 leave 消息来切换者两个图片来表达按钮状态 对于输入框..这个可以用一个让任何人看了都生气地办法,那就是....两个窗体,的确别人就是这么做的 可以用一个空心窗体只显示该显示的控件,然后.阅读全文
posted @ 2012-01-12 16:30 许明吉博客 阅读(103) 评论(0) 编辑
摘要: // 不同风格的光标procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);begin CreateCaret(Edit1.Handle, 0, 10, 4); ShowCaret(Edit1.Handle);end;// 用图像做光标procedure TForm1.Memo1MouseDown(Sender: TObject; Button...阅读全文
posted @ 2012-01-12 16:07 许明吉博客 阅读(40) 评论(0) 编辑
摘要: 需求:QQ我的资料中基本资料窗体中的文本框: 正常状态下,文本框只有一条看起来只有一个像素的边框,边框的颜色从上到下由深到浅的渐变,当鼠标定位到该文本框时,其边框会变粗,而且边框的颜色加亮显示如下图所示: 实现思路:一、准备两个边框素材图片,一个是正常状态下的边框素材,比如:另一个是鼠标进入到文本框内的边框素材比如:二、需要的参数首先是边框素材的绘制边距,分为左边距,右边距,上边距,下边距边框素材根据边距的设置,使用九宫格缩放绘制到界面上其次是边框的边距,也为左边距,右边距,上边距,下边框代表的是文本框客户区(即输入区)的大小默认的,边框素材的绘制边距和边框的边距是一样的三、消息处理边框属于文阅读全文
posted @ 2012-01-12 10:39 许明吉博客 阅读(110) 评论(0) 编辑