为何'upWhereKeyOnly'在NT 下有用,WIN97下没作用?(200分)

  • 主题发起人 主题发起人 aaa
  • 开始时间 开始时间
A

aaa

Unregistered / Unconfirmed
GUEST, unregistred user!
为何'upWhereKeyOnly'在NT 下有用,WIN97下没作用?

同一程序,在不同的OS下运行,用MS SQL 6。5 的SQL TRACE 可以清楚的
看到运行在 NT 下发出的SQL 语句正常,而WIN97下运行发出的SQL 语句并非'upWhereKeyOnly',而是upWhereAll,即WHERE 后一大窜条件,IT‘S NOT MY WISH!为什么?

还有很多东西在NT 运行下都顺利很多,哎。。。这是为何???

 
??
bde版本对吗?没道理呀
 
是5。01。

同一张光碟在不同的OS上安装。
 
与装入系统有关。Win95只不过是个单用户、多任务操作系统,而NT就不通了,它要
完成多用户的需求,当然其调用函数就不同了。
 
uPwherekeyonly 是有条件的,就是说要一个KEY支持
而从你问题可以看出,你运行的环境不同,所以判断您
两次连接的数据库其实是有区别的, 您检查一下
查询相关的数据表是否有合适的索引或两次查询所用的数据表索引
是否完全一致

 
我看不出两次连接的数据库有何区别,因为是同一DATABASE中的
同一个TABLE,且此表只有一PRI KEY。(NT 下 IS OK!)
不过我试过在WIN97 下把 Cacheupdates 设为FALSE,
'upWhereKeyOnly'就有作用,WHY ?
问题是我不想 SET Cacheupdates=FALSE,
因为有别的用处。
请多指教!
 
请详细写出你的QUERY 的配置

你的95访问的SERVER 和NT下程序访问的SERVER都是另一台机器里的MSSQL吗?

既然你用CACHEUPDATE , 给你的QUERY加上 UPDATESQL

我用SQLSERVER 2年多了, 还没发现你说的问题
 
object T_MYTABLE: TTable
Active = True
AutoCalcFields = False
CachedUpdates = True
BeforePost = T_foloBeforePost
AfterPost = T_foloAfterPost
OnNewRecord = T_foloNewRecord
OnPostError = T_foloPostError
DatabaseName = 'MYDATA'
SessionName = 'Default'
IndexFieldNames = 'FNU' --------->为PRI KEY
TableName = 'TABL1'
UpdateMode = upWhereKeyOnly
Left = 32
Top = 72
end

如上,我用的是TABLE,UPDATESQL 为空。
因为我认为DELPHI 自动生成的SQL 语句比较好,自己写太烦了,
我的表字段太多了,UPDATE 时只是其中某些(不定)字段,INSERT
时可以是其中某些(不定)字段,HOW TO WRITE SQL?


 
to AAA:
我看问题有可能出在你所用的tTable以及BDE设置, 你95的客户机环境和
NT的客户机环境一定有不同的地方

值得你去观察之处有:
1. 95环境下访问的服务器里表的主副索引 和NT 中相同表的主副索引是否完全相同
2. 95环境下和NT环境下BDE设置中使用的SQL 方式
其中 SQL PASSTHRUMODE 统一改为 share NOAutoCommit
SQLQryMode 改为SERVER

因为你用的是TTABLE访问SQL SERVER,实际上TTABLE发出的SQL 语句是
SELECT * from table ........
你可以在程序运行时 打开SQL MONITOR 查看客户机是如何把 SQL 发往
主机的。
实际上,在C/S方式有访问SQL 数据库时, TTABLE访问SQL 数据库是通过
把TTABLE转化为 SQL 请求来完成的。 如果你要使用SQLSERVER
一定要用QUERY 和SQL 语言完成,否则在多任务环境下很容易出错(多是莫名其妙
的锁定之类的错误)
 
请继续讨论或结束问题,谢谢
 
多人接受答案了。
 
后退
顶部