HRESULT HR;
CSTRING SQL,CS1;
CS1.FORMAT("%D",SERVERRIGHTID);
SQL= "SELECT HKSERVERID FROM SERVERRIGHT WHERE USERID = '"+
  USERID+"' AND SERVERRIGHTID = "+CS1;_variant_t vSql(sql); //access viovaltion错误 改成 vSql=sql照样,但在其他函数里,这个操作就正确

解决方案 »

  1.   

    CSTRING SQL,CS1; //还是CString ??
      

  2.   

    是不是该这么用?
    _variant_t(sql)
      

  3.   

    代码看不出来错误,你这个函数和其他有区别吗?是否在线程中调用?_bstr_t bstr=sql;
    _variant_t vSql=bstr;
      

  4.   

    CSTRING SQL,CS1; //还是CString ??
    是 CString
    变量应该没问题,这个方法里 变量就这么多,我看了,变量内容也正确,就是转换成_VARIANT_T出错 najie(须弥纳芥) ( ) 信誉:100    Blog  2006-11-06 12:29:00  得分: 0  
     
     
       你是不是在线程中用了这段你的意思是????
      
     
      

  5.   

    我类里有2个方法,方法中唯一不同的就是CSTRING SQL变量的内容不一样 其他完全一样
    另一个方法调用就正常
      

  6.   

    lfchen(一条晚起的虫) ( ) 信誉:100    Blog  2006-11-06 12:31:00  得分: 0  
     
     
       构造的时候报错,F11跟进去看看
      
     
    跟不进去,按F11就出个ACCESS VIOVALATION错误,然后就出现内容是6个左右的FFFFFFFF文件提示:MSVCRTD。DLL:ACCESS VIOVALATION
      

  7.   

    在增加一个方法,把这段代码复制过去,如果可以用,就把出错的那个方法不要了。如果还是有问题建议你关闭project,把系统临时文件夹清空,把projuect下的debug目录中的生成文件全都清理掉,project目录下的*.ncp,*.opt文件清理掉,重新rebuilder
      

  8.   

    如果你是线程中调用该方法,该线程中最好也初始化COM环境
      

  9.   

    没有在线程中调用
     
    建议你关闭project,把系统临时文件夹清空,把projuect下的debug目录中的生成文件全都清理掉,project目录下的*.ncp,*.opt文件清理掉,重新rebuilder
    也没用我在这个方法中试了_variant_t vSql(“1”); 都不行,在其他方法可以这段代码放别的方法中也不行
      

  10.   

    用 CString.GetBuffer() 试试?_variant_t vSql(sql.GetBuffer(sql.GetLength());
    sql.ReleaseBuffer();
      

  11.   

    终于知道原因了
    我在这个类中定义了一个大数组 50000个项
    我缩减了后 问题没有了
    难道是因为WINDOWS的数组大小有限制?
      

  12.   

    HRESULT HR;
    CString SQL,CS1;
    CS1.Format("%d",SERVERRIGHTID);
    SQL= "SELECT HKSERVERID FROM SERVERRIGHT WHERE USERID = '"+
     USERID+"' AND SERVERRIGHTID = "+CS1;_variant_t vSql(sql); 关于类型,那么大小写一定要注意