|

楼主 |
发表于 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; |
|