Lazarus中文社区

 找回密码
 立即注册(注册审核可向QQ群索取)

QQ登录

只需一步,快速开始

Lazarus IDE and 组件 下载地址版权申明
查看: 6610|回复: 3

Lazarus中修改ODBCconnection实现中文无乱码

[复制链接]

该用户从未签到

发表于 2010-10-28 19:08:55 | 显示全部楼层 |阅读模式
在lazarus的ODBC连接ansi编码的数据库时,中文总是显示乱码,操作起来的时候都要逐个字段的用ansitoutf8函数转化,很麻烦.
TODBCConnection.LoadField  这个函数应该是lazarus读odbc数据的根儿了,能不能在这里加入编码转换的代码,从而一劳永逸的完成中文问题呢?
case FieldDef.DataType of
{$IF (FPC_VERSION>=2) AND (FPC_RELEASE>=1)}
    ftGuid,ftWideString,ftFixedWideChar,
{$ENDIF}
    ftFixedChar,ftString: // are mapped to a TStringField (including TGuidField, TWideStringField)
    begin
      Res:=SQLGetData(ODBCCursor.FSTMTHandle, FieldDef.Index+1, SQL_C_CHAR, buffer, FieldDef.Size, @StrLenOrInd);
      //=========================添加代码=============
      这段代码写不好,是错误的.大侠们研究研究
      tempstr:=ansitoutf8(strpas(buffer));
      buffer:=tempstr;
      strcopy(buffer,pchar(tempstr));


      //==========================结束处理===============
      end;
    ftSmallint:           // mapped to TSmallintField                       
============================================================
可是我总也写不好这段代码,有高手可以吗?                    

本帖被以下淘专辑推荐:

回复

使用道具 举报

该用户从未签到

发表于 2010-10-28 19:25:54 | 显示全部楼层
lazarus是用utf8格式,连接数据库时,数据库中的数据如果存储为utf8格式则显示正常.另一种解决办法,可写一个小工具,把原数据库中的数据转存为utf8数据再连接,显示出来就不会乱码了,出错乱码只是格式不统一造成的,个人认为没有必要去更改组件,应该从编码入手,lazarus已经做得很优秀了,并不是别人的组件有问题,我们遇到问题就去修改原生的组件.
回复 支持 反对

使用道具 举报

该用户从未签到

 楼主| 发表于 2010-10-28 19:37:13 | 显示全部楼层
可是有的时候我们并不能去修改数据库的编码啊,像MSSQL这样的数据库.另外如果这个数据库有好几种程序都在使用呢?如果改了数据库编码,其他程序有可能就出问题了. 我觉得如果lazarus在ODBC之间在出入一个编码处理层就好了.只设置一两个属性就可以把上层一系列的编码转换操作都省略掉不是更好吗?
回复 支持 反对

使用道具 举报

该用户从未签到

发表于 2010-10-30 22:07:52 | 显示全部楼层
改得好。lazarus数据库有些小BUG,正在修改中。
回复 支持 反对

使用道具 举报

*滑块验证:

本版积分规则

QQ|手机版|小黑屋|Lazarus中国|Lazarus中文社区 ( 鄂ICP备16006501号-1 )

GMT+8, 2025-5-2 07:18 , Processed in 0.031140 second(s), 11 queries , Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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