起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 273|回复: 10

SOS,急。query数据集问题**

[复制链接]
发表于 2008-8-14 11:22:30 | 显示全部楼层 |阅读模式
在查询时,qurey数据集报错:Error occur during invoke getrecords method.关闭的语句:getmetadata.
取出sql在plsql中执行没有报错.但在系统中会报以上错误.
回复

使用道具 举报

发表于 2008-8-14 11:32:14 | 显示全部楼层
你把代码贴出来看看,并说明一下,执行到那一句报的错?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-14 11:42:39 | 显示全部楼层
当查询条件中为GGXH为00.651时系统报错.
procedure TCKQCXZFORM.qdsQCListDataFilter();
var
  strSQLFilter : String;
  strOldSQLStr : String;
  strTmp : string;
  zylb:string;
  lBizParam : tBizParam;
  lContextCurrent:tContextCurrent;
  lBizURL : tBizURl;
  lQuery:TQuery;
  i:integer;
begin
try
   lBizURL:=tBizURL.Create();
   lContextCurrent:=tContextCurrent.Create(self.Context);
   lBizURL.URL:='Biz:\ZSBZJDQCCK\DICT\YWCSZ.ParamGroup\DQDLND.Param';
   lBizParam:=lContextCurrent.GetParam(lBizURL);
  zylb:=datasetccxt.FieldByName('zylb').AsString;
  //strSQLFilter := '';
  strOldSQLStr := qdsQCList.CommandText;
  qdsQCList.CommandText := cQCList1;
  strtmp := cQCList1;
  strSQLFilter := ' where 1 = 1 ';
  if  zylb='**' then
  begin
    if (DataSource1.DataSet.FieldByName('qclb').AsString <> '') and (deSJQCBM.Text.Trim.Length = 0) then
     strSQLFilter:= strSQLFilter + ' AND QCLBBM =''' + DataSource1.DataSet.FieldByName('qclb').AsString + '''';
  end;
  if DataSource1.DataSet.FieldByName('FH').AsString <> '' then
     strSQLFilter:= strSQLFilter + ' AND FH=''' + DataSource1.DataSet.FieldByName('FH').AsString + '''';
  if (deSJQCBM.Text.Trim.Length > 0) and (deSJQCBM.Text.Trim.Length <> 2) then
     {strtmp := SysUtils.StringReplace(strtmp,':pXsbm',deSJQCBM.Text.Trim + '%',[rfReplaceAll])
  else
     strtmp := SysUtils.StringReplace(strtmp,':pXsbm','%',[rfReplaceAll]);}
     strSQLFilter := strSQLFilter + ' AND xsBM LIKE ''' + deSJQCBM.Text.Trim + '%''';
  if (eQCMC.Text.Trim.Length > 0) then
     {strtmp := SysUtils.StringReplace(strtmp,':pQcmc','%' + eQCMC.Text.Trim + '%',[rfReplaceAll])
  else
     strtmp := SysUtils.StringReplace(strtmp,':pQcmc','%',[rfReplaceAll]);}
     begin
     strSQLFilter := strSQLFilter + ' AND (QCMC LIKE ''%' + eQCMC.Text.Trim + '%''';
           strSQLFilter:=strSQLFilter+ ' or QCMC  like ''%'+Sysutils.LowerCase(eQCMC.Text.Trim)+'%''';
      strSQLFilter:=strSQLFilter+ ' or QCMC  like ''%'+Sysutils.UpperCase(eQCMC.Text.Trim)+'%'' )';
     end;
  if (DataEdit1.Text.Trim.Length > 0) then
     {strtmp := SysUtils.StringReplace(strtmp,':pEjlb','%' + DataEdit1.Text.Trim + '%',[rfReplaceAll])
  else
     strtmp := SysUtils.StringReplace(strtmp,':pEjlb','%',[rfReplaceAll]);}
     strSQLFilter := strSQLFilter + ' AND ejlb LIKE ''%' + DataEdit1.Text.Trim + '%''';
  if (eLY.Text.Trim.Length > 0) then
    strSQLFilter := strSQLFilter + ' AND LY = ''' + eLY.Text.Trim + '''';
  if (eCCXZ.Text.Trim.Length > 0) then
    strSQLFilter := strSQLFilter + ' AND CCLX = ''' + eCCXZ.Text.Trim + '''';
      if (Edit1.Text.Trim.Length > 0) then
      begin
    strSQLFilter := strSQLFilter + ' AND (GGXH like ''%' + Edit1.Text.Trim + '%''';
      strSQLFilter:=strSQLFilter+ ' or GGXH  like ''%'+Sysutils.LowerCase(Edit1.Text.Trim)+'%''';
      strSQLFilter:=strSQLFilter+ ' or GGXH  like ''%'+Sysutils.UpperCase(Edit1.Text.Trim)+'%'' )';
    end;
  if (eCCFS.Text.Trim.Length > 0) then
    strSQLFilter := strSQLFilter + ' AND CCFS = ''' + eCCFS.Text.Trim + '''';
   
   if (strCCFW.Length > 0) and (strCCFW <> '2') and (strCCFW <> '4') then
    strSQLFilter := strSQLFilter + ' AND bgd like ''' + strCCFW + '%''';
  //if (strZYLB.Length > 0) then
  //  strSQLFilter := strSQLFilter + ' AND QCZMB.ZYLB = ''' + strZYLB + '''';
  if (eXGSX.Text.Trim.Length > 0) then
    strSQLFilter := strSQLFilter + ' AND (UPPER(JSCS) LIKE UPPER(''%' + eXGSX.Text.Trim + '%'') OR UPPER(GGXH) LIKE UPPER(''%' + eXGSX.Text.Trim + '%'') OR UPPER(SJQCBM) LIKE UPPER(''%' + eXGSX.Text.Trim + '%'') OR UPPER(xsBM) LIKE UPPER(''%' + eXGSX.Text.Trim + '%'') OR QCMC LIKE ''%' + eXGSX.Text.Trim + '%'' OR LY = ''' + eXGSX.Text.Trim + ''' OR CCLX = ''' + eXGSX.Text.Trim + ''' OR CCFS = ''' + eXGSX.Text.Trim + ''')';

  if (eQCLB.Text.Length > 0) AND (ZYLB = '**') then
    strSQLFilter := strSQLFilter + ' AND QCZMB.QCBM LIKE ''' + DataSource1.DataSet.FieldByName('QCLB').AsString + '%''';
  
  if (deSJQCBM.Text.Trim.Length = 2) and (zylb='**') then
     begin
     try
       lQuery:=TQuery.Create(nil);
       lQuery.ConnectionString:=cConnectionString;
       lQuery.CommandText:='select qcbm from wzgl_qcck_jxzbssfh where sjqcbm=:sjqcbm and bz=:bz';
       lQuery.Params.ParamByName('sjqcbm').AsString:= deSJQCBM.Text.Trim;
       lQuery.Params.ParamByName('bz').AsString:= defh.Text.Trim;
       lQuery.Open;
       if lquery.RecordCount = 1 then
          begin
            strSQLFilter:=strSQLFilter + ' AND QCBM LIKE ' + lQUERY.FieldByName('QCBM').AsString + '%''';
          end
       else if lquery.RecordCount > 1 then
          begin
            //strSQL:=strSQL + 'AND QCBM LIKE ';
            //strSQL := strSQL + ' AND (1=1' ;
            lquery.First;
            for i:=0 to lquery.RecordCount -1 do
              begin
                if i=0 then
                  strSQLFilter := strSQLFilter + ' AND (QCBM LIKE '''+ lQUERY.FieldByName('QCBM').AsString + '%'''
                else
                  strSQLFilter:=strSQLFilter + ' OR QCBM LIKE '''+ lQUERY.FieldByName('QCBM').AsString + '%''';

                lquery.Next;
              end;
            strSQLFilter:= strSQLFilter + ')';
          end;
       finally
         lQuery.free;
       end;
     end;
  //if(zylb.Length>0) then
  //   strSQLFilter := strSQLFilter + ' AND QCbmB.ZYLB = ''' + ZYLB + '''';
  qdsQCList.Params.ParamByName('pZylb').Value:=strZYLB;
  qdsQCList.Params.ParamByName('pNd').Value:=lBizParam.Value.ToString;
  if (strSQLFilter.Length > 0) then
    qdsQCList.CommandText := qdsQCList.CommandText + strSQLFilter;
    qdsQCList.CommandText := qdsQCList.CommandText + ' Order by QCBM';

  if (strOldSQLStr <> qdsQCList.CommandText) then
  begin
     qdsQCList.Active := false;
     qdsQCList.Active := true;///////////执行到这里报错
  end;
finally
   lBizURL.Free;
   lContextCurrent.Free;
end;
end;
回复 支持 反对

使用道具 举报

发表于 2008-8-14 11:48:17 | 显示全部楼层
看服务端有什么错误报出来
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-14 12:37:38 | 显示全部楼层
strSQLFilter := strSQLFilter + ' AND (GGXH like ''%' + Edit1.Text.Trim + '%''';
      strSQLFilter:=strSQLFilter+ ' or GGXH  like ''%'+Sysutils.LowerCase(Edit1.Text.Trim)+'%''';
      strSQLFilter:=strSQLFilter+ ' or GGXH  like ''%'+Sysutils.UpperCase(Edit1.Text.Trim)+'%'' ';
当GGXH为“00.651”时会报出以上错误。
回复 支持 反对

使用道具 举报

发表于 2008-8-14 13:49:52 | 显示全部楼层
最初由 lixy 发布
[B]看服务端有什么错误报出来 [/B]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-14 14:02:27 | 显示全部楼层
tomcat日志中报出:Error occur during invoke getrecords method.关闭的语句:getmetadata.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-8-14 14:15:15 | 显示全部楼层
当查询条件为空时也会报这种错误,重新生成了数据表和逻辑表的结构后,现在报错的次数少了.
回复 支持 反对

使用道具 举报

发表于 2008-8-14 14:17:35 | 显示全部楼层
请提供详细的服务端错误信息。
回复 支持 反对

使用道具 举报

发表于 2008-8-14 15:50:33 | 显示全部楼层
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 23:15 , Processed in 0.044600 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表