/**************************************************** 函数描述: 在strsql最后一个From 后的最后一个 where后添加条件strwhere 在最后一个From后如果有where,条件加在where后;如果没有where, 在条件前加where再加条件函数参数: strsql: 原sql; strwhere: 条件, 函数返回: 生成的带查询条件的sql
函数完成: woods 日 期: 2006-03-30
注:如果strsql中不存在where,但是存在group by或having此函数不可用! 如果存在上述sql,可以添加一个永远成立的条件(如where 1=1),再使用此函数 生成sql *****************************************************/
string strnewsql,sql,sqlwhere,sqlsort,strAfterLastFormSql string strsql1,strsql2,strsql3 long i,j,possort,poswhere,posFrom
strsql1=strsql strsql1=upper(strsql1)
//查询最后一个From posFrom=len(strsql1)+1 for i=1 to len(strsql1) j=pos(strsql1,'FROM',i) if j>0 then //如果存在“from”,继续查找以后的sql posFrom=j //纪录位置点 i=j+6 else exit end if next
//查询From后最后一个Where poswhere=len(strsql1)+1 for i=posFrom+6 to len(strsql1) j=pos(strsql1,'WHERE',i) if j>0 then //如果存在“where”,继续查找以后的sql poswhere=j //纪录位置点 sqlwhere=mid(strsql1,j) i=j+7 else exit end if next
//得到没有条件、排序的sql sql=left(strsql1,poswhere - 1)
//生成where:sql if strwhere<>'' and isnull(strwhere)=false then if sqlwhere='' or isnull(sqlwhere)=true then sqlwhere=" where "+strwhere else sqlwhere=' where ('+strwhere+') and '+right(sqlwhere,len(sqlwhere) - 5) end if end if
strnewsql=sql+sqlwhere+sqlsort
return strnewsql