123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- $PBExportHeader$f_mysql.srf
- $PBExportComments$获取创建动态dw的语法--函数
- global type f_mysql from function_object
- end type
- forward prototypes
- global function string f_mysql (datawindow dw_from, datawindow dw_field, datawindow dw_object, transaction it_f)
- end prototypes
- global function string f_mysql (datawindow dw_from, datawindow dw_field, datawindow dw_object, transaction it_f);//获取数据源的select语句及创建动态dw的语法,w_report_edit和w_reprot_preview调用
- string ls_from,ls_where,ls_sort,ls_select,ls_sql,ls_error,ls_table,ls_tables,ls_sort2,ls_sort0,ls_sql0,ls_newpage
- int li,li_rows,li_pos,li_rows_field
- long ll_row1,ll_row2,ll_row3,ll_row4,ll_detail,ll_detail_befor,ll_footer,ll_footer_befor
- string ls_temp,ls_sx_detail,ls_sx_footer,ls_obj,ls_group
- boolean lb
- lb=it_f.AutoCommit//取出原来属性
- if dw_from.rowcount()=0 then//如果没有选数据源,则自动添加一个简单的数据源
- dw_from.insertrow(0)
- dw_from.setitem(1,1,'is_report_id')
- dw_from.setitem(1,2,'report1')
- dw_field.insertrow(0)
- dw_field.setitem(1,1,'is_report_id')
- dw_field.setitem(1,2,'report1')
- dw_field.setitem(1,3,'report_id')
- dw_field.setitem(1,4,'报表编号')
- dw_field.setitem(1,5,'char(54)')
- dw_field.setitem(1,6,1)
- dw_field.setitem(1,7,1)
- dw_field.setitem(1,8,'report1.report_id')
- dw_field.setitem(1,9,1)
- end if
- ls_from=dw_from.getitemstring(1,'from_oexp')
- ls_where=dw_from.getitemstring(1,'where_oexp')
- ls_sort=dw_from.getitemstring(1,'sort_oexp')
- li_rows_field=dw_field.rowcount()
- for li=1 to li_rows_field
- if ls_select>'' then ls_select=ls_select+','
- ls_select=ls_select+dw_field.getitemstring(li,'column_select')
- next
- ll_row1=0
- li_rows=dw_object.rowcount()
- for li=1 to li_rows//此循环处理分组,索引,分组高
- ll_row1=dw_object.find("left(oname,9)='band_g_h_'",ll_row1+1,li_rows)
- if ll_row1=0 then exit
- ll_detail=dw_object.getitemnumber(ll_row1,'oy1')//分组头
- ls_sx_detail=dw_object.getitemstring(ll_row1,'oformat')
- ls_newpage=dw_object.getitemstring(ll_row1,'oborder')//新组换页打印
- ls_temp=dw_object.getitemstring(ll_row1,'expr_english')//分组关键字
- if ls_temp>'' then//以下代码可以兼容字段和表名有'_'情况
- ls_sort2=f_replace(ls_temp,"'","")
- if pos(ls_from,',')>0 then//两个表以上ls_from中间有逗号
- for li=1 to li_rows_field
- ls_sort2=f_replace(ls_sort2,dw_field.getitemstring(li,'column_english'),dw_field.getitemstring(li,'column_select'))
- next
- end if
- end if
- ls_obj=dw_object.getitemstring(ll_row1,'oname')
- ls_obj='band_g_b_'+mid(ls_obj,10,1)
- ll_row2=dw_object.find("oformat='"+string(integer(ls_sx_detail) - 1)+"'",0,li_rows)
- if ll_row2>0 then // 分组头前一带区
- ll_detail_befor=dw_object.getitemnumber(ll_row2,'oy1')
- else
- ll_detail_befor=ll_detail - 14
- end if
- ll_row3=dw_object.find("oname='"+ls_obj+"'",ll_row1+1,li_rows)
- if ll_row3>0 then
- ll_footer=dw_object.getitemnumber(ll_row3,'oy1')//分组尾
- ls_sx_footer=dw_object.getitemstring(ll_row3,'oformat')
- ll_row4=dw_object.find("oformat='"+string(integer(ls_sx_footer) - 1)+"'",ll_row1+1,li_rows)
- if ll_row4>0 then // 分组尾前一带区
- ll_footer_befor=dw_object.getitemnumber(ll_row4,'oy1')
- else
- ll_footer_befor=ll_footer -14
- end if
- else
- ll_footer=0
- ll_footer_befor= -14
- end if
- if ls_newpage='1' then
- ls_newpage=' newpage=yes'
- else
- ls_newpage=''
- end if
- ls_group=ls_group+"group(level="+right(ls_obj,1)+" header.height="+string(ll_detail - ll_detail_befor - 14)+" trailer.height="+string(ll_footer - ll_footer_befor - 14)+" by=("+ls_temp+")"+ls_newpage+")"
- next
- ls_sql='select '+ls_select+' from '+ls_from
- if ls_where>'' then ls_sql=ls_sql+' where '+ls_where
- if ls_sort2>'' and pos(ls_sort,ls_sort2)=0 then//创建分组自动加的索引
- if ls_sort>'' then
- ls_sort0=ls_sort+','+ls_sort2
- else
- ls_sort0=ls_sort2
- end if
- else
- ls_sort0=ls_sort
- end if
- ls_sql0=ls_sql
- if ls_sort0>'' then ls_sql0=ls_sql0+' order by '+ls_sort0
- it_f.AutoCommit=true
- ls_sql0=it_f.SyntaxFromSQL(ls_sql0,"style(type=grid)",ls_error)
- it_f.AutoCommit=lb
- if isnull(ls_sql0) or ls_sql0='' then//分组自动排序ls_sort2=getrow()时会出错,去掉此排序后重新创建
- ls_sort0=ls_sort
- ls_sql0=ls_sql
- if ls_sort0>'' then ls_sql0=ls_sql0+' order by '+ls_sort0
- it_f.AutoCommit=true
- ls_sql0=it_f.SyntaxFromSQL(ls_sql0,"style(type=grid)",ls_error)
- it_f.AutoCommit=lb
- end if
- if isnull(ls_sql0) then ls_sql0=''
- return ls_sql0+ls_group
- end function
|