好像是少了where ,C++的代码看不太懂     AnsiString where="";
     if(txtNamePart->Text!="")
     {
        where+=" where B.gxNamePartB='"+txtNamePart->Text+"'"; //少了where吧?存储过程中没有看到有,这里也没有看到你加
     }      DataMdl->StorPrcSch->Close();
      DataMdl->dsDbgMx->DataSet=DataMdl->StorPrcSch;
      DataMdl->StorPrcSch->StoredProcName="zs_Sch";
      DataMdl->StorPrcSch->Params->Clear();
      DataMdl->StorPrcSch->Params->CreateParam(ftString,"@Where",pdInput);
      DataMdl->StorPrcSch->Params->ParamByName("@Where")->Value=where;
      DataMdl->StorPrcSch->Prepare();
      DataMdl->StorPrcSch->Open();

解决方案 »

  1.   

    邹老大
    呵呵,是少了where
    但是我加上了之后还是错误
      

  2.   

    测试出了这个问题:
    假如:
    DataMdl->StorPrcSch->Params->ParamByName("@Where")->Value=" where B.gxNamePartB='明仕'";则顺利通过
    如果改成:
    DataMdl->StorPrcSch->Params->ParamByName("@Where")->Value=" where B.gxNamePartB='明仕二代一字标'";则出错:字符串‘明仕二代一’之前有未闭合的引号。
    什么原因呢?
    字段gxNamePartB长度设为40,不应该是它的问题呀
      

  3.   

    declare @sql nvarchar(1000)改为:
    declare @sql nvarchar(4000)
      

  4.   

    把同样的SQL语句放到数据库中查询,顺利通过了
      

  5.   

    我如何能得到这个存储过程中@sql变量的值呢?
      

  6.   

    我初步判定是@where变量或者@sql变量被截去了一部分字符,所以造成这个错误
    但是到底是怎么形成的呢
      

  7.   

    成功解决,就是3996906(以后再说)说的:
    ADOStoredProc1->Parameters->CreateParameter("@Where",ftString,pdInput,32,NULL);
    里的32的长度!,它说的是你创建"@Where"的长度,把它改大些再试
    我改成了80就好了。
    在这里特别感谢3996906(以后再说)孜孜不倦的对我热心帮助,也感谢各位帮助我的朋友,以及被我惊动了的那些老大。
    虽然分少了一点,但我肯定给分!!