使用 Delphi XE-8 和 FIREBIRD 本地数据库时出现“SELECT * FROM ....”异常
Posted
技术标签:
【中文标题】使用 Delphi XE-8 和 FIREBIRD 本地数据库时出现“SELECT * FROM ....”异常【英文标题】:Exception when 'SELECT * FROM ....' with Delphi XE-8 and FIREBIRD local database 【发布时间】: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 不会浮在空中 - 你将它连接到一些数据库组件,该组件应该具有正确的连接参数,包括连接字符集 【参考方案1】:显示的错误不是 Firebird 的错误,它可能是 Delphi 在接收到字段的字节并以 UTF-8 解释它们时的错误。根据 cmets 和问题描述,该字段看起来可能是CHARACTER SET NONE
,而当前内容可能是WIN1251
(或其他单字节编码),而不是UTF-8
;有一个字符集 NONE
意味着 Firebird 无法将其转换为目标连接编码并按原样发送,留给客户端应用程序来解释它。
确保该字段具有NONE
或OCTETS
以外的字符集,并根据需要转换当前内容。
【讨论】:
...或者 IBX 最终失去了与后来的 Firebird 的兼容性以上是关于使用 Delphi XE-8 和 FIREBIRD 本地数据库时出现“SELECT * FROM ....”异常的主要内容,如果未能解决你的问题,请参考以下文章
使用 Delphi 应用程序的 Firebird 错误“未定义用户名和密码”