鱼C论坛

 找回密码
 立即注册
查看: 15356|回复: 10

[技术交流] Delphi7 sqlite3完整源码解决

[复制链接]
发表于 2015-2-5 21:34:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 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.*   ASA7  ASA8  ASA9  ASA12  oracle  oracle-9i  sqlite  sqlite-3  interbase-6
firebird-1.0  firebird-1.5  firebird-2.0  firebird-2.1  firebird-2.5  firebirdd-1.5
firebirdd-2.0  firebirdd-2.1  firebirdd-2.5  postgresql  postgresql-7  postgresql-8 postgresql-9
mysql  mysql-4.1  mysql-5  mysqld-4.1  mysqld-5  MariaDB-5  mssql  sybase  FreeTDS_MsSQL<=6.5
FreeTDS_Sybase<10  FreeTDS_Sybase-10+  FreeTDS_MsSQL-7.0  FreeTDS_MsSQL-2000  FreeTDS_MsSQL>=2005  ado)

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

编译完点击 ok
2.png
2、在Delphi7菜单栏 Tool àEnvironmentOptionsàLibraryàLibrary Path中加入路径
(所在文件夹)\ZEOSDBO-7.1.4-stable\packages\delphi7\build
4.png
3.png
3、双击  ..\ZEOSDBO-7.1.4-stable\packages\delphi7\ZComponentDesign.dpk
点击install
安装完毕 控件就都出现了
5.png

二、读取数据库
1、新建个application  拖入DbGrid1、DataSource1、ZQuery1、ZConnection1、listview1、Button1、Button2  7个控件
6.jpg

2、首先把控件链接起来,我习惯用代码写
在Form1的onCreate事件中
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. var
  3. path:string;
  4. begin
  5. path:=ExtractFileDir(ParamStr(0));  //获取根目录路径
  6. ZQuery1.Connection:=ZConnection1;
  7. DataSource1.DataSet:=ZQuery1;
  8. DBGrid1.DataSource:=DataSource1;
  9.   with ZConnection1 do
  10.   begin
  11.     Protocol :='sqlite-3' ;   //数据库类型
  12.     port:=3306;               //端口
  13.     HostName := '127.0.0.1';  
  14.     Database := path + '/FpcEfficiency.db';//数据库路径
  15.     Connected:=True;
  16.   end;
  17. end;
复制代码

3、在Listview1中显示表名
1)修改Listview1的 ViewStyle属性为 vsReport ,双击Listview1 添加一个column 修改Caption属性为 数据库表名,RowSelect属性改为True,GridLines属性改为True;
2)修改button2 caption属性为 读取表 button1 Caption属性为连接表
7.jpg
3)在Button2的OnClick事件中写入代码
  1. procedure TForm1.Button2Click(Sender: TObject);
  2. var
  3.   s:TStrings;
  4.   i:Integer;
  5. begin
  6.   ListView1.Items.Clear;
  7.   try
  8.    s:=Tstringlist.Create;
  9.    ZConnection1.GetTableNames('',s);//第一个参数为过滤  不过滤为空
  10.    for i:= 0 to s.Count -1 do
  11.    begin
  12.    ListView1.Items.Add.Caption := s.Strings[i];
  13.    end;
  14.   finally
  15.   FreeAndNil(s);
  16.   end;
  17. end;
复制代码
这时,已经能读取表名了
8.jpg

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

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

  6. procedure TForm1.SetTextFieldEvent(const ADatSet: TZQuery);
  7. var
  8.    i: integer;
  9. begin
  10.    with ADatSet do
  11.    begin
  12.      DisableControls;
  13.      try
  14.        for i := 0 to Fields.Count - 1 do
  15.          if Fields[i] is TMemoField then
  16.            Fields[i].OnGetText := ShowTextField;
  17.      finally
  18.        EnableControls;
  19.      end;
  20.    end;
  21. end;
复制代码

然后在ZQuery1的AfterOpen事件中写入代码
  1. procedure TForm1.ZQuery1AfterOpen(DataSet: TDataSet);
  2. begin
  3. SetTextFieldEvent(ZQuery1);
  4. end;
复制代码
三、最后就是DbGrid1颜色调整了  在DbGrid1 on
DrawColumnCell事件中自己发挥了

  1. procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  2.   DataCol: Integer; Column: TColumn; State: TGridDrawState);
  3. var i :integer;
  4. begin
  5.   if gdSelected in State then Exit;
  6. //定义表头的字体和背景颜色:
  7.     for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
  8.     begin
  9.       (Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; //字体
  10.       (Sender as TDBGrid).Columns[i].Title.Font.Size :=9; //字体大小
  11.       (Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; //字体颜色(红色)
  12.       (Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; //背景色(绿色)
  13.     end;
  14. //隔行改变网格背景色:
  15.   if zQuery1.RecNo mod 2 = 0 then
  16.     (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色
  17.   else
  18.     (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色
  19. //定义网格线的颜色:
  20.     DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  21.   with (Sender as TDBGrid).Canvas do //画 cell 的边框
  22.   begin
  23.     Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
  24.     MoveTo(Rect.Left, Rect.Bottom); //画笔定位
  25.     LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
  26.     Pen.Color := $0000ff00; //定义画笔颜色(绿色)
  27.     MoveTo(Rect.Right, Rect.Top); //画笔定位
  28.     LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线
  29.   end;
  30. end;
复制代码


结果如图所示
11.jpg


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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-2-5 23:36:20 | 显示全部楼层
支持了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 08:44:46 | 显示全部楼层
学习学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-6 10:54:37 | 显示全部楼层
支持学习了,~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-6 18:16:12 | 显示全部楼层
你好,我这边第一步的时候提示:
[Fatal Error] ZParseSql.dpk(32): Required package 'ZCore' not found
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-22 14:58:49 | 显示全部楼层
谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-2 23:24:58 | 显示全部楼层
楼主未提供文件下载,我在群里找了好久才找到,
本想上传至此,可惜这里不支持!例子很不错!赞扬一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-2 23:43:51 | 显示全部楼层
找到了,下面这个地方,有下载地址链接!!!
https://www.amingstudio.com/delphi/225.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-8 09:27:20 | 显示全部楼层
地址呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-12 20:30:28 | 显示全部楼层
下载了zeosdbo-7.2.6.1-stable组件,安装后也可以用,但是会报 zdbc.inc 找不到。。。求解,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-21 15:34:00 | 显示全部楼层
耍不了,求助一下咯。按照步骤,第一步就搞不定
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-16 16:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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