【发布时间】:2011-12-12 15:44:59
【问题描述】:
我们有一个旧应用程序,它读取 SQL 文本文件并将它们发送到 Sybase ASE 12.51。我们的旧应用程序是用 Delphi 5 编写的,并且在此过程中使用 BDE TQuery 组件,并使用 BDE SQLinks for Sybase 访问 Sybase。
伪代码:
SQLText=readSQLFile;
aTQuery.SQL.add(SQLText);
aTQuery.ExecSQL;
最近我们将 DB 访问层移至 Delphi XE ADO 实现 - TADOQuery,使用 Sybase 提供的 ADO 提供程序,仍然使用相同的模型:
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
【问题讨论】:
标签: delphi ado delphi-xe sap-ase delphi-5