delphi FireDAC 下的 Sqlite [9] - 关于排序

2022-11-05 14:33:08 作者:admin

本文整理自网络,侵删。

 SQLite 内部是按二进制排序, 可以支持 ANSI; FrieDAC 通过 TFDSQLiteCollation 支持了 Unicode 排序, 并可通过其 OnCompare 事件自定义排序.
下面的例子, 测试了这两种排序的不同.
代码:procedure TForm1.FormCreate(Sender: TObject);var  i: Integer;  LCode: Integer;begin  {给 FDSQLiteCollation1 设定参数}  FDSQLiteCollation1.DriverLink := FDPhysSQLiteDriverLink1;//  FDSQLiteCollation1.CollationKind := scCompareString; //这是默认值(Unicode 不区分大小写, 在 Win 下是调用 WinAPI.CompareString); 使用其他选项需要自定义排序规则  FDSQLiteCollation1.LocaleName := 'zh-CN';  FDSQLiteCollation1.Flags := [sfIgnoreCase];  FDSQLiteCollation1.CollationName := 'MyCollation';     //下面所有的调用全要依赖这个名称  FDSQLiteCollation1.Active := True;
  FDConnection1.Params.Add('DriverID=SQLite');//  FDConnection1.Params.Add('OpenMode=CreateUTF8'); //这是默认值, 可选 CreateUTF16(Unicode)
  {建立测试表, 三个字段 str(汉字), code(汉字对应的 Unicode 值), id(添加顺序)}  FDConnection1.ExecSQL('CREATE TABLE MyTable(str string(10), code integer, id integer)');//  FDConnection1.ExecSQL('CREATE TABLE MyTable(str string(10) COLLATE MyCollation, code integer, id integer)'); //用在表设计时
  {添加测试数据数据}  for i := 0 to 99 do  begin    LCode := Random($9FA5-$4E00);    FDConnection1.ExecSQL('insert INTO MyTable(str, code, id) VALUES(:1, :2, :3)', [WideChar($4E00 + LCode), LCode, i+1]);  end;
  FDQuery1.Open('select * FROM MyTable'); //无排序end;
procedure TForm1.Button1Click(Sender: TObject);begin  FDQuery1.Open('select * FROM MyTable ORDER BY str'); //SQLite 内置排序end;
procedure TForm1.Button2Click(Sender: TObject);begin  FDQuery1.Open('select * FROM MyTable ORDER BY str COLLATE MyCollation'); //FireDAC 默认排序end;
测试效果图:

相关阅读 >>

Delphi鼠标移过放大镜效果

Delphi now 返回当前日期及时间

Delphi程序不受windows日期格式的影响

Delphi timer定时器使用

Delphi注入下载者源代码

Delphi xe6 android拨号函数

Delphi 防止刷新时闪烁的终极解决办法

Delphi下用cdo发送邮箱实例(授权码cdo发送邮箱的解决办法)

Delphi tfilestream 打开模式与共享模式

datasnap 上传/下载大文件(本demo以图传片文件为例)

更多相关阅读请进入《Delphi》频道 >>



在线咨询 拨打电话