这是Delphi的bug还是我的机子问题?(50分)

  • 主题发起人 主题发起人 softdog
  • 开始时间 开始时间
S

softdog

Unregistered / Unconfirmed
GUEST, unregistred user!
在ADOQuery中写下面的SQL语句:

select *, (select stkname from stock where stock.stkno=orders.stkno) as stkname
from orders
where docno=:adocno

只要一Active:=true(IDE环境中),系统马上提示"Access volation .... 'ntdll.dll'"
但是如果改成下面的语句就不会有错了:

declare @docno varchar(20)

set @docno=:adocno

select *, (select stkname from stock where stock.stkno=orders.stkno) as stkname
from orders
where docno=@docno

这是为什么?

软件环境:NT4 Workstation + SP6, IE5, MS SQL Server 7.0
Delphi 5.0 + sp1 + ADOExpress sp2


 
没人回答,提前一下
 
oh! my god,还没人回答
 
你写 Parameters.ParamByName('adocno').Value:= 了吗?
 
来晚了!楼上的兄弟应该是对的!
在active之前应该给变量赋值,才可active:=True
 
如果不给参数赋值的话不应该出现这个错误,而且第二种情况同样没有赋值,为什么就没有错误呢?
 
不给参数赋值是不应该出现错误,但是前提是必须确定变量的数据类型。
你的第一种情况没赋值,也没定义adocno的数据类型。
第二种情况你虽然没赋值,但是你确定了数据类型 declare @docno varchar(20)。
要解决第一种情况,只要确定变量的类型就可以啦:
Parameters.ParamByName('adocno').DataType:=ftString
 
注意:我是在IDE中调试,不是程序运行期。
~~~~
而且两种情况我都指定了参数的类型。
 
不用ado,bde,odbc,换一个东东吧,邮件地址呢?
 
lmeiing: 什么邮件地址啊?
 
动态参数赋不赋值不是主要的,关键是在active 前确定动态参数类型!
 
昨天有空做了个测试,是ADO的Bug。我用其他的控件就不会有问题。

 
接受答案了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
504
import
I
I
回复
0
查看
904
import
I
S
回复
0
查看
947
SUNSTONE的Delphi笔记
S
后退
顶部