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.
请赐教!

解决方案 »

  1.   

    sql语句怎么这么乱,我看了半天没看懂。能不能简单一点啊。我再看看。
      

  2.   

    DELPHI的问题吧 关掉再打开试试
      

  3.   

    参数错了,用SHOWMESSAGE(aq1.sql);看解释出的语句是不是有问题,可能是 P1,P2后没有空格和DELPHI没关系的
      

  4.   

    这个不是delphi的问题。SQL我已经变相通过另外的途径得到所需要的答案了。但是这个也是个问题。就是说我估计在select 里面是不能再放select语句了(在where之前)delphi我重新启动之后再运行也是这样。语句是肯定对的。没有问题的。我已经试过好多遍了。
      

  5.   

    不用参数,直接使用
    Sql.Text := Format(aSql,[nj,'女']);
    试试行不
      

  6.   

    回复人: JavaD(一竿残照) ( ) 信誉:100  2004-07-04 08:54:00  得分: 0  
     
     
       不用参数,直接使用
    Sql.Text := Format(aSql,[nj,'女']);
    试试行不
      
     ----------------------------------------这个我倒没有试过。我估计不是这个问题。parameters.parambyname。也是一样的阿。
      

  7.   

    你这样,还不如做存储过程。这样估计很难通过。D本身的数据驱动和SQL的不一样,你可以放到D本身自带的sql explorer分析器中去测试。不过我还是劝你用存储过程的好
      

  8.   

    zzjhmqmail(zzj) ( ) 信誉:90 
    你这样,还不如做存储过程。这样估计很难通过。D本身的数据驱动和SQL的不一样,你可以放到D本身自带的sql explorer分析器中去测试。不过我还是劝你用存储过程的好-------------------------------------------------------------
    有见地。。用存储过程是肯定可以通过的。严重同意!!!而且效率又可以提高。。
    不错。不错。看样子存储过程是个不错的东东。差不多要揭帖了。
      

  9.   

    打开SQL server 的事件探测器看看
      

  10.   

    Distinct? Group By... !
      

  11.   

    这样的用法在SQL Server下应该没有问题。在MySQL或Access等不支持子查询的数据库中存在问题。
      

  12.   

    to  
     回复人: lijinghe1(副乡长)(立党为公,执政为民) ( ) 信誉:105  
    ..---------------------
    哈哈。我是XP的。让您失望了。。这个问题的最好解决方法我估计就是回复人: zzjhmqmail(zzj) ( ) 信誉:90 了
    大家觉得呢???
    to:回复人: bigben2008(ben) ( ) 信誉:100 
    我就是d7+sqlserver2000的啊。呵呵。没有办法啊。
      

  13.   

    我也遇到过同样的问题....
    我的语句也是,查询分析器里过了,,delphi 里不过..
      

  14.   

    我在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'唯一区别的地方就是我没有用到参数
      

  15.   

    1、请先注销一次计算机。
    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,即参数的数据类型。
      

  16.   

    给你一个简单测试你的sql语句的方法在form上加一个edit然后在query打开之前把sql语句赋值给edit,最后把edit里的sql语句 copy到查询分析器里分析一下看看有什么错误?
      

  17.   

    将Sql.text show出来
    再置于查询分析器里执行如果行那就是可以的sql.Add(' (这是得加一空格吧)as nsrs from vqygk as u1 where u1.grade=:p2');
      

  18.   

    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;
      

  19.   

    to: 
    我在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操作有什么区别没有.如果没有区别我想就不会出现这些让人琢磨不透的伤脑筋的事情了.
      

  20.   

    回楼主,我的也没解决,后来我改用其它方法,,建立临时字段,,唉  是个笨方法.
    我的在..
    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 企业版
      

  21.   

    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)'+
    ' as nsrs from vqygk as u1 where u1.grade=:p2');
        parameters[0].Value:=nj;
        parameters[1].Value:='女';
        open;
      end;这样试试
      

  22.   

    XXSingle(水连天) 的回贴可以看出这样复杂的查询是可行的..
    那可能问题是出在PARAMETERS使用上..
    为什么楼主不试试,不使用PARAMETERS,
    而是自己生成这个SQL查询串呢?