说说Delphi2009对备注型字段的处理方式(解决大家备注字段截断的问题)

delphai 2009-02-16 08:22:02
很多人在用D2009的时候,反应备注字段内容被截断,用纯英文和阿拉伯数字不会,中文和其他语言的混合输入会出现截断内容,但没有乱码。普遍反应是Delphi2009的unicode bug,其实并不是这样。盒子很多用户也反应如此。
我在这个版本测试至少没有所说说的问题(RAD Studio 12.0.3300.19037)

我只用到ADO系列的数据控件,BDE,DBExpress是怎么样就不清楚了。

说说Delphi2009和D2007版本处理。
Delphi2007把备注字段映射的类型为TMemoField,BLOB类型为ftMemo
Delphi2009把备注字段映射的类型为TWideMemoField,BLOB类型为ftWideMemo
(其实Delphi2007也有这个类型字段,只是IDE自动映射不是它而已)

这个时候,如果直接升级老的Delphi2007工程代码到D2009下,备注字段会在保存双字节文字的时候出现不规则的内容截断。
这个时候,你需要删除原来的备注字段设计,从新用IDE映射为TWideMemoField字段,然后就没有问题了。

如果你的工程里面没有用代码对备注字段内容进行特别处理,完全可以用文本编辑器(如UltraEdit之类)的直接对
代码文件(pas)和窗体文件进行类型替换,然后Delphi2009直接打开就全部为D2009默认的备注字段类型了(TWideMemoField)

1.把所有的工程代码和窗体文件(pas,dfm)里面的(TMemoField)替换为(TWideMemoField)
2.把所有窗体文件(dfm)的ftMemo的字符替换为ftWideMemo(也就是修改字段的BLOB属性)

然后用D2009打开编译就没有问题了。
相信这个不是d2009的unicode bug,而是迈向unicode的必要的修改。
其实d2006开始的ado系列的数据控件都已经考虑到unicode准备了,很多属性都有unicode配套的增加了,d2009只是水到渠成而已。

希望大家把在迁移到d2009中遇到的问题多贴出来互相交流,大家都清楚了,也许很多bug就不是bug了。
...全文
193 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
支持中文哦 2009-02-18
  • 打赏
  • 举报
回复
学习,分给我。
IDtoID 2009-02-16
  • 打赏
  • 举报
回复
学习
EhLib.VCL 9.5内部版本9.5.012专业版。 ---------------------------------------------- 该库包含Borland Delphi版本7、9的组件和类。 Developer Studio 2006,Delphi 2007,Embarcadero RAD Studio 2009-XE10.3,Lazarus。 目录 ----------------- 总览 安装库 安装帮助 示范节目 注册和价格 其他资讯 关于作者 从哪儿开始。 ------------------- 从主要的Demo项目开始概述库 。\ Demos \ Bin \ MainDemo.Exe。 (已编译的演示文件在该库的评估版中可用) 如果您使用了库的早期版本,则可以阅读摘要 的新功能和更改中的内容history-eng.html。 此版本库中有关新功能的更多详细信息 可以在文件中找到-关于EhLib 9.5 Eng.doc 要在IDE中安装该库的新版本,请使用安装程序 。\ Installer \ EhLibInstaller.exe 如果安装时有任何问题,请写信给ehlib支持 地址support@ehlib.com 您还可以按照以下明在库IDE中手动安装文件 第2章安装库 安装后,请确保所有已安装组件的可操作性。 为此,请打开IDE,编译并启动一个主要的演示项目。 。\ Demos \ MainDemo \ Project1_XE2.dpr 阅读下一个文件,以获取有关使用库组件的完整明: 。\ Hlp \ ENG \“ EhLib-用户指南.doc” 在文件中阅读有关EhLib for Lazarus的信息-Lazarus \ readme.txt 总览 -------- 该库包含几个组件和对象。 TDBGridEh组件 TDBGridEh提供TDBGrid的所有功能 并添加了一些新功能,如下所示: 允许选择记录,列和矩形区域。 可以对应于多个/所有列的特殊标题。 能够显示总和/计数/其他字段值的页脚。 自动调整列大小以将网格宽度设置为等于客户端宽度。 能够更改行和标题的高度。 允许自动中断单行长标题和数据行 到多行。 标题可以充当按钮,并可以选择显示排序标记。 自动排序标记。 能够用省略号截断长文本。 查找列表可以显示几个字段。 在查找字段中进行增量搜索。 冻结的列。 DateTime选择器支持TDateField和TDateTimeField。 允许根据字段值显示TImageList中的位图。 允许隐藏和跟踪水平或垂直滚动​​条。 允许隐藏列。 允许显示冻结,页脚和数据行的3D框架。 允许绘制备忘字段。 多行就地编辑器。 比例滚动与数据集的排序无关。 自动显示布尔字段的复选框。允许显示 其他类字段的复选框。 具有保存和还原布局的程序(可见列,列 注册表或ini文件中的顺序,列宽,排序标记,行高)。 允许显示提示(工具提示)以显示单元格中不适合的文本。 允许将数据导出为Text,Csv,HTML,RTF,XLS和内部格式。 允许从文本和内部格式导入数据。 可以对各种数据集中的数据进行排序。 可以过滤各种数据集中的数据。 当DBGridEh连接到TMemTable类的数据集时,它允许: 在不移动活动记录的情况下查看所有数据。 显示TMemTable记录的树结构。 在SubTitle过滤器的下拉列表中自动形成值列表。 根据所选库伦创建分组记录。 TDBVertGridEh组件 在“垂直方向”中显示数据集中的一条记录的组件。 有一个特殊的列来显示字段标题 可以像DBGridEh中一样自定义就地编辑器和单元格数据。 TDBLookupComboboxEh组件 提供TDBLookupCombobox的所有功能并添加 几个新功能如下: 可以有平面样式。 允许只将值分配给KeyValue属性 显示文本属性。 允许将值键入(分配)到数据列表中未包含的Text属性 (样式= csDropDownEh)。 允许将KeyValue和Text保持为互不影响的值。 当KeyField,ListField,ListSource,DataField和DataSource生效 属性为空。 下拉列表可以: 显示标题 有上浆力, 自动将宽度设置为列表字段DisplayWidth之和(宽度= -1), 用户按下按键时自动掉线。 编辑按钮可以: 显示下拉,省略号或位图图像。 有指定的宽度。 还有其他事件:OnKeyValueChanged,OnButtonClick。 TDBSumList组件 此组件用于总计一个记录中的记录的总数和数量。 TDataSet具有动态更改。组件保留TDBSum的列表 对象,其中包含组操作的类(goSum或goCount) 和名称总和字段(无需goCount字段名称)。 TPrintDBGridEh组件 TPrintDBGridEh提供用于预览和预览的属性和例程。 具有以下功能的TDBGridEh组件的打印: 能够垂直扩展行,直到打印所有文本。 缩放网格以使其适合页面宽度的能力。 能够打印/预览网格标题。 能够打印/预览页面标题和页面页脚 指定当前页面,当前日期,当前时间和/或静态的宏 文本。 自动打印/预览TDBGridEh的选定区域 不为空。 能够在网格之前和之后打印/预览富文本。 TPreviewBox组件 TPreviewBox使您可以创建可自定义的运行时预览。 TPrinterPreview对象 TPrinterPreview允许您将可打印数据记录在缓冲区中以进行跟踪 将它们输出到屏幕上并发送到打印机。TPrinterPreview具有所有功能,并且 属性与TPrinter对象中的属性相同。您可以类似地使用TPrinterPreview对象 TPrinter的功能,除了一些细节。在TPrinter Printer.Canvas.Handle和 Printer.Handle相同,但在TPrinterPreview中PrinterPreview.Canvas.Handle 表示图元文件,其中的数据和PrinterPreview.Handle的内容相同 代表Printer.Handle。这意味着您必须使用 用于绘制操作的PrinterPreview.Canvas.Handle(DrawText,DrawTexteEx等) 并在返回有关以下信息的函数中使用PrinterPreview.Handle 打印机功能(GetDeviceCaps等)。全局功能PrinterPreview 返回默认的PrinterPreview对象,并以默认预览形式显示数据。 TDBEditEh组件 表示可以显示和编辑字段的单行或多行编辑控件 在数据集中或可以用作非数据感知的编辑控件。 TDBDateTimeEditEh组件 表示可以显示和编辑的单行日期或时间编辑控件 数据集中的日期时间字段,或可用作非数据感知的编辑控件。 TDBComboBoxEh组件 表示结合了编辑框的单行或多行编辑控件 带有可滚动列表,并且可以显示和编辑数据集中的字段,或者可以 用作非数据感知组合编辑控件。 TDBNumberEditEh组件 表示可以显示和编辑数字的单行数字编辑控件 数据集中的字段或可以用作非数据感知的编辑控件。 TPropStorageEh,TIniPropStorageManEh,TRegPropStorageManEh组件 组件实现了在设置中存储组件属性的技术 存储,如ini文件,注册表等。 TMemTableEh组件 数据集,将数据保存在内存中。它可能考虑为 记录。 此外,它: 支持一个特殊的接口,该接口允许DBGridEh组件查看所有 数据而不移动活动记录。 允许从TDataDriverEh对象(DataDriver属性)获取数据。 允许卸载更改回DataDriver中,可操作或推迟(在 CachedUpdates属性的相关性)。 允许在客户端上创建主/明细关系(过滤记录) 或在外部源上(更新参数[Params]并需要数据 从DataDriver)。 允许一次(无动态支持)排序数据,包括 计算和查找字段。 允许在设计时创建和填充数据,并将数据保存在的dfm文件中 形成。 允许以树的方式进行记录。每条记录可以有一条记录 元素分支和本身是其他父母记录的元素。 组件TDBGridEh支持显示这些组件的树结构 记录。 允许连接到其他TMemTableEh的内部阵列(通过 ExternalMemData属性)并使用其数据:排序,过滤,编辑。 具有用于在列表的一列中请求所有唯一值列表的接口 记录数组,忽略数据集的本地过滤器。TDBGridEh使用此 属性,用于自动填充字幕的DropDownBox中的列表 过滤单元。 TDataDriverEh组件 执行两项任务: 将数据传送到TMemTableEh。 处理TMemTableEh的更改记录(将它们记录在其他数据集中, 或调用事件以处理程序中的更改)。 TSQLDataDriverEh 具有四个TSQLCommandEh类的对象的DataDriver:SelectCommand, DeleteCommand,InsertCommand,UpdateCommand,GetrecCommand。 TSQLDataDriverEh无法将查询传输到服务器,但会调用全局 (对于应用程序)执行SQL必须编写的事件 服务器上的表达式。 TBDEDataDriverEh,TIBXDataDriverEh,TDBXDataDriverEh和TADODataDriverEh组件。 这些是SQLDataDrivers,可以使用以下命令将查询传递到服务器 数据访问的相应驱动程序。 -------------------- 2.安装库 -------------------- -------------------- 2.1自动安装库 -------------------- 从“安装程序”文件夹中运行EhLibInstaller.exe程序以在以下位置安装EhLib Delphi / C ++ Builder IDE。该程序创建文件夹以保持EhLib二进制 和其他重新整理的文件,将重新整理的文件复制到创建的文件夹, 编译程序包,在IDE中注册程序包并编写重新格式化的路径 在注册表中。 如果您具有可执行的安装程序(例如,EhLibSetupD7Eval.exe) 那么您只需要运行程序并遵循安装过程即可。自动设置 将所有单元写入必要的目录,在IDE中安装软件包和帮助文件。 -------------------- 2.2手动安装库 ------------------- 按照以下明从EhLib归档文件安装文件: - 2.2.1。对于RAD Studio XE2(Delphi)或更高版本: -------------------
2.5主要变动: 1.重要改进:新版本中Delphi下的VCL控件已经比较完善,封装良好,与Delphi无缝连接,改变了旧版中需要将Dataset中的数据复制到报表引擎中的实现方式,通过模拟ADO接口的方式直接支持BDE/ClientDataset/等非ADO方式的Dataset,不需要考虑太多的COM方面的因素,强烈建议Delphi的开发者直接使用该VCL控件。 使用VCL控件编译的程序发布时,将AcReport.dll和您的EXE放在同一个文件夹下一起发布即可,不需要运行RegSvr32来注册控件,VCL中的代码会自动注册该控件。 2.完善文本控制方式(在设计器界面上增加了此项菜单): 1).当文本控制设置为自动适应单元格(自动缩放字体)时,选择上对齐方式时,也能自动换行。 2)当文本控制设置为截断字符时,支持自动换行,保持单元格的高度不变,在某些特殊应用中,不管文本如何变化,可以保持表格的形状不变。 3.增加了OnSaveReport事件,当用户在设计器中点击“保存”按扭时,会触发此事件,程序可以响应此事件执行自定义保存,例如可以将报表保存到数据库中,或者返回一个信息给设计器用户。 4.直接支持ADO.net中的Dataset和DataTable对象,不需要再通过CustDataBuiler对象来转换,大大提高了在.net下的运行速度。(需要引用 AcNetUtils.dll,具体使用方法请参考Demo) 代码示例: //Dataset: //2.5以前的版本需要将Ado.net下datatable在AC中copy一个复本,速度比较慢 // AcReport.AcUtils.CopyDatasetToAcRptEngine(mDataset, mac, false); //新版本的处理方式,通过ADO-ADO.net适配器的方式直接访问 DbAdapter.FillDatasetToAC(mDataset, mac); //DataTable: mDataset.Tables["zlemployee"].TableName = "雇员档案"; AcReport.AcUtils.CopyTableToAcRptEngine(mDataset.Tables["雇员档案"], mac, false); //重新加入一个表到AcReport (旧版本方式) //在2.5以后的版本中,可以用如下的方式将ADO.net的DataTable对象通过AcRecordsetAdapter转换为ADO接口的方式直接加入到AcEngine, //这样做就不需要在AC中复制一个复本,大大提高的速度。 AcRecordsetAdapter RecordAdp = new AcRecordsetAdapter(mDataset.Tables["雇员档案"]); mac.AddNetAdoData("雇员档案", RecordAdp); // 以上两行也可以直接调用 AcNetUtils 类库里提供的现成方法(效果是一样的): AcNetUtils.DbAdapter.FillDataTableToAC(mDataset.Tables["雇员档案"], mac); 5.可拖动对象设计功能增强 6.支持 条码 Code128 Auto ACReport简介 Anycell Report(简称AC Report)是一款中国式报表组件,是国内最早的基于表格,支持图文混排、公式和脚本的中国式报表工具之一。就如Anycell Report的名称那样,灵活强大的表格功能一直是AC Report区别于其它软件或控件最显著的特征之一,AC Report 表格取消了传统表格概念中“列”的概念,每一行上的单元格数量可以不等,且可以自由活动,勿须上下对齐,在制作复杂的中国式报表时可以避免很多不必要的合并拆分操作,制作表格更加方便和随心所欲,并且省时省力。AC Report单元格支持多种丰富的形态,例如格式化文本、图片、图表、条码、OLE容器等。 AC Report的一些基本特点: 1.独具特色的表格,风格与Word表格相似,但可以做出比Word或Excel更灵活的表格来。 2. 功能全面、专业的中国式报表设计器,中国用户更易于学习和接受。 3.支持多种单元格样式,可以打印图像、图表(直方图、折线图等)、Rich文本、 条形码、中式财务帐薄、支持在报表中嵌入Word、Excel文档等。 4. 强大的计算和合计功能。内置表达式解析系统和函数库。 5. 可扩充性,可以在应用程序中给报表引擎扩充函数库、报表样式和单元格样式。 6.支持多种报表样式,如清单式、分组、交叉表、以及子报表
英文版 以下是我从网上所的相关介绍 内容简介 本书以X86系列微机为背景,从简单的Hello程序开始,系统而详细地阐述了X86微机汇编语言编程的行种基础知识和编程技巧,内容涉及到数据表示、存储器管理、各种数据类、过程、与汇编语言相关的体系结构、控制结构、文件、宏指令、位处理指令、字符串指令、MMX指令、类和对象,以及混合语言编程等,尤其是在高级汇编语言(HLA)方面,该书给予了细致深入的讲解。对于有意学习X86汇编语言编程的程序员来,这是一本难得的好书。 本书的作者Randall Hyde拥有十多年的汇编语言教学经验,并且开发了多个商用软件,具有实际的汇编语言开发经验。该书的英文网络版受到全球成千上万的网站和高级程序员的高度评价,被大家公推为高级汇编语言编程的经典之作。该书的英文正版推出不久,即有很多人在“亚马逊”网站上为其作评,而且几乎所有的人都给予5星的高分,可见其内容之好 目录 第1章 进入汇编语言的世界 1.1 本章概述 1.2 HLA程序的结构 1.3 运行第一个HLA程序 1.4 基本的HLA数据声明 1.5 布尔值 1.6 字符值 1.7 Intel80x86处理器简介 1.8 基本的机器指令 1.9 基本的HLA控制结构 1.10 HLA标准库入门 1.11 关于TRY..ENDTRY的其他细节 1.12 高级汇编语言与底级汇编语言比较 1.13 更多信息 第2章 数据表示 2.1 本章概述 2.2 数字系统 2.3 十六进制数字系统 2.4 数据结构 2.5 二进制数与十六进制数的算术运算 2.6 关于数字及其表示法 2.7 位逻辑运算 2.8 二进制数和位串的逻辑运算 2.9 有符号数和无符号数 2.10 符号扩展、零扩展、压缩和饱和 2.11 侈位和缩环移位 2.12 位域和压缩数据 2.13 浮点运算简介 2.14 BCD数据表示 2.15 字符 2.16 Unicode字符集 2.17 更多信息 第3章 存储器的访问与结构 3.1 本章概述 3.2 80x86的寻址方式 3.3 运行时存储器的结构 3.4 HLA如何为变量分配内存 3.5 HLA对数据对齐的支持 3.6 地址表达式 3.7 类强制转换 3.8 寄存器类强制转换 3.9 栈段与PUSH及POP指令 3.10 动态内存分配和堆段 3.11 INC和DEC指令 3.12 获取存储器对象的地址 3.13 更多信息 第4章 常量、变量与数据类 4.1 本章概述 4.2 一些额外的指令:INTMUL、BOUND、INTO 4.3 TBYTE数据类 4.4 HLA常量和数值声明 4.5 HLA和TYPE段 4.6 ENUM和HLA枚举数据类 4.7 指针数据类 4.8 HLA标准库CHARS.HHF模 4.9 复合数据类 4.10 字符串 4.11 HLA字符串 4.12 访问字符中的某个字符 4.13 HLA字符串模块和其他与字符串机关的例程 4.14 存储器内转换 4.15 字符集 4.16 在HLA中实现字符集 4.17 HLA字符集常量和字符集表达工 4.18 HLA HLL布尔表达式中的IN操作符 4.19 HLA标准库对字符集的支持 4.20 在HLA程序中使用字符集 4.21 数组 4.22 在HLA程序中声明数组 4.23 HLA数组常量 4.24 访问一维数组的元素 4.25 多维数组 4.26 多维数组的存储空间分配 4.27 汇编语言中多维数组元素的访问 4.28 大数组和MASM(只适用于Windows程序员) 4.29 记录 4.30 记录常量 4.31 记录数组 4.32 数组/记录作为记录字段 4.33 控制记录中的字面偏移量 4.34 对齐记录中的字段 4.35 记录指针 4.36 联合 4.37 匿名联合 4.38 变量类 4.39 联合常量 4.40 命名空间 4.41 汇编语言中的动态数组 4.42 HLA标准库数组支持 4.43 更多信息 第5章 过程与单元 5.1 本章概述 5.2 过程 5.3 机器状态的保存 5.4 过程的提前返回 5.5 局部变量 5.6 其他局部和全局符号类 5.7 参数 5.8 函数和函数的结果 5.9 递归 5.10 过程的向前引用 5.11 过程的底层实现与CALL指令 5.12 过程与堆栈 5.13 活动记录 5.14 标准入口序列 5.15 标准出口序列 5.16 自动(局部)变量的底层实现 5.17 参数的度层实现 5.18 过程指针 5.19 过程参数 5.20 无类的引用参数 5.21 管理大程序 5.22 #INCLUDE伪指令 5.23 忽略重复的#INCLUDE操作 5.24 单元与EXTERNAL伪指令 5.25 命名空间的污染 5.26 更多信息 第6章 算术运算 6.1 本章概述 6.2 80x86的整数运算指令 6.3 算术表达式 6.4 逻辑(布尔)表达式 6.5 机器特征与运算技巧 6.6 浮点运算 6.7 浮点表达式到汇编语言的转换 6.8 HLA标准库对浮点算术运算的支持 6.9 算术运算小结 第7章 低级控制结构 7.1 本章概述 7.2 低级控制结构 7.3 语句标号 7.4 无条件控制转移(JMP) 7.5 条件跳转指令 7.6 “中级”控制结构:JT和JF 7.7 使用汇编语言实现通用控制结构 7.8 选择 7.9 状态机和间接跳转 7.10 “面条式”代码 7.11 循环 7.12 性能提高 7.13 HLA中的混合控制结构 7.14 更多信息 第8章 文件 8.1 本章概述 8.2 文件组织 8.3 顺序文件 8.4 随机访问文件 8.5 ISAM文件 8.6 截断文件 8.7 更多信息 第9章 高级算术运算 9.1 本章概述 9.2 多精度操作 9.3 对不同长度的操作数进行操作 9.4 十进制算术运算 9.5 表 9.6 更多信息 第10章 宏与HLA编译时语言 10.1 本章概述 10.2 编译时语言 10.3 #PRINT和#ERROR语句 10.4 编译时常量和变量 10.5 编译时表达式和操作符 10.6 编译时函数 10.7 条件编译(编译时决定) 10.8 重复编译(编译时循环) 10.9 宏(编译时过程) 10.10 编写编译时“程序” 10.11 在不同的源文件中使用宏 10.12 更多信息 第11章 位操作 11.1 本章概述 11.2 位数据 11.3 位操作指令 11.4 作为位累加器的进位标志位 11.5 位串的压缩与解压缩 11.6 接合位组与分布位串 11.7 压缩的位串数组 11.8 搜索位 11.9 位的计数 11.10 倒置位串 11.11 合并位串 11.12 提取位串 11.13 搜索位模式 11.14 HLA标准库的位模块 11.15 更多信息 第12章 字符串指令 12.1 本章概述 12.2 80x86字符串指令 12.3 80x86字符串指令的性能 12.4 更多信息 第13章 MMX指令集 13.1 本章概述 13.2 判断CPU是否支持MMX指令集 13.3 MMX编程环境 13.4 设计MMX指令集的目的 13.5 饱和算未能和回转模式 13.6 MMX指令操作数 13.7 MMX技术指令 第14章 类与对象 14.1 本章概述 14.2 通用原则 14.3 HLA中的类 14.4 对象 14.5 继承 14.6 重载 14.7 虚拟方法与静态过程 14.8 编写类方法和过程 14.9 对象实现 14.10 构造函数和对象初始化 14.11 析构函数 14.12 HLA的“_initialize_”和“_finalize_”字符串 14.13 抽像方法 14.14 运行时类信息(RTTI) 14.15 调用基类的方法 14.16 更多信息 第15章 混合语言编程 15.1 本章概述 15.2 在同一程序中混合使用HLA和MASM/Gas代码 15.3 使用Delphi/Kylix和HLA编程 15.4 使用C/C++和HLA编程 15.5 更多信息 附录A ASCII字符集 附录B 80x86指令集

828

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧