sqlserver查询分析器下:
select distinct u1.classname,u1.subjectname,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex='女') as nsrs from vqygk as u1 where u1.grade='2001'
可以通过。
delphi下
with aq1 do
begin
close;
sql.Clear;
sql.Add('select distinct u1.classname,u1.subjectname,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex=:p1)');
sql.Add('as nsrs from vqygk as u1 where u1.grade=:p2');
parameters.ParamByName('p2').Value:=nj;
parameters.ParamByName('p1').Value:='女';
open;
end;为什么不能通过。执行后说非法访问一个地址。ntdll.dll.
请赐教!
select distinct u1.classname,u1.subjectname,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex='女') as nsrs from vqygk as u1 where u1.grade='2001'
可以通过。
delphi下
with aq1 do
begin
close;
sql.Clear;
sql.Add('select distinct u1.classname,u1.subjectname,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex=:p1)');
sql.Add('as nsrs from vqygk as u1 where u1.grade=:p2');
parameters.ParamByName('p2').Value:=nj;
parameters.ParamByName('p1').Value:='女';
open;
end;为什么不能通过。执行后说非法访问一个地址。ntdll.dll.
请赐教!
Sql.Text := Format(aSql,[nj,'女']);
试试行不
不用参数,直接使用
Sql.Text := Format(aSql,[nj,'女']);
试试行不
----------------------------------------这个我倒没有试过。我估计不是这个问题。parameters.parambyname。也是一样的阿。
你这样,还不如做存储过程。这样估计很难通过。D本身的数据驱动和SQL的不一样,你可以放到D本身自带的sql explorer分析器中去测试。不过我还是劝你用存储过程的好-------------------------------------------------------------
有见地。。用存储过程是肯定可以通过的。严重同意!!!而且效率又可以提高。。
不错。不错。看样子存储过程是个不错的东东。差不多要揭帖了。
回复人: lijinghe1(副乡长)(立党为公,执政为民) ( ) 信誉:105
..---------------------
哈哈。我是XP的。让您失望了。。这个问题的最好解决方法我估计就是回复人: zzjhmqmail(zzj) ( ) 信誉:90 了
大家觉得呢???
to:回复人: bigben2008(ben) ( ) 信誉:100
我就是d7+sqlserver2000的啊。呵呵。没有办法啊。
我的语句也是,查询分析器里过了,,delphi 里不过..
区别只是:
CommandText:='select distinct u1.classname,u1.subjectname,
(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,
(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex=''男'') as nsrs
from vqygk as u1 where u1.grade=2001'唯一区别的地方就是我没有用到参数
2、将程序改成下面的试一试。
with aq1 do
begin
close;
sql.Clear;
sql.Add('select distinct u1.classname,u1.subjectname,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex='+#39+'nj'+#39+')');
sql.Add('as nsrs from vqygk as u1 where u1.grade='#39+'女'+#39+');
open;
end;
我很怀疑是因为你没有为 Parameter 指定 Type,即参数的数据类型。
再置于查询分析器里执行如果行那就是可以的sql.Add(' (这是得加一空格吧)as nsrs from vqygk as u1 where u1.grade=:p2');
with aq1 do
begin
close;
sql.Clear;
sql.Add('select distinct u1.classname,u1.subjectname,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex=:p1)');
sql.Add(' as nsrs from vqygk as u1 where u1.grade=:p2');//注意在前面多一个空格
parameters.ParamByName('p2').Value:=nj;
parameters.ParamByName('p1').Value:='女';
open;
end;
我在ADODataSet中写过类似的语句,没有发现任何问题,
区别只是:
CommandText:='select distinct u1.classname,u1.subjectname,
(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,
(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex=''男'') as nsrs
from vqygk as u1 where u1.grade=2001'唯一区别的地方就是我没有用到参数
\================================================
参数估计不是什么问题.
----------------------------------------------------------------------------------
我想在这里讨论的是delphi通过ado连接,好像很玄乎...我很难表达清楚.到底直接在SQLSERVER查询分析器里面直接查询和利用ado操作有什么区别没有.如果没有区别我想就不会出现这些让人琢磨不透的伤脑筋的事情了.
我的在..
http://community.csdn.net/Expert/topic/3126/3126456.xml?temp=.3069116我的也贴出来,借楼主的光 ,看能不能解决例子: CQB 表中,字段 Eid ,Isin,~~~~~
SELECT IsIn =
CASE
WHEN IsIn =1 THEN 'Not'
ELSE 'Yes'
END,
Eid
FROM cqb
win2000 Server Delphi7 Sql2000 企业版
begin
close;
sql.Clear;
sql.Add(
'select distinct u1.classname,u1.subjectname,'+
'(select count(studentno) from vqygk as u2 where u2.classname=u1.classname ) as zrs,'+
'(select count(studentno) from vqygk as u2 where u2.classname=u1.classname and u2.sex=:p1)'+
' as nsrs from vqygk as u1 where u1.grade=:p2');
parameters[0].Value:=nj;
parameters[1].Value:='女';
open;
end;这样试试
那可能问题是出在PARAMETERS使用上..
为什么楼主不试试,不使用PARAMETERS,
而是自己生成这个SQL查询串呢?