Bor*_*lov 5 database sql-server delphi remobjects
请求在应用程序中更改注释字段最大大小.之前它已设置为varchar(500),因此在阅读文档后,我决定将字段的数据类型从varchar(500)更改为varchar(max).数据库接受的更改没有任何问题(使用Microsoft SQL Server Management Studio 2005和Microsoft SQL Server Management Studio 2008进行数据库管理).然后我继续改变软件.软件是用Delphi编写的,用RemObjects与数据库进行通信.所以我更改了服务器的TDASchema,它将我的新varchar(max)字段映射为String(65536)数据类型(让我有点担心这样一个明确的静态大小,但我继续).然后我检索了我的TDAMemDataTable对象的DataTable Schema,它更新了所有字段.
我启动了应用程序并决定查看我的数据库是否接受对此特定更改字段的更改.我已经编辑了其中一条记录并单击了按钮以将DataSet与服务器同步并获得了这样的失败消息:
数据类型varchar(max)和text在等于运算符中不兼容
我将其解释为我的服务器对象(使用RemObjects对象映射数据库字段的对象)已将字段数据类型映射到RemObjects中的错误数据类型.
怎么解决这个问题?有哪些替代方案?
PS在此版本中,从RemObjects构建.1267日志,它清楚地表明:
修复:DataSnap:无法将更新发布到MSSQL 2005 VARCHAR(MAX)
我正在使用构建版本.1067.不知道更新是否能解决问题
PPS更新到最新版本的RemObjects后,问题仍然存在.
小智 0
当尝试使用相等运算符(通常在 sql 的子句中,但也可能在其他地方)比较 varchar(n) 和文本时,通常会出现此错误消息where
。MSDN上有一篇文章涵盖了可能与此相关的几点。
当您将数据存储到 VARCHAR(N) 列时,值的物理存储方式相同。但是,当您将其存储到 VARCHAR(MAX) 列时,在屏幕后面,数据将作为 TEXT 值进行处理。因此,在处理 VARCHAR(MAX) 值时需要进行一些额外的处理。(仅当大小超过 8000 时)
您提到 TDASchema 已将您的新字段映射为 String(65536),虽然以前从未使用过 RemObjects,但我会假设它自己的代码(或您的代码)中的某个位置正在尝试进行某种比较,因此会出现错误消息。
尝试使用 VARCHAR(8000) 而不是 MAX,看看是否可以解决问题。
如果您可以找到代码中进行相等性检查的位置,则另一个选择是尝试执行cast()
归档时间: |
|
查看次数: |
2113 次 |
最近记录: |