序言
之前因为电脑存的东西太多了,特别是一些PDF电子书,有很多是重复的,占用我的磁盘空间,因此有了一个想法,编写一个小应用,把文件创建日期,文件名,文件的MD5 hash值,文件的路径等存入到SQLite数据库中,然后之后再添加文件的时候,校验文件MD5来判断是否是重复的,以此进行筛选是否是重复的。这个软件我打算使用Delphi进行编写,之前有想过学习VB,因为Excel中有VBA,不过经过考虑,还是直接使用Delphi了,Delphi可以编写Android应用,后面也可以给自己开发小的Android应用。本次使用的Delphi是Delphi XE6,包含了FireDAC组件,可以很方便的使用SQLite数据库。
创建数据库
创建SQLite数据库的时候,可以选择在内存中创建,也可以在磁盘中创建数据库。在磁盘中创建数据库后,应用关闭后,数据是保存到数据库中的,在内存中创建数据库,应用结束后数据就没了,除非将那块内存dump保存到磁盘中。因此按照我的想法,我是在磁盘中创建数据库。
首先,创建一个VCL Form Application,在这个Form中添加TFDConnection、TFDQuery、TDataSource、TDBGrid组件,TFDConnection用于创建数据库连接,TFDQuery、TDataSource、TDBGrid用来呈现数据。另外还有添加上TFDPhysSQLiteDriverLink和TFDGUIxWaitCursor两个组件,不然容易报错。
代码如下:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, FireDAC.Stan.Intf, FireDAC.Stan.Option,
FireDAC.Stan.Error, FireDAC.UI.Intf, FireDAC.Phys.Intf, FireDAC.Stan.Def,
FireDAC.Stan.Pool, FireDAC.Stan.Async, FireDAC.Phys, FireDAC.Stan.Param,
FireDAC.DatS, FireDAC.DApt.Intf, FireDAC.DApt, Vcl.Grids, Vcl.DBGrids,
Data.DB, FireDAC.Comp.DataSet, FireDAC.Comp.Client, FireDAC.Stan.ExprFuncs,
FireDAC.Phys.SQLite, FireDAC.VCLUI.Wait, FireDAC.Comp.UI;
type
TForm1 = class(TForm)
FDConnection_1: TFDConnection;
FDQuery_1: TFDQuery;
DataSource_1: TDataSource;
DBGrid_1: TDBGrid;
FDPhysSQLiteDriverLink_1: TFDPhysSQLiteDriverLink;
FDGUIxWaitCursor_1: TFDGUIxWaitCursor;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
const
dbPath = 'data.db';
var
sql : string;
begin
{ 数据库连接类型 }
FDConnection_1.DriverName := 'SQLite';
FDConnection_1.Params.Add('DriverID=SQLite');
{ 当数据库文件不存在时,创建这个文件 }
if not FileExists(dbPath) then
begin
FDConnection_1.Params.Add('Database=' + dbPath);
FDConnection_1.Connected := True;
sql := 'CREATE TABLE Files(ID integer PRIMARY KEY, Name string(100), MD5 string(32), DirectoryPath text)';
FDConnection_1.ExecSQL(sql); { 执行SQL语句 }
end
{ 当数据库文件存在时,直接进行连接 }
else
begin
FDConnection_1.Params.Add('Database=' + dbPath);
FDConnection_1.Connected := True;
end;
FDQuery_1.Open('Select * from Files');
FDQuery_1.Connection := FDConnection_1;
DataSource_1.DataSet := FDQuery_1;
{ 展示数据 }
DBGrid_1.DataSource := DataSource_1;
end;
end.
代码编译后运行结果如下:
结语
今天就到此结束了,电脑显示器突然出现亿条横线,我得看看什么情况,感谢阅读。
如有错误,敬请指出,感谢指正! —2020-05-30 22:21:14
最新评论
我想请问下。您这部署后能够上传附件图片吗?我按照您的方式部署后。能运行。但是无法上传附件,图片。
感谢教程,但是我安装后无法上传附件。图片什么的都上传不了。您这可以吗
你这个能够添加附件图片吗?我怎么无法上传图片附件呢。。
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐