$PBExportHeader$f_init_dftpbl.srf global type f_init_dftpbl from function_object end type forward prototypes global function integer f_init_dftpbl (string arg_pblname, string arg_dwname, ref string arg_msg) end prototypes global function integer f_init_dftpbl (string arg_pblname, string arg_dwname, ref string arg_msg);Long rslt = 1 String ls_dwsyn,ls_pblpath String ls_Filename[] String ls_comments[] Blob lb_dwsyn Long i = 1,no_mxcheck Long cnt SELECT count(*) INTO :cnt FROM u_setliblist Where libname = :arg_pblname; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,附加文件列表" GOTO ext END IF IF cnt = 0 THEN INSERT INTO u_setliblist(libname ) Values (:arg_pblname); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入操作失败,附加文件" GOTO ext END IF END IF ls_pblpath = sys_cur_path + arg_pblname IF NOT FileExists(ls_pblpath) OR arg_dwname = '' THEN IF NOT FileExists(ls_pblpath) THEN IF LibraryCreate(ls_pblpath,sys_system_id) = -1 THEN rslt = 0 arg_msg = "创建PBL失败 " GOTO ext END IF END IF DECLARE cur_inwaermx CURSOR FOR SELECT Filename,comments FROM sys_autoudpb Where pblname = :arg_pblname; OPEN cur_inwaermx; FETCH cur_inwaermx INTO :ls_Filename[i],:ls_comments[i]; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_inwaermx INTO :ls_Filename[i],:ls_comments[i]; LOOP CLOSE cur_inwaermx; no_mxcheck = i - 1 // SELECT count(*) INTO :no_mxcheck // FROM sys_autoudpb // Where pblname = :arg_pblname; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = "查询操作失败,数据窗口数量" // GOTO ext // END IF // // IF i <> (no_mxcheck+1) THEN // rslt = 0 // arg_msg = "查询操作失败,数据窗口数量" // GOTO ext // END IF FOR i = 1 TO no_mxcheck SELECTBLOB filedata INTO :lb_dwsyn FROM sys_autoudpb Where Filename = :ls_Filename[i]; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,数据窗口语法信息" GOTO ext ELSE // ls_dwsyn = String(lb_dwsyn) ls_dwsyn = String(lb_dwsyn,EncodingANSI!) END IF IF LibraryImport(ls_pblpath,ls_Filename[i], ImportDataWindow!, ls_dwsyn, arg_msg,ls_comments[i] ) = -1 THEN rslt = 0 GOTO ext END IF NEXT ELSE String dwsyntax,ls_dw_arr[] Long it_max,ll_end,ll_beg String ls_dwsyn2 dwsyntax = LibraryExport(ls_pblpath,arg_dwname,ExportDataWindow!) it_max = 1 ls_dw_arr[1] = arg_dwname ll_end = 1 DO WHILE Pos(dwsyntax,'dataobject=',ll_end) > 0 ll_beg = Pos(dwsyntax,'dataobject=',ll_end) IF ll_beg = 0 THEN GOTO ext END IF ll_beg = ll_beg + 12 ll_end = Pos(dwsyntax,'"',ll_beg) it_max ++ ls_dw_arr[it_max] = Mid(dwsyntax,ll_beg,ll_end - ll_beg ) LOOP //对比 FOR i = 1 TO it_max ls_dwsyn = LibraryExport(ls_pblpath, ls_dw_arr[i], ExportDataWindow!) SELECT comments INTO :ls_comments[i] FROM sys_autoudpb Where Filename = :ls_dw_arr[i]; IF sqlca.SQLCode <> 0 THEN ls_dwsyn2 = ls_dwsyn ls_comments[i] = '' ELSE SELECTBLOB filedata INTO :lb_dwsyn FROM sys_autoudpb Where Filename = :ls_dw_arr[i]; IF sqlca.SQLCode <> 0 THEN ls_dwsyn2 = ls_dwsyn ELSE ls_dwsyn2 = String(lb_dwsyn,EncodingANSI!) // ls_dwsyn2 = String(lb_dwsyn, EncodingANSI!) END IF IF ls_dwsyn2 <> ls_dwsyn OR f_check_dwname(ls_pblpath,ls_dw_arr[i]) <> ls_comments[i] THEN IF LibraryImport(ls_pblpath,ls_dw_arr[i], ImportDataWindow!, ls_dwsyn2, arg_msg,ls_comments[i] ) = -1 THEN rslt = 0 GOTO ext END IF END IF END IF NEXT END IF ext: RETURN rslt end function