f_init_dftpbl.srf 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. $PBExportHeader$f_init_dftpbl.srf
  2. global type f_init_dftpbl from function_object
  3. end type
  4. forward prototypes
  5. global function integer f_init_dftpbl (string arg_pblname, string arg_dwname, ref string arg_msg)
  6. end prototypes
  7. global function integer f_init_dftpbl (string arg_pblname, string arg_dwname, ref string arg_msg);Long rslt = 1
  8. String ls_dwsyn,ls_pblpath
  9. String ls_Filename[]
  10. String ls_comments[]
  11. Blob lb_dwsyn
  12. Long i = 1,no_mxcheck
  13. Long cnt
  14. SELECT count(*)
  15. INTO :cnt
  16. FROM u_setliblist
  17. Where libname = :arg_pblname;
  18. IF sqlca.SQLCode <> 0 THEN
  19. rslt = 0
  20. arg_msg = "查询操作失败,附加文件列表"
  21. GOTO ext
  22. END IF
  23. IF cnt = 0 THEN
  24. INSERT INTO u_setliblist(libname )
  25. Values (:arg_pblname);
  26. IF sqlca.SQLCode <> 0 THEN
  27. rslt = 0
  28. arg_msg = "插入操作失败,附加文件"
  29. GOTO ext
  30. END IF
  31. END IF
  32. ls_pblpath = sys_cur_path + arg_pblname
  33. IF NOT FileExists(ls_pblpath) OR arg_dwname = '' THEN
  34. IF NOT FileExists(ls_pblpath) THEN
  35. IF LibraryCreate(ls_pblpath,sys_system_id) = -1 THEN
  36. rslt = 0
  37. arg_msg = "创建PBL失败 "
  38. GOTO ext
  39. END IF
  40. END IF
  41. DECLARE cur_inwaermx CURSOR FOR
  42. SELECT Filename,comments
  43. FROM sys_autoudpb
  44. Where pblname = :arg_pblname;
  45. OPEN cur_inwaermx;
  46. FETCH cur_inwaermx INTO :ls_Filename[i],:ls_comments[i];
  47. DO WHILE sqlca.SQLCode = 0
  48. i++
  49. FETCH cur_inwaermx INTO :ls_Filename[i],:ls_comments[i];
  50. LOOP
  51. CLOSE cur_inwaermx;
  52. no_mxcheck = i - 1
  53. // SELECT count(*) INTO :no_mxcheck
  54. // FROM sys_autoudpb
  55. // Where pblname = :arg_pblname;
  56. // IF sqlca.SQLCode <> 0 THEN
  57. // rslt = 0
  58. // arg_msg = "查询操作失败,数据窗口数量"
  59. // GOTO ext
  60. // END IF
  61. //
  62. // IF i <> (no_mxcheck+1) THEN
  63. // rslt = 0
  64. // arg_msg = "查询操作失败,数据窗口数量"
  65. // GOTO ext
  66. // END IF
  67. FOR i = 1 TO no_mxcheck
  68. SELECTBLOB filedata
  69. INTO :lb_dwsyn
  70. FROM sys_autoudpb
  71. Where Filename = :ls_Filename[i];
  72. IF sqlca.SQLCode <> 0 THEN
  73. rslt = 0
  74. arg_msg = "查询操作失败,数据窗口语法信息"
  75. GOTO ext
  76. ELSE
  77. // ls_dwsyn = String(lb_dwsyn)
  78. ls_dwsyn = String(lb_dwsyn,EncodingANSI!)
  79. END IF
  80. IF LibraryImport(ls_pblpath,ls_Filename[i], ImportDataWindow!, ls_dwsyn, arg_msg,ls_comments[i] ) = -1 THEN
  81. rslt = 0
  82. GOTO ext
  83. END IF
  84. NEXT
  85. ELSE
  86. String dwsyntax,ls_dw_arr[]
  87. Long it_max,ll_end,ll_beg
  88. String ls_dwsyn2
  89. dwsyntax = LibraryExport(ls_pblpath,arg_dwname,ExportDataWindow!)
  90. it_max = 1
  91. ls_dw_arr[1] = arg_dwname
  92. ll_end = 1
  93. DO WHILE Pos(dwsyntax,'dataobject=',ll_end) > 0
  94. ll_beg = Pos(dwsyntax,'dataobject=',ll_end)
  95. IF ll_beg = 0 THEN
  96. GOTO ext
  97. END IF
  98. ll_beg = ll_beg + 12
  99. ll_end = Pos(dwsyntax,'"',ll_beg)
  100. it_max ++
  101. ls_dw_arr[it_max] = Mid(dwsyntax,ll_beg,ll_end - ll_beg )
  102. LOOP
  103. //对比
  104. FOR i = 1 TO it_max
  105. ls_dwsyn = LibraryExport(ls_pblpath, ls_dw_arr[i], ExportDataWindow!)
  106. SELECT comments
  107. INTO :ls_comments[i]
  108. FROM sys_autoudpb
  109. Where Filename = :ls_dw_arr[i];
  110. IF sqlca.SQLCode <> 0 THEN
  111. ls_dwsyn2 = ls_dwsyn
  112. ls_comments[i] = ''
  113. ELSE
  114. SELECTBLOB filedata
  115. INTO :lb_dwsyn
  116. FROM sys_autoudpb
  117. Where Filename = :ls_dw_arr[i];
  118. IF sqlca.SQLCode <> 0 THEN
  119. ls_dwsyn2 = ls_dwsyn
  120. ELSE
  121. ls_dwsyn2 = String(lb_dwsyn,EncodingANSI!)
  122. // ls_dwsyn2 = String(lb_dwsyn, EncodingANSI!)
  123. END IF
  124. IF ls_dwsyn2 <> ls_dwsyn OR f_check_dwname(ls_pblpath,ls_dw_arr[i]) <> ls_comments[i] THEN
  125. IF LibraryImport(ls_pblpath,ls_dw_arr[i], ImportDataWindow!, ls_dwsyn2, arg_msg,ls_comments[i] ) = -1 THEN
  126. rslt = 0
  127. GOTO ext
  128. END IF
  129. END IF
  130. END IF
  131. NEXT
  132. END IF
  133. ext:
  134. RETURN rslt
  135. end function