Lazarus数据库编程手记一

文章讲述了如何在VCL应用中处理ANSI编码导致的乱码问题,介绍了两种方法:一是使用Sqlite3连接和DbGrid显示,二是通过MORMOT从内存表获取数据并转换为UTF8。方法二提供了更灵活的字段定义和缓存管理。
摘要由CSDN通过智能技术生成

方法一,VCL控件: 

后面注释为要设置的属性 

    Sqlite3connection1: Tsqlite3connection;//database:='data.db'
    Sqltransaction1: Tsqltransaction;//.database= Sqlite3connection1
    Sqlquery1: Tsqlquery;.database= Sqlite3connection1

//sql:='select * from table'
    Datasource1: Tdatasource;//dateset:= Sqlquery1 

我的数据库编码为ANSI,显示为乱码,这个方式感觉不方便,若为UTF8这个方法还是很方便的

在dbgrid显示 

Sqlite3connection1.Open;
  Datasource1.DataSet:=SQLQuery1;//若有其它方式显示数据要这句
  Datasource1.DataSet.open;
  dbgrid1.DataSource:=datasource1;

方法二,内存表显示从mormot里取数据

procedure TForm1.Button7click(Sender: TObject);
var
  cds: TBufDataset;
  F: TFieldDef;
  F1: db.Tfield;
  Database: TSQLDatabase;
  gPrope: TSQLDBSQLite3ConnectionProperties;
  rows: ISQLDBRows;
  I: integer;
  s1: RawUTF8;
begin

  cds := TBufDataset.Create(nil);
  cds.Close;
  cds.FieldDefs.Clear;
  cds.FieldDefs.Add('ID', ftinteger);
  cds.FieldDefs.Add('QuanGuoXueJiHao', ftstring, 20);//20为宽度,若为零不显示
  cds.FieldDefs.Add('ShiLingErTongXingMing', ftstring, 12);//12为宽度,若为零不显示


  Database := TSQLDatabase.Create('data.db'); //这里面可以设置缓存大小

  gPrope := TSQLDBSQLite3ConnectionProperties.Create(Database);
  rows := gPrope.ExecuteInlined('select * from Baomingxinxi', True);

  cds.CreateDataSet;

  i := 1;
  while rows.Step() do
  begin
    cds.Append;
    cds.FieldByName('ID').AsInteger := i;
    Inc(i);
    s1 := CP936ToUTF8(rows.ColumnUTF8('QuanGuoXueJiHao'));

    cds.FieldByName('QuanGuoXueJiHao').AsUTF8String := s1;
    TWideStringField(cds.FieldByName('ShiLingErTongXingMing')).Value :=
      CP936ToUTF8(rows.ColumnUTF8('ShiLingErTongXingMing'));
    cds.Post;
  end;
  cds.Open;
  dbgrid1.DataSource.DataSet:=cds;                                        

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值