源代码如下:            sqlstr = "select * from Balancelist bl where card_no in(select ca.card_no from CurrentAcc ca join DebitCard dc on ca.father_no='" + cardno  + "' union select ra.card_no from RegularAcc ra join DebitCard dc on ra.card_no='" + cardno  + "' union select fa.card_no from FinancialAcc fa join DebitCard dc on fa.card_no='" + cardno + "')";
            this.OpenCon();
            OleDbDataAdapter adapter = new OleDbDataAdapter(sqlstr, sqlcon);
            DataSet ds = new DataSet();
            adapter.Fill(ds, "BalanceList");
            this.CloseCon();
在执行上面语句时,系统报错“未处理的OleDbException,子查询中不存在此操作”,错误出现在adapter.Fill(ds,"BalanceList")这句代码。就是上面这段相同的代码我在sql 2000的环境跑过,没有问题的,但我现在数据库移植到access上了,就不能正常跑了,请大家给点解决办法。。急!! 在线等

解决方案 »

  1.   

    我在sql 查询语句中,使用了in子查询和union联合查询,难道使用了这个语句后,在调用OleDbDataAdapter.Fill()时有什么不同?
      

  2.   

    adapter.Fill没错误。。 报错不是说了么。子查询中不存在此操作。。
     说明你SQL语句有错误啊仔细检查, 把语句拿到 access运行一遍。能跑出来结果 在复制到程序里面来。
      

  3.   

    select * from Balancelist bl where card_no in (select ca.card_no from CurrentAcc ca join DebitCard dc on ca.father_no='111'  union select ra.card_no from RegularAcc ra join DebitCard dc on ra.card_no='111'  union select fa.card_no from FinancialAcc fa join DebitCard dc on fa.card_no='111')我分别在Mssql和Access中跑了上面这段查询语句,Mssql中是没问题的,Access中报“子查询中不存在此操作”,正如上面这位朋友所说,大家帮忙看看在Access中,上面的语句哪里是不是需要修改的?
      

  4.   

    希望熟悉Access的朋友们可以给出详细的改进方案, 在线等,急啊!!!!!!!!
      

  5.   

    我发现应该是在Access的in子查询语句中不能嵌套union查询语句, 但是这个功能不能不要啊! 还是需要继续寻求解决办法!!!!!继续求助
      

  6.   

    select * from Balancelist bl where card_no in((select ca.card_no from CurrentAcc ca where ca.father_no='111')  & (select ra.card_no from RegularAcc ra where ra.father_no='111'))  
      在Access2002中运行这个语句查询时,会让我数据库出现异常,自动就关闭了,是什么原因啊?? 郁闷中,搞了半天,都没弄明白....
      

  7.   

    ACCESS的SQL语句写的时候需要注意一些语法和写法上的问题:
    手边没有测试环境,只能简单说说我的建议:
    1.去网上查一下有关UNION是否能用查询在ACCESS数据库的查询
    2.另外所有的字段名称在加上"[]";[字段名1],[字段名1]...我记得以前测试的时候如果不加"[]"好像在条件查询中有问题,加上了就好了。
    3.干脆去网上找吧,ACCESS数据库的SQL语句的写法和语法?网上有的。
      

  8.   

    select * from [Balancelist]  where [card_no] in ((select [card_no] from [CurrentAcc]  where [father_no]='111')  & (select [card_no] from [RegularAcc]  where [father_no]='111'))
    熟悉Access查询的朋友帮我看看上面语句有什么问题啊?  我在Access中执行会导致数据库异常关闭...问题还在解决中..
      

  9.   

    就语法我实在想不出什么问题,就是一个子查询中嵌套了一个联合查询,在MSSQL中就没有问题的,真叫人头疼啊!!!
      

  10.   

     我也遇到过类似情况, ACCESS 查询语句错误, 看一下数据类型是否对应!
      

  11.   

    select * from [Balancelist]  where [card_no] in((select [card_no] from [CurrentAcc]  where [father_no]='111') & (select [card_no] from [RegularAcc]  where [father_no]='111'));
    当BalanceList表数据为空时,上面这条语句是可以正常执行的,可是如果有记录,就会出现异常,数据库死了!!!哎,Access就这么难么!!!
      

  12.   

    使用DataTable代替DataSet
    因为你使用的SQL语句已经涉及到多个表
    所以不能使用映射到某个表的用法
    改用DataTable试试
      

  13.   

    实在不行换个思路,把需要的数据取出来放到Datatable里 ,然后后台进行数据逻辑处理。
      

  14.   

    搞定,只用联合查询,子查询中嵌套联合查询在Access中是行不通的!!感谢大家的热心关注...