您的问题似乎暗示SET NO_BROWSETABLE ON
自从更改为更新的 Delphi 版本后才开始。
如果这就是你的意思,我不确定你的观察是否准确,至少我无法重现使用当前 Delphi 版本、XE10 Seattle 和 Delphi 7 编译的应用程序在 15 年关于 NO_BROWSETABLE 的行为上的任何差异。
我有一个在这台机器上运行的 Sql Server 2014 实例,它是 Windows 10 Pro 64 位。如果我编译并运行一个select * from sometable
使用 aTAdoConnection
和 a进行简单操作的最小 Delphi Seattle 项目TAdoQuery
,Sql Server 的 Profiler 会显示 MDac 层发送 a SET NO_BROWSETABLE ON
,就像你一样。但是,如果我在 Delphi 7 中编译并运行完全相同的项目,我会得到与分析器中显示的完全相同的语句 - 如果应用程序是在 D7 或西雅图编译的,则没有任何区别。
这是将光标位置设置为clUseClient
。如果SET NO_BROWSETABLE ON
我使用clUseServer
. 它也不会出现在使用 a 的最小 DBExpress 应用程序中TSqlConnection
,TSqlQuery
因此也可能使用服务器端游标。
有关以下信息的更多信息,请参见此处NO_BROWSETABLE
:
https://support.microsoft.com/en-us/kb/885146
我正在使用Microsoft OLE DB Provider for Sql Server
. 尽管据说这已被 MS 弃用,但与他们的 ODBC 提供商或“本机客户端”提供商相比,我遇到的麻烦总是少得多。
您可能还想看看这个 SO q:
在 VB6 中生成不需要的 NO_BROWSETABLE / 设置 fmtonly 查询的奇怪 ADO 行为
顺便说一句,你提到“xe9”。你的意思是 XE8 或 Delphi Seattle 还是什么?