gpt4 book ai didi

sql-server - 使用 RemObjects 的 delphi 中的 SQL Server varchar(MAX) 数据类型

转载 作者:太空狗 更新时间:2023-10-30 01:52:50 24 4
gpt4 key购买 nike

收到更改应用程序中评论字段最大大小的请求。之前将其设置为 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 对象检索了数据表架构,它更新了所有字段。

我启动了应用程序并决定查看我的数据库是否会接受对这个特定更改字段的更改。我编辑了其中一条记录并单击按钮将 DataSet 与服务器同步并收到这样的失败消息:

The data types varchar(max) and text are incompatible in the equal to operator

我将其解释为我的服务器对象(将数据库字段映射到 RemObjects 对象的对象)已将字段数据类型映射到 RemObjects 中的错误数据类型。

如何解决?有哪些替代方案?

附言在此版本中,来自 RemObjects 的 Build .1267 日志明确指出:

fixed: DataSnap: fails to post updates to MSSQL 2005 VARCHAR(MAX)

我使用的是构建版本 .1067。想知道更新是否会解决问题

P.P.S.更新到最新版本的 RemObjects 后,问题依然存在。

最佳答案

此错误消息通常在尝试使用相等运算符比较 varchar(n) 和文本时发生(通常在 sql 的 where 子句中,但可能在其他地方)。有一篇关于 MSDN 的文章其中涵盖了可能与此相关的几点。

when you store data to a VARCHAR(N) column, the values are physically stored in the same way. But when you store it to a VARCHAR(MAX) column, behind the screen the data is handled as a TEXT value. So there is some additional processing needed when dealing with a VARCHAR(MAX) value. (only if the size exceeds 8000)

您提到 TDASchema 已将您的新字段映射为 String(65536),尽管之前从未使用过 RemObjects,但我会假设它自己的代码(或您的代码)中的某处正在尝试进行某种比较,因此错误信息。

尝试使用 VARCHAR(8000) 而不是 MAX,看看是否能解决问题。

如果您能在代码中的哪个位置找到进行此相等性检查的另一个选项,那就是尝试执行 cast()

关于sql-server - 使用 RemObjects 的 delphi 中的 SQL Server varchar(MAX) 数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19724898/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com