今天做了一个程序,是关于delphi连接sqlite的,sqlite里面的字段设置都是用nvarchar类型的
但是如果结合三方控件,连接成功sqlite的时候,在delphi界面上显示却是乱码,我是在formcreat事件中写的
cn_SQLITE.Close;
cn_SQLITE.Database := '.\chaobiao.db';
cn_SQLITE.Open;
然后开始进行插入语句,但是如果执行的时候就出现乱码~为什么呢?
但是如果结合三方控件,连接成功sqlite的时候,在delphi界面上显示却是乱码,我是在formcreat事件中写的
cn_SQLITE.Close;
cn_SQLITE.Database := '.\chaobiao.db';
cn_SQLITE.Open;
然后开始进行插入语句,但是如果执行的时候就出现乱码~为什么呢?
你可以找找管理工具查看你的资料表:
关于管理工具:
SQLITE ADMINISTRATOR是以ANSI处理资料的
SQLITE BrowER是以UTF8处理的。另外橙子写的一个管理工具同时支持两种编码。
ASQLITE如是UTF8编码方式时,插入数据会是乱码。但直接以控件上的数据插入却不会乱码,例
query1.sql.text:='insert into test (name) values ('+quotedstr(edit1.text)+')';所以使用UTF8就不能直接使用GRID编辑数据。使用ANSI有另一个BUG,中文模糊查询时会出错 例:select * from user where name like '陈%'
结果出来,不是姓陈的也会出来,
使用3.2.1版本的SQLITE3.DLL可以解决这个中文查询问题。ASQLITE有一BUG,偶尔不能在GRID中保存数据。使用ZEROLIB比较不错,但生成的EXE比较大。
kernel001 分析的非常好!
我用的sqlite+zeoslib控件 来读取utf8 编码的数据库,原因是ansi对模糊查询 like 支持的不好。带来的问题就是直接使用GRID显示和编辑数据总是乱码。code=Delphi(Pascal)] zqry1.SQL.Text:=Utf8encode('select * from area where area like ''%人''');[[/code]只有grid里出错,其他都可以用utf8encode utf8decode 显式转换。因为其他控件里单字段单记录的,而grid控件确实多行多记录的,如果能在grid控件里对显示和保存每一字段值都作下类似的转换,我想应该可以实现吧。sqlite expert professional 和橙子的工具 都同时支持utf8 和ansi。
既然 sqlite expert professional 能显示出来 UTF8 的数据表。不知道它里面用的是不是dbgrid 反正是个表格形式的。我想dbgrid通过类似于 utf8encode utf8decode 的方式也可以实现吧。所以肯定有办法解决“使用UTF8就不能直接使用GRID编辑数据” 的问题。
期待各位高手的出现。
这和unidac不是一个档次的东西。
差的太远了。