小编Co *_*per的帖子

从数据库读取NVARCHAR后,TClientDataset Widestring字段的大小翻倍

我正在将我们的一个Delphi 7项目转换为Delphi X3,因为我们想支持Unicode.我们使用MS SQL Server 2008/R2作为我们的数据库服务器.将一些数据库字段从VARCHAR更改为NVARCHAR(以及随附的ClientDatasets中的字段更改为ftWideString)后,随机崩溃开始发生.在调试时我发现了TClientDataset/DbExpress的一些意外行为:

对于NVARCHAR(10)数据库列,我在clientdataset中手动创建一个TWideStringField,并将'Size'属性设置为10.该字段的'DataSize'属性告诉我需要22个字节,这是预期的,因为TWideStringField的编码是UTF-16 ,因此每个字符需要两个字节,并且需要一些空间来存储长度.现在,当我在ClientDataset上调用'CreateDataset'并将数据集写入XML(使用.SaveToFile)时,在XML文件中,该字段被定义为

<FIELD WIDTH="20" fieldtype="string.uni" attrname="TEST"/>

这对我来说还不错.

现在,我没有调用.CreateDataset,而是在TClientDataset上调用.Open,以便通过链接组件获取数据 - > TDatasetProvider-> TSQLDataset(.CommandText =一个简单的select*from table) - > TSQLConnection.当我检查监视列表中字段的属性时,Size仍然是10,Datasize仍然是22.但是保存到XML文件后,该字段定义为

<FIELD WIDTH="40" fieldtype="string.uni" attrname="TEST"/>

..宽度增加了一倍?

最后,如果我在TClientDataset上调用.Open而不事先创建任何fielddefinitions,那么该字段的大小将为20(不正确!)和Datasize 42.保存为XML后,该字段仍被定义为

<FIELD WIDTH="40" fieldtype="string.uni" attrname="TEST"/>

有谁知道这里出了什么问题?

sql-server delphi

12
推荐指数
1
解决办法
1218
查看次数

标签 统计

delphi ×1

sql-server ×1