今天做了一个程序,是关于delphi连接sqlite的,sqlite里面的字段设置都是用nvarchar类型的
但是如果结合三方控件,连接成功sqlite的时候,在delphi界面上显示却是乱码,我是在formcreat事件中写的
  cn_SQLITE.Close;
  cn_SQLITE.Database := '.\chaobiao.db';
  cn_SQLITE.Open;
然后开始进行插入语句,但是如果执行的时候就出现乱码~为什么呢?

解决方案 »

  1.   

    字符集的问题好像是 sqlite好像是utf-8,之前在linux下调试好像也遇到了类似的问题
      

  2.   

    我今天又想到一个办法就是创建一个临时的数据库,表跟原始的一样,表里面的字段都是varchar类型的,我做了个测试,向这个临时的数据库表中插入一个测试数据,这样可以正常显示,但是我先从原始的数据库中取出数据,然后再插入这个临时数据库数据,这样也乱码,我也进行了相应的转化,就是不可以,不知道为什么,今天在网上搜了多半天也搜不到原因
      

  3.   

    SQLITE默认是UTF8编码要看你用什么控件,选择什么样的编码方式。
      

  4.   

    我用的是asqlite三方控件,但是我两种编码方式都选择,就是一点效果都没有,也不知道咋啦,我就感觉邪门了
      

  5.   


    你可以找找管理工具查看你的资料表:
    关于管理工具:
    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比较大。
      

  6.   


    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编辑数据” 的问题。
    期待各位高手的出现。
      

  7.   

    zeoslib 无法支持utf8和unicode,
    这和unidac不是一个档次的东西。
    差的太远了。