ADO的sql语句和ODBC的有什么区别?( 鉴于csdn的回答率,暂定50,解决了一定200分)

耙子 2002-06-24 01:23:58
access2000 , bcb5 + sp1 + adosp 在win2K下。

为什么我的程序在使用adoQuery的时候有很大区别。
当时使用ado 通过odbc访问的时候一切正常,
但是当ado jet4.0 OLE的时候很多sql语句就都错了,而且没有错误原因,就是一句话“未指明错误”,中文的,肯定是ado jet4.0返回的。

如下语句在odbc下没问题

select a.id, a.ata, a.TicketNo
, (select name from customer where id=a.cargoagent) as CargoAgentName
, (select name from customer where id=a.Consigner) as ConsignerName
, a.Cargo ,a.size
, a.apiecequantity
, (a.apiecequantity * a.unitweight) as weight
from InStorage a
order by a.ata desc

但是在ado jet4.0下就错了。(设计期间和运行期间都错,使用active= true或者 Open都不行)

如下语句又在哪都好用。
select a.*,
(select ticketNo from inStorage where a.ticketID=ID) as TicketNo,
(select Cargo from inStorage where a.ticketID=ID) as Cargo,
(select unitweight from inStorage where a.ticketID=ID) * quantity as Weight
from OutStorage a
order by a.id desc

各位兄弟帮我看看为啥。

另外,程序发布到win xp下偶尔会报告 ADOQuery->SQL->Strings 错误。
靠,咋这么坎坷呢?
...全文
75 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
耙子 2002-06-25
  • 打赏
  • 举报
回复
up
耙子 2002-06-24
  • 打赏
  • 举报
回复
没跑,欢迎大家继续讨论。很感兴趣。
短歌如风 2002-06-24
  • 打赏
  • 举报
回复
在ODBC的SQL中id和size不是关键字。
TR@SOE() 斑竹说“ADO和ODBC所使用的SQL语句从本质上说不应该有任何区别”,想来没有考虑到它们调用的不是同一个数据库引擎。ADO调用的是“Microsoft Jet 4.0 OLE DB Providor”,而ODBC用的是Access的ODBC引擎,它们是不一样的。ODBC是一个标准,有它标准的SQL语句和转义序列,所以ODBC引擎都有自己的SQL编译代码以支持ODBC标准。
更典型的是Interbase,在它的ODBC引擎中,字符串比较是不区分大小写的,而在直接访问(用InterBase控件)时则是区分大小写的。
在ODBC引擎中,我们可以用{d '1988-12-12'}这种写法表示日期,不用管你用的是哪一种DBMS,而当你用ADO使用OLE DB引擎访问时,就不能用这种方法,而要根据你用的DBMS决定日期的表示方法了。
对不起,好象跑题了。

____ ____
\ p \ / g /
\ l \_/ n /
\ a o /
\ i s /
\ n /
\_/
lurel 2002-06-24
  • 打赏
  • 举报
回复
我一直在用bde开发,ado用过几次,感觉ado还是不成熟,尤其是支持的数据库有限,在没法产生dbf文件!我还是再等等
耙子 2002-06-24
  • 打赏
  • 举报
回复
问题我自己解决了,经过我的实验发现
ADO和ODBC的sql词法分析的确不同,他们对于保留字的处理不同。
我的sql中用到了 id和size这两个保留字了,
ado对于他的出现表现极差,“未指明的错误”
odbc 表现较好,正常的区分了id 和size在这里的含义,

我用a.[id], a.[size] 就没问题了。

感谢各位的帮助,如果明天没有人跟贴我就结束帖子了。
耙子 2002-06-24
  • 打赏
  • 举报
回复
问题我自己解决了,经过我的实验发现
ADO和ODBC的sql词法分析的确不同,他们对于保留字的处理不同。
我的sql中用到了 id和size这两个保留字了,
ado对于他的出现表现极差,“未指明的错误”
odbc 表现较好,正常的区分了id 和size在这里的含义,

我用a.[id], a.[size] 就没问题了。

感谢各位的帮助,如果明天没有人跟贴我就结束帖子了。
耙子 2002-06-24
  • 打赏
  • 举报
回复
这么吓人!难道逼我回到BDE和paradox上去?
我不懂电脑 2002-06-24
  • 打赏
  • 举报
回复
没什么区别呀。
TR@SOE 2002-06-24
  • 打赏
  • 举报
回复
没有错,ADO和ODBC所使用的SQL语句从本质上说不应该有任何区别。区别是在于程序将SQL指令加以解释并传递到数据库的方式。所以,恐怕你这个问题谁也解决不了了。
bearbaba 2002-06-24
  • 打赏
  • 举报
回复
你因该理解一个重要的概念,ADO方式是通过微软提供的接口直接与数据库进行通讯,也就是直接把你的代码翻译成数据库可以执行的指令。
而ODBC方式其实也是个接口,他更像是中转站,目的也是与数据库进行通讯。
总来说,ADO是目前比较流行的一种数据库操作方法。

另外,ADO和ODBC在使用SQL上是一样的,因为SQL是一个国际化的标准,和接口是无关的,之所以程序语句不一样,关键是程序调用的方法不一样
JXLEE365 2002-06-24
  • 打赏
  • 举报
回复
"未指定的错误"就是BCB解释不了的错误;
就是数据库PARSE不了的错误;
很明显是ACCESS的原因啦。

我做了一个在RICHEDIT中反白显示选定文本的程序,
在2000下正常,XP下怎麽也反白不出来。
打倒XP!!!

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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