aminghanhua 发表于 2015-2-5 21:34:10

Delphi7 sqlite3完整源码解决

本帖最后由 aminghanhua 于 2015-2-5 21:38 编辑

放广告先
通过小甲鱼老师认证http://bbs.fishc.com/thread-51821-1-1.html
原来的Delphi群好像解散了,新建个 大家一起学习   争取做到有问必答。
群号:138156926
加群链接:http://jq.qq.com/?_wv=1027&k=OFAZ7G
Delphi资源共享(群公用百度网盘,内容丰富哦)
----------------------------------------------------------------------------------------
很多Fishc同学 都在问Delphi7怎么弄sqlite数据库, 网上也没有很清晰的 所以就写出来 大家一起分享
本人菜鸟,大神勿喷
这里使用的是ZEOSDBO控件 官网为http://sourceforge.net/projects/zeoslib/最新版本为 7.1.4 Last Update: 2015-01-02
支持的很多。。。
(pooled.*   ASA7ASA8ASA9ASA12oracleoracle-9isqlitesqlite-3interbase-6
firebird-1.0firebird-1.5firebird-2.0firebird-2.1firebird-2.5firebirdd-1.5
firebirdd-2.0firebirdd-2.1firebirdd-2.5postgresqlpostgresql-7postgresql-8 postgresql-9
mysqlmysql-4.1mysql-5mysqld-4.1mysqld-5MariaDB-5mssqlsybaseFreeTDS_MsSQL<=6.5
FreeTDS_Sybase<10FreeTDS_Sybase-10+FreeTDS_MsSQL-7.0FreeTDS_MsSQL-2000FreeTDS_MsSQL>=2005ado)

一、安装控件
1、进入...\ZEOSDBO-7.1.4-stable\packages\delphi7 双击 ZeosDbo.bpg
然后点击Delphi7菜单栏的project à compile all projects


编译完点击 ok
2、在Delphi7菜单栏 Tool àEnvironmentOptionsàLibraryàLibrary Path中加入路径(所在文件夹)\ZEOSDBO-7.1.4-stable\packages\delphi7\build

3、双击..\ZEOSDBO-7.1.4-stable\packages\delphi7\ZComponentDesign.dpk点击install安装完毕 控件就都出现了

二、读取数据库1、新建个application拖入DbGrid1、DataSource1、ZQuery1、ZConnection1、listview1、Button1、Button27个控件

2、首先把控件链接起来,我习惯用代码写在Form1的onCreate事件中procedure TForm1.FormCreate(Sender: TObject);
var
path:string;
begin
path:=ExtractFileDir(ParamStr(0));//获取根目录路径
ZQuery1.Connection:=ZConnection1;
DataSource1.DataSet:=ZQuery1;
DBGrid1.DataSource:=DataSource1;
with ZConnection1 do
begin
    Protocol :='sqlite-3' ;   //数据库类型
    port:=3306;               //端口
    HostName := '127.0.0.1';
    Database := path + '/FpcEfficiency.db';//数据库路径
    Connected:=True;
end;
end;
3、在Listview1中显示表名1)修改Listview1的 ViewStyle属性为 vsReport ,双击Listview1 添加一个column 修改Caption属性为 数据库表名,RowSelect属性改为True,GridLines属性改为True;2)修改button2 caption属性为 读取表 button1 Caption属性为连接表
3)在Button2的OnClick事件中写入代码procedure TForm1.Button2Click(Sender: TObject);
var
s:TStrings;
i:Integer;
begin
ListView1.Items.Clear;
try
   s:=Tstringlist.Create;
   ZConnection1.GetTableNames('',s);//第一个参数为过滤不过滤为空
   for i:= 0 to s.Count -1 do
   begin
   ListView1.Items.Add.Caption := s.Strings;
   end;
finally
FreeAndNil(s);
end;
end;这时,已经能读取表名了

4、在DbGrid1中显示数据库内容在Button1的OnClick事件中写入代码procedure TForm1.Button1Click(Sender: TObject);
begin
if ListView1.Items.Count = 0then
ShowMessage('请先读取表名')
else if ListView1.SelCount<=0 then
ShowMessage('先选择表!')
else
begin
with ZQuery1 do
begin
Close;
SQL.Clear;
SQL.add('select * from ' + ListView1.Selected.Caption);
Open;
end;
end;
end;这时若发现全部为乱码,修改ZConnection1的AutoEncodeString属性为True就好了5、由于用的是Dbgrid,Text字段都不显示为(Memo)

网上有很多解决的办法,大部分都推荐换DbGridh控件,这里既然用了 就不换了 用代码搞定Query1 Fields 有个ongettext事件 用这个实现定义两个过程procedure TForm1.ShowTextField(Sender: TField; var Text: string;
   DisplayText: Boolean);
begin
   Text := Sender.AsString;
end;

procedure TForm1.SetTextFieldEvent(const ADatSet: TZQuery);
var
   i: integer;
begin
   with ADatSet do
   begin
   DisableControls;
   try
       for i := 0 to Fields.Count - 1 do
         if Fields is TMemoField then
         Fields.OnGetText := ShowTextField;
   finally
       EnableControls;
   end;
   end;
end;
然后在ZQuery1的AfterOpen事件中写入代码procedure TForm1.ZQuery1AfterOpen(DataSet: TDataSet);
begin
SetTextFieldEvent(ZQuery1);
end;三、最后就是DbGrid1颜色调整了在DbGrid1 onDrawColumnCell事件中自己发挥了
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var i :integer;
begin
if gdSelected in State then Exit;
//定义表头的字体和背景颜色:
    for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
    begin
      (Sender as TDBGrid).Columns.Title.Font.Name :='宋体'; //字体
      (Sender as TDBGrid).Columns.Title.Font.Size :=9; //字体大小
      (Sender as TDBGrid).Columns.Title.Font.Color :=$000000ff; //字体颜色(红色)
      (Sender as TDBGrid).Columns.Title.Color :=$0000ff00; //背景色(绿色)
    end;
//隔行改变网格背景色:
if zQuery1.RecNo mod 2 = 0 then
    (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色
else
    (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色
//定义网格线的颜色:
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
with (Sender as TDBGrid).Canvas do //画 cell 的边框
begin
    Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
    MoveTo(Rect.Left, Rect.Bottom); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
    Pen.Color := $0000ff00; //定义画笔颜色(绿色)
    MoveTo(Rect.Right, Rect.Top); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线
end;
end;

结果如图所示


完整源码+控件+Demo放入群共享了 要的同学可以加下。

Angel丶L 发表于 2015-2-5 23:36:20

支持了

漠水 发表于 2015-2-6 08:44:46

学习学习

悠悠清风 发表于 2015-2-6 10:54:37

支持学习了,~

sz871210 发表于 2018-1-6 18:16:12

你好,我这边第一步的时候提示:
ZParseSql.dpk(32): Required package 'ZCore' not found

myxf 发表于 2018-9-22 14:58:49

谢谢分享

gdgzwqz 发表于 2019-9-2 23:24:58

楼主未提供文件下载,我在群里找了好久才找到,
本想上传至此,可惜这里不支持!例子很不错!赞扬一下!

gdgzwqz 发表于 2019-9-2 23:43:51

找到了,下面这个地方,有下载地址链接!!!
https://www.amingstudio.com/delphi/225.html

steelsz 发表于 2019-11-8 09:27:20

地址呢?

zfang1113 发表于 2020-9-12 20:30:28

下载了zeosdbo-7.2.6.1-stable组件,安装后也可以用,但是会报 zdbc.inc 找不到。。。求解,谢谢

sz871210 发表于 2022-6-21 15:34:00

耍不了,求助一下咯。按照步骤,第一步就搞不定
页: [1]
查看完整版本: Delphi7 sqlite3完整源码解决