我们有一个旧应用程序读取 SQL 文本文件并将它们发送到 Sybase ASE 12.51。我们的旧应用程序是用 Delphi 5 编写的,并且在此过程中使用 BDE TQuery 组件,并使用 BDE SQLinks for Sybase 访问 Sybase。
伪代码:
SQLText=readSQLFile;
aTQuery.SQL.add(SQLText);
aTQuery.ExecSQL;
最近,我们使用 Sybase 提供的 ADO 提供程序将 DB 访问层移至 Delphi XE ADO 实现 - TADOQuery,仍然使用相同的模型:
SQLText=readSQLFile;
aTADOQuery.SQL.add(SQLText)
aTADOQuery.ExecSQL;
迁移到 ADO 后,我们发现某些数据丢失了。我们将失败追溯到这个 SQL 构造:
Select myColumn from myTable
Where tranID = null
知道这个结构在语义上充其量是有问题的,当我看到这段代码时,我做了一个“双重考虑”,但 Sybase 12.5 接受它 - 但是使用 ADO,这个段失败了。
我们决定改变:
Where tranID = null
到
Where tranID is null
然后加载丢失的数据 - 解决了这个部分和其他几个部分的问题。
有人对这种行为有解释吗?ADO 在哪里/为什么明显拦截并拒绝了这个序列,而 BDE 却通过了它?
TIA