【问题标题】:Exception when 'SELECT * FROM ....' with Delphi XE-8 and FIREBIRD local database使用 Delphi XE-8 和 FIREBIRD 本地数据库时出现“SELECT * FROM ....”异常
【发布时间】:2016-03-20 11:54:54
【问题描述】:

它引发一个异常:每次 Delphi XE-8 程序执行这段代码:

procedure TForm_hora_edit_.SpdBtn_KOMISII_ZASEDANIA_Click(Sender: TObject);
begin
  Data_Module.IBQuery_KOMISII_ZASEDANIA_.Active := False;
  Data_Module.IBQuery_KOMISII_ZASEDANIA_.SQL.Text := 'SELECT * FROM KOMISII_ZASEDANIA ORDER BY ZASED_DT DESC';
  Data_Module.IBQuery_KOMISII_ZASEDANIA_.Active := True;  
end;

在这一行引发了异常:

Data_Module.IBQuery_KOMISII_ZASEDANIA_.Active := True;

异常信息:

目标多字节中没有 Unicode 字符的映射 代码页

我确实使用免费软件创建了表 KOMISII_ZASEDANIA:用于 IB/FB 的 SQL Manager Lite

数据库的字符集是:UTF8;该表包含来自西里尔字母的字符。

我需要避免上述异常。

【问题讨论】:

  • 显示你用来连接的 TDataSet 组件的属性。很可能你忘了设置连接字符集
  • ibase.ru/devinfo/ibx.htm 找到“lc_type”,并在 sql.ru 上查看论坛
  • 我使用的组件是:TIBQuery,它不包含任何属性连接字符集,(和charset没有什么相似之处)。
  • 尝试通过ru.wikipedia.org/wiki/IBExpert检查您的数据库//在该IDE中注册数据库后-尝试三个实验:关闭数据库,在注册属性中将Connection Charset设置为{1:NONE; 2:WIN1251; 3:UTF-8 },打开数据库,尝试查询是否会显示数据或失败。另外我建议你检查数据库和表是 UTF-8,而不是 UNICODE_FSS
  • TIBQuery 不会浮在空中 - 你将它连接到一些数据库组件,该组件应该具有正确的连接参数,包括连接字符集

标签: string delphi utf-8 firebird delphi-xe8


【解决方案1】:

显示的错误不是 Firebird 的错误,它可能是 Delphi 在接收到字段的字节并以 UTF-8 解释它们时的错误。根据 cmets 和问题描述,看起来该字段可能是CHARACTER SET NONE,而当前内容可能是WIN1251(或其他单字节编码),而不是UTF-8;具有字符集NONE 意味着 Firebird 无法将其转换为目标连接编码并按原样发送,留给客户端应用程序进行解释。

确保该字段具有NONEOCTETS 以外的字符集,并根据需要转换当前内容。

【讨论】:

  • ...或者 IBX 最终失去了与后来的 Firebird 的兼容性
猜你喜欢
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2012-06-17
相关资源
最近更新 更多