是否可以调整TStringField以像Delphi中的TWideStringField一样工作?

时间:2010-03-23 14:07:49

标签: delphi unicode migration dbexpress interbase

我们想在Delphi 2009和Interbase中使用Unicode,并发现要将字符编码从WIN1252切换到UNICODE_FSS或UTF8,我们首先必须在所有数据模块中用TWideStringField替换所有TStringField实例。对于大约60个数据模块,我们不能简单地在一个周末执行此操作。我只能看到两种迁移策略选项:

  • 找到一种解决方法,允许使用现有的TStringField字段,而不会触发'expected:TWideStringField'错误

  • 删除所有持久字段以避免字符串类型冲突

据我所知,持久数据库字段的字段类型是在某种类注册表中注册的。我们是否可以使用它来使Delphi相信TStringField适用于具有UNICODE_FSS或UTF8编码的Interbase字符列?

或者我们可以使用在两种情况下都使用TStringField的商业dbExpress驱动程序吗?

另请参阅我的相关问题:Delphi dbExpress and Interbase: UTF8 migration steps and risks?


更新:在所有DFM和PAS文件中用TWideStringField替换TStringField的所有出现后,我们发现现在还需要将TWideStringFields的'Size'属性值乘以4(如果我们使用UTF8)在大约100个地方。因此,我开始奖励一种减少手动工作来修复DFM的方法

2 个答案:

答案 0 :(得分:2)

使用TStringField进行unicode字符会让你遇到麻烦,它会有$ 00,基本上用例如dbExpress驱动程序结束字符串,因为它们接受P(Ansi)字符串。使用TWideStringField在dbExpress中使用PWideChar,因此驱动程序期望真正的unicode代码点。

恐怕没有简单的出路。

答案 1 :(得分:0)

Sergey A Kryukov,'Unicode控制:VCL能做什么?',德尔福杂志,116(2005年4月),p。 33-43 (Source code) 德尔福杂志

Unfortunately, the text of the original article is not freely available, but ask me if you have questions.