ado查询对于2000和2008不同的表现

searoom 2012-07-18 09:20:23
我一直以来都用 sql2000的,最近准备升级到 2008,在 adoQuery 查询方面,碰到了一个挺麻烦的问题

一般,我都是用 adoQuery.LockType=ltBatchOptimistic,来确保本地 Post 时不会提交,
同时,由于 adoQuery 在查询时,会自动根据查询的结果判断某个字段是否可写,

比如

select ClientCode,ClientName,'X'+ ClientCode as XClientCode from TClient

三个字段中,XClientCode 是不可更新的

在 2000 下,如果我对这个查询语句改进一下,可以避免此问题
select * from (select top 100000 ClientCode,ClientName,'X'+ ClientCode as XClientCode from TClient) as D

也就是把作为子查询,并且子查询中必须使用 top 标记

但是,换成 2008 数据库后,使用子查询,adoQuery 还是无法更新到类似字段,这对我的系统影响很大,因为我很多地方都是利用 adoQuery.LockType=ltBatchOptimistic 来 adoquery 当做本地数据集使用的,检索时从数据库取出一条数据插入到 adoQuery ,以实现根据需要检索并更新客户端显示数据的目的,因为有些查询比较复杂,也自然会使用到"计算"的字段

很郁闷啊,求助!!!
...全文
193 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
soaringsouth 2012-08-21
  • 打赏
  • 举报
回复
不更新某个字段,可以在delphi中设置为readonly,不要在sql中搞,sql就简单的查询,某些控制可以在delphi中实现。这样你的sql就灵活了。
agpxq 2012-07-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
沒有用2008,但我們因一個ERP軟件需要升級到SQL 2005.發現升級到2005後,原在2000下自己寫的使用很好的查詢或儲存過程,在2005運行的速度比原來2000時慢了很多,以至查詢都要改成用臨時表少量取數據.覺得2005不如2000.還比如原用varchar類型保存的中文,在2005的管理器導出就沒辦法解決問題,而在2000就不存在這個問題.
[/Quote]

不管用delphi,还是VS2008,SQL2005导出的varchar類型保存都有亂碼现象,同感,转换类型吧!
Oraclers 2012-07-19
  • 打赏
  • 举报
回复
沒有用2008,但我們因一個ERP軟件需要升級到SQL 2005.發現升級到2005後,原在2000下自己寫的使用很好的查詢或儲存過程,在2005運行的速度比原來2000時慢了很多,以至查詢都要改成用臨時表少量取數據.覺得2005不如2000.還比如原用varchar類型保存的中文,在2005的管理器導出就沒辦法解決亂碼問題,而在2000就不存在這個問題.
searoom 2012-07-18
  • 打赏
  • 举报
回复
sql2008 相对于 2000 有什么很大改进的地方么?我在考虑是否要升级
searoom 2012-07-18
  • 打赏
  • 举报
回复
有两个有不解的地方:

1. 按道理说 ado 控件只是都已经设置 LockType 了,难道还会受服务器端的影响么?
2. sql2000 和 sql2008 的子查询的处理应该不太一样,难道 sql2008 的子查询效率高些么?

2,497

社区成员

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

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