f_mysql.srf 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. $PBExportHeader$f_mysql.srf
  2. $PBExportComments$获取创建动态dw的语法--函数
  3. global type f_mysql from function_object
  4. end type
  5. forward prototypes
  6. global function string f_mysql (datawindow dw_from, datawindow dw_field, datawindow dw_object, transaction it_f)
  7. end prototypes
  8. 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调用
  9. 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
  10. int li,li_rows,li_pos,li_rows_field
  11. long ll_row1,ll_row2,ll_row3,ll_row4,ll_detail,ll_detail_befor,ll_footer,ll_footer_befor
  12. string ls_temp,ls_sx_detail,ls_sx_footer,ls_obj,ls_group
  13. boolean lb
  14. lb=it_f.AutoCommit//取出原来属性
  15. if dw_from.rowcount()=0 then//如果没有选数据源,则自动添加一个简单的数据源
  16. dw_from.insertrow(0)
  17. dw_from.setitem(1,1,'is_report_id')
  18. dw_from.setitem(1,2,'report1')
  19. dw_field.insertrow(0)
  20. dw_field.setitem(1,1,'is_report_id')
  21. dw_field.setitem(1,2,'report1')
  22. dw_field.setitem(1,3,'report_id')
  23. dw_field.setitem(1,4,'报表编号')
  24. dw_field.setitem(1,5,'char(54)')
  25. dw_field.setitem(1,6,1)
  26. dw_field.setitem(1,7,1)
  27. dw_field.setitem(1,8,'report1.report_id')
  28. dw_field.setitem(1,9,1)
  29. end if
  30. ls_from=dw_from.getitemstring(1,'from_oexp')
  31. ls_where=dw_from.getitemstring(1,'where_oexp')
  32. ls_sort=dw_from.getitemstring(1,'sort_oexp')
  33. li_rows_field=dw_field.rowcount()
  34. for li=1 to li_rows_field
  35. if ls_select>'' then ls_select=ls_select+','
  36. ls_select=ls_select+dw_field.getitemstring(li,'column_select')
  37. next
  38. ll_row1=0
  39. li_rows=dw_object.rowcount()
  40. for li=1 to li_rows//此循环处理分组,索引,分组高
  41. ll_row1=dw_object.find("left(oname,9)='band_g_h_'",ll_row1+1,li_rows)
  42. if ll_row1=0 then exit
  43. ll_detail=dw_object.getitemnumber(ll_row1,'oy1')//分组头
  44. ls_sx_detail=dw_object.getitemstring(ll_row1,'oformat')
  45. ls_newpage=dw_object.getitemstring(ll_row1,'oborder')//新组换页打印
  46. ls_temp=dw_object.getitemstring(ll_row1,'expr_english')//分组关键字
  47. if ls_temp>'' then//以下代码可以兼容字段和表名有'_'情况
  48. ls_sort2=f_replace(ls_temp,"'","")
  49. if pos(ls_from,',')>0 then//两个表以上ls_from中间有逗号
  50. for li=1 to li_rows_field
  51. ls_sort2=f_replace(ls_sort2,dw_field.getitemstring(li,'column_english'),dw_field.getitemstring(li,'column_select'))
  52. next
  53. end if
  54. end if
  55. ls_obj=dw_object.getitemstring(ll_row1,'oname')
  56. ls_obj='band_g_b_'+mid(ls_obj,10,1)
  57. ll_row2=dw_object.find("oformat='"+string(integer(ls_sx_detail) - 1)+"'",0,li_rows)
  58. if ll_row2>0 then // 分组头前一带区
  59. ll_detail_befor=dw_object.getitemnumber(ll_row2,'oy1')
  60. else
  61. ll_detail_befor=ll_detail - 14
  62. end if
  63. ll_row3=dw_object.find("oname='"+ls_obj+"'",ll_row1+1,li_rows)
  64. if ll_row3>0 then
  65. ll_footer=dw_object.getitemnumber(ll_row3,'oy1')//分组尾
  66. ls_sx_footer=dw_object.getitemstring(ll_row3,'oformat')
  67. ll_row4=dw_object.find("oformat='"+string(integer(ls_sx_footer) - 1)+"'",ll_row1+1,li_rows)
  68. if ll_row4>0 then // 分组尾前一带区
  69. ll_footer_befor=dw_object.getitemnumber(ll_row4,'oy1')
  70. else
  71. ll_footer_befor=ll_footer -14
  72. end if
  73. else
  74. ll_footer=0
  75. ll_footer_befor= -14
  76. end if
  77. if ls_newpage='1' then
  78. ls_newpage=' newpage=yes'
  79. else
  80. ls_newpage=''
  81. end if
  82. 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+")"
  83. next
  84. ls_sql='select '+ls_select+' from '+ls_from
  85. if ls_where>'' then ls_sql=ls_sql+' where '+ls_where
  86. if ls_sort2>'' and pos(ls_sort,ls_sort2)=0 then//创建分组自动加的索引
  87. if ls_sort>'' then
  88. ls_sort0=ls_sort+','+ls_sort2
  89. else
  90. ls_sort0=ls_sort2
  91. end if
  92. else
  93. ls_sort0=ls_sort
  94. end if
  95. ls_sql0=ls_sql
  96. if ls_sort0>'' then ls_sql0=ls_sql0+' order by '+ls_sort0
  97. it_f.AutoCommit=true
  98. ls_sql0=it_f.SyntaxFromSQL(ls_sql0,"style(type=grid)",ls_error)
  99. it_f.AutoCommit=lb
  100. if isnull(ls_sql0) or ls_sql0='' then//分组自动排序ls_sort2=getrow()时会出错,去掉此排序后重新创建
  101. ls_sort0=ls_sort
  102. ls_sql0=ls_sql
  103. if ls_sort0>'' then ls_sql0=ls_sql0+' order by '+ls_sort0
  104. it_f.AutoCommit=true
  105. ls_sql0=it_f.SyntaxFromSQL(ls_sql0,"style(type=grid)",ls_error)
  106. it_f.AutoCommit=lb
  107. end if
  108. if isnull(ls_sql0) then ls_sql0=''
  109. return ls_sql0+ls_group
  110. end function