《计算机领用管理系统开发论文29315.doc》由会员分享,可在线阅读,更多相关《计算机领用管理系统开发论文29315.doc(37页珍藏版)》请在三一办公上搜索。
1、 大学高等教育自学考试毕业论文(设计)计算机领用管理系统开发中文摘要企业的发展过程中,计算机日益成为日常工作的重要工具。在IT技术高速发展的今天,计算机的更新换代更加频繁,计算机的管理也逐渐成为设备管理部门在管理过程中的一个繁琐而单调的过程。原始的手工卡片管理由于牵涉到很多具体的问题,越来越不适应现代化管理的趋势。为了减轻固定资产管理过程中由于各种原因造成管理人员的负担,强化计算机设备管理的力度,提高设备管理过程中的信息变更速度,需要设计一套适应目前公司计算机设备管理的管理系统,能够快速地做到对计算机设备的采购情况、领用情况等的查询和修改,以加强对计算机设备的现代化管理。固定资产管系统主要针对
2、企业内部的需求,解决固定资产管理中计算机资产的管理问题,从计算机采购信息的增加、修改以及删除到计算机领用信息的增加、修改及删除等问题的处理,另外还涉及职员的变动处理以及用户权限的管理等。系统主要采用PowerBuilder集成开发环境和相关数据库系统,利用其功能强大的数据窗口,完成系统所需要的功能,并提供友好的用户界面和适宜的过程控制,以达到企业相关管理人员对计算机资产的管理要求,能够满足目前企业对相关领域的需求。关键词:固定资产管理系统;PowerBuilder;数据库;数据窗口目 录中文摘要I1 绪论11.1 系统产生的背景11.2 系统产生的条件11.3 开发工具的主要特点22 需求分析
3、32.1 系统介绍32.2 用户需求分析32.3 业务流程图33 系统设计43.1数据库设计原则43.2 概念结构设计53.3 逻辑结构设计63.4物理结构设计64 系统实施84.1 建立数据库84.2系统实现84.2.1建立工作空间及应用程序对象84.2.2建立数据窗口对象134.2.3创建三个全局函数154.2.4创建操作窗口165 系统测试与分析295.1系统试运行295.2 系统运行分析305.3 系统存在的不足316 结论32致 谢33参 考 文 献341 绪论1.1 系统产生的背景现代科学技术的发展日新月异,摩尔定律揭示了信息技术进步的速度。现代企业的管理手段也朝着现代化管理的方向
4、高速发展。现代企业都在以先进的信息技术为手段,对信息进行采集、整理、加工、传播、存贮和利用的过程,对企业的信息活动过程进行战略规划,对信息活动中的要素进行计划、组织、领导和控制,力求资源有效配置、共享管理、协调运作,以最少的消耗创造最大的效益。信息管理逐渐成为企业管理的重要组成部分和手段。为了适应信息化发展的需要,通常一些有条件的企业都要求开发或者购买一套能够适应本企业需要的信息系统,从人力资源系统、生产系统、供应链系统、技术研发等各方面大力加快现代化信息化的步伐。面对企业规模的日益扩大,企业内部计算机的使用数量急剧增加,计算机的新旧更替也逐步加快。传统的手工作业的卡片式固定资产管理在面对数目
5、庞大资产,不仅效率低下,而且极易出现错误,完全不适应现阶段信息化管理的高速环境。举一个例子:原来某部门一台计算机的卡片因为管理人员不慎弄坏而未及时补上,导致后来在清理资产的时候该计算机成为盘盈项目,而财务部门却又盘亏一台计算机,出现信息的不对称,费好大劲才将该资产规入正确的栏目。所以企业急于需要一套能够满足现阶段固定资产管理的信息系统,解决管理人员在管理过程中出现的各种弊端。1.2 系统产生的条件企业领导从其他渠道的反馈信息中认真作出比较,认为目前企业的需求还不太高,完全无必要购买一套多功能的信息系统,只需要开发一个能够解决目前固定资产中计算机的简单的管理系统,待成熟后再添加一些其他的功能,逐
6、步形成信息化管理的雏形。鉴于该系统要求较低,功能较简单,使用一般的数据库开发系统都完全能够满足领导的要求,决定采用PowerBuilder开发工具完成该系统。1.3 开发工具的主要特点PowerBuilder美国Sybase公司研制的一种新型、快速开发工具,是客户机/服务器结构下,基于Windows3.x、Windows95和WindowsNT的一个集成化开发工具。它包含一个直观的图形界面和可扩展的面向对象的编程语言PowerScript,提供与当前流行的大型数据库的接口,并通过ODBC与单机数据库相连。其主要特别有: 可视化、多特性的开发工具。全面支持Windows或WindowsNT所提供
7、的控制、事件和函数。 PowerScript语言提供了几百个内部函数,并且具有一个面向对象的编译器和调试器,可以随时编译新增加的代码,带有完整的在线帮助和编程实例。 功能强大的面向对象技术。支持通过对类的定义来建立可视或不可视对象模型,同时支持所有面向对象编程技术,如继承、数据封装和函数多态性等。这些特性确保了应用程序的可靠性,提高了软件的可维护性。 支持高效的复杂应用程序。对基于Windows环境的应用程序提供了完备的支持,这些环境包括Windows、WindowsNT和WinOS/2。开发人员可以使用PowerBuilder内置的Watcom C/C+来定义、编译和调试一个类。 企业数据库
8、的连接能力。PowerBuilder的主要特色是DataWindow(数据窗口),通过DataWindow可以方便地对数据库进行各种操作,也可以处理各种报表,而无需编写SQL语句,可以直接与Sybase、SQLServer、Informix、Oracle等大型数据库连接。 强大的查询、报表和图形功能。PowerBuilder提供的可视化查询生成器和多个表的快速选择器可以建立查询对象,并把查询结果作为各种报表的数据来源。 PowerBuilder主要适用于管理信息系统的开发,特别是客户机/服务器结构。2 需求分析2.1 系统介绍固定资产管理系统目前主要针对计算机资产的管理,待成熟后再增加其他资产
9、管理的功能。拥有快捷、高效、处理及时、查询方便等特点,它改变了传统的手工方式的卡片管理观念,充分体现了信息化管理系统给企业的快速发展带来的好处。开发本系统的总体任务是实现计算机采购信息的建立和维护、计算机领用信息的建立和维护,另外还涉及人员的变动情况以及管理权限的设置。2.2 用户需求分析本系统的总目标是为管理人员提供迅速、高效的服务,减免手工处理的繁琐与误差,及时、准确地反映计算机资产的采购情况和领用情况,从而提高计算机资产的管理水平,获得更好的经济效益。其具体目标包括: 快速完成计算机采购信息的录入和修改。 准确无误地记录每台计算机的领用情况。 对职员的变动情况进行相应的处理。 方便查询计
10、算机采购信息及领用情况信息。2.3 业务流程图用户登录验证合法性不合法合法进入主界面权限设置信息查询信息修改信息录入退出图2-1 系统业务流程图3 系统设计3.1数据库设计原则对于后台的数据库设计,首先要整理销售业务部门的数据,分析数据的来源和流向,通过E-R图的逐步分析,最终确定出在计算机中存储的信息,从而确定数据库的模式,在这个环节中一定要规范化数据库,防止不必要的数据重复和数据的不一致性,在进行完逻辑数据库的设计后,进行其物理实现,创建数据库时应尽量加入数据完整性和业务规则的约束,这样可以降低应用程序编码的复杂性,提高维护程序的效率,拒绝非法数据进入数据库。应用数据库的设计本着以下原则进
11、行:索引的使用:索引一般用与快速访问表中数据,但并不是所有的索引都可以提高性能,因为索引会降低插入,更新,删除操作的性能,浪费系统资源。命名标准化:不同的数据库产品对对象的命名有不同的要求,因此数据库中的各种对象的命名,后台程序的代码编写应采用字母形式,各种对象命名不要超过30个字符,这样便于应用系统适用不同的数据库。慎重使用游标:使用游标尽管很方便,但是对于表和大表定义的游标(大的数据集合)循环很容易使程序进入等待甚至死机,因此应慎重使用。 数据库性能调整:随着计算机技术的不断变化,应用系统会不断地进行调整,所涉及到的类型在不断的增加,这就要求数据库系统应具有适应 动态变化的柔性,因而在设计
12、应用数据库时,应充分考虑到可能的数据变化,采用通用的数据结构(如各种编码等)技术,以保证系统的不断升级与发展。尽量使用事务保证数据的完整性:为了保证数据库的一致性和完整性,设计人员往往会设计很多表中关联,尽可能降低数据的,从而保证数据完整性,但却增加了表间连接查询的操作,因此,为了提高系统的响应时间,合理的数据用语是必要的,至于数据间的一致性,可使用事物来保证。事务是必须一次性完成的一组操作,数据库系统能保证这组操作要么全部都完成,要么一点都不做,使得数据的完整性得到了极大的保证。在本计算机领用管理系统数据库设计中,我选择了PowerBuilder自带的Sysbase公司的ASA数据库,该数据
13、库系统在安全性、准确性、运行速度方面有绝对的优势,处理数据库量适中,效率高;界面友善,非常便于操作。3.2 概念结构设计概念结构设计是将分析得到的用户需求抽象为概念模型的过程,即在需求分析的基础上,设计出能够满足用户需求的各种实体以及它们之间的相互关系的模型。概念结构的主要特点是能真实、充分地反映现实世界,易于理解,易于更改,易于向关系、网状、层次等各种数据模型转换。描述概念模型的有力工具是E-R模型。基于数据库管理系统的计算机领用管理系统的E-R图如图3-1所示。用户描述权限口令标志姓名工号部门职员年龄性别M领用资产编号职员工号电脑批号领用日期N采购数量采购批号采购日期计算机生产厂家价格硬盘
14、CPU显示器内存图3-1 计算机领用管理系统数据库E-R图3.3 逻辑结构设计逻辑结构设计的任务就是把概念模型结构转换成某个具体的DBMS所支持的数据模型。设计逻辑结构时,首先是将概念结构转换为一般的关系、网状、层次模型,其次是将转换来的关系、网状、层次模型向特定DBMS支持下的数据模型转换,最后是对数据模型进行优化。将计算机领用管理系统的E-R图转换成关系数据模型。关系模式如下:职员(工号,姓名,性别,年龄,部门);计算机(采购批号,生产厂商,CPU型号,内存型号,硬盘型号,显示器型号,价格,采购日期,采购数量);领用(固定资产编号,职员工号,计算机采购批号,领用日期);用户(用户标志,登录
15、口令,用户描述,使用权限);3.4物理结构设计数据库的物理结构设计是对于给定的逻辑数据模型,选取一个最合适应用环境的物理结构。数据库的物理结构指的是数据库在物理设备上的存储结构与存取方法,它依赖于给定的计算机系统,是在数据库逻辑结构的基础上设计出一组能够满足实际需求的关系、约束、和索引等信息。计算机领用管理系统的数据库表结构如下: 职员信息基本表表3.1职员信息基本表(employee)属性中文名称属性名类型长度说明职员工号e_nochar6统一顺序编号,具有唯一性职员姓名e_namechar20职员名称职员性别e_sexchar2职员性别职员年龄e_ageinteger年龄所属部门e_dep
16、char20所在部门 计算机采购信息基本表表3.2计算机采购信息基本表(computer)属性中文名称属性名类型长度说明采购批号c_nochar5统一编号,具有唯一性生产厂商c_ppchar20计算机生产厂商CPU型号c_cpuchar20内存型号c_memchar20硬盘型号c_diskchar20显示器型号c_dispchar20价格c_pricenumeric19采购日期c_datedate采购数量c_numinteger本批次采购数量其中批号通过计算机计算得出,用年月表示前4位,当月采购流水号作第5位,如09102表示2009年10月第2批购买。 计算机领用信息基本表表3.3计算机领用
17、信息基本表(ec)属性中文名称属性名类型长度说明固定资产编号f_nochar10统一编号,具有唯一性领用人工号e_nochar6计算机采购批号c_nochar5领用日期ec_datedate其中固定资产编号通过计算机计算得出,前6位用当前日期表示,后4位从0001开始顺序编号,该编号可以表示到目前为止的总设备数量。例如1204280009表示2012年4月28日领用,当前领用序号为0009,也可理解为到目前为止共领用了9台计算机。 用户基本表表3.4用户基本表(users)属性中文名称属性名类型长度说明用户标志useridchar10具有唯一性登录口令passwordchar10进入系统的口令
18、用户描述usernamechar20用户类型权限privelegechar6权限属性4 系统实施经过系统需求采集、分析,功能的设定;系统数据库的设计,数据流程的设计,一个计算机领用管理系统的基本框架已经出现在我的脑海里。剩下的工作就是将各个功能模块通过在开发环境中逐一实现。4.1 建立数据库首先根据PowerBuilder开发环境在D:bysj文件夹下建立bysj.db数据库文件,同时建立基本表,并设置相关主键及外键,其中三张表的相互关系图如下图:图4-1 基本表的关系图。4.2系统实现4.2.1建立工作空间及应用程序对象 建立应用程序对象bysj,然后创建登录w_login窗口,窗口类型为r
19、esponse!,窗口状态为最大化,并定义全局变量:string gs_userid定义窗口局部变量integer ii_count=3 /设置错误输入次数为3次图4-2 w_login窗口设计思路:定义两个变量接收用户输入的用户名称和登录口令,在用户基本表中查找与之匹配的记录,查找成功则进入主界面,否则清除输入框内容,返回重新输入。“确定”按钮的clicked!脚本为:string ls_useridstring ls_passwordinteger li_count ls_userid=trim(sle_userid.text)ls_password=trim(sle_password.t
20、ext)select count(*) into :li_count /从users表中查表from users where userid=:ls_userid and password=:ls_password;if li_count0 then /输入用户及口令与users表中数据匹配gs_userid=ls_userid /保存当前用户标志,以备退出屏保时匹配 closewithreturn(parent,ok) /返回参数elseii_count=ii_count - 1 /输入次数-1if ii_count=0 then halt close; /错误输入3次,退出程序message
21、box(提示,用户名或口令错误,请重新输入!)sle_userid.text=sle_password.text=sle_userid.setfocus()end if 创建w_main主窗口,窗口类型为mdihelp!,状态为最大化:图4-3 主窗口w_main设计思路:初始化用户界面并设置用户的权限。根据成功登录的用户名称查询其用户权限字段,左起第一位表示是否拥有数据录入权限,第二位表示是否拥有数据修改权限,第三位表示是否拥有数据查询权限,根据对应位的值设置对应菜单的”enabled”值;如果用户是系统管理员还拥有对一般用户的权限设置功能,而一般用户除了拥有系统管理员授予的功能外,则只能修
22、改自己的登录口令。为窗口定义ue_open事件:string ls_tempopen(w_login) /打开用户登录窗口ls_temp=message.stringparm /接受登录窗口的返回信息if ls_tempok then /如果没有登录成功 halt close;else /登录成功,根据用户权限初始化用户界面并设置用户的权限 select privelege into :ls_temp from users where userid=:gs_userid; if mid(ls_temp,1,1)=0 then /没有录入权限 m_menu.m_1.m_computer_inpu
23、t.enabled=false /电脑采购录入菜单不可用 m_menu.m_1.m_employee_input.enabled=false /职员信息录入菜单不可用 m_menu.m_1.m_ec_input.enabled=false /电脑领用信息录入菜单不可用 end if if mid(ls_temp,2,1)=0 then /没有修改权限 m_menu.m_2.m_computer_modify.enabled=false m_menu.m_2.m_employee_modify.enabled=false m_menu.m_2.m_ec_modify.enabled=false
24、end if if mid(ls_temp,3,1)=0 then /没有查询权限 m_menu.m_3.m_employee_query.enabled=false m_menu.m_3.m_ec_query.enabled=false m_menu.m_3.m_computer_query.enabled=false end if if lower(gs_userid)sa then /如果不是系统管理员 m_menu.m_4.m_users.text=修改口令 /只能修改自己的口令 end if idle(100) /100秒未动作进入屏保窗口end if应用程序bysj的open事件添
25、加脚本,连接数据库:SQLCA.DBMS = ODBCSQLCA.AutoCommit = FalseSQLCA.DBParm = ConnectString=DSN=bysjCONNECT;if sqlca.sqlcode=0 thenopen(w_main) /如果连接成功,则打开主窗口elsemessagebox(错误,不能和数据库建立连接。按任意键关闭系统.,stopsign!)halt close;end if 创建屏保窗口w_screensaver,窗口类型为response!,设置为窗口最大化,如下图:图4-4 w_screensaver屏保窗口设计思路:1) 在该窗口没有关闭之
26、前,不能操作应用软件中的任何功能;2) 必须输入当前用户标志和登录口令,才能进入到软件中;3) 屏幕保护窗口关闭后不破坏原来的工作状态。其中,“确定”按钮的事件脚本为:string ls_useridstring ls_passwordinteger li_countls_userid=sle_userid.textls_password=sle_password.textif ls_useridgs_userid then /如果不是当前用户则重新输入sle_userid.text=sle_password.text=sle_userid.setfocus()returnend if/判断数
27、据库中是否存在同名、同口令的用户,如果存在,则退出屏保窗口select count(*) into :li_count from users where userid=:ls_userid and password=:ls_password;if li_count0 thenclose(w_screensaver)elsesle_userid.text=sle_password.text=sle_userid.setfocus()end if4.2.2建立数据窗口对象创建10个数据窗口对象,分别对应职员信息录入、职员信息修改、职员信息查询、计算机采购信息录入、计算机采购信息修改、计算机采购信息
28、查询、领用信息录入、领用信息修改、领用信息查询和用户管理,并进行相应设置。最终结构分别为:图4-5 职员信息录入数据窗口图4-6 职员信息修改数据窗口图4-7 职员信息查询数据窗口图4-8 计算机领用信息录入数据窗口图4-9 计算机领用信息查询数据窗口图4-10 用户管理数据窗口4.2.3创建三个全局函数创建全局函数gf_getgh,设计思路:如果当前数据库中没有员工则初始化工号为000001,否则查询数据库中最大工号并递增1生成新工号。代码如下:/函数作用:根据数据库中的最大工号按序生成一个工号。/返回值:string类型,工号string ls_dbsn /数据库中当前的最大工号strin
29、g ls_sn /新生成的工号/从数据库中选择当前最大的工号select MAX(e_no) into :ls_dbsn from emplyee;if isnull(ls_dbsn) or ls_dbsn= then ls_sn=000001 /如果当前没有员工则初始化工号为000001else ls_sn=right(000000+string(integer(ls_dbsn)+1),6) /否则工号递增end ifreturn ls_sn创建全局函数gf_getbh,设计思路:固定资产编号由6位日期和4位领取序号生成。该序号也可以看成是到目前为止共领用的数量。利用函数取当前日期yyyym
30、mdd,并截取后六位作为固定资产编号的前6位,然后查询数据库中当前的最大编号,如果查询失败则初始化顺序号为0001,若查询成功则将顺序号递增1,并转换成4位字符串型附加在固定资产编号的后面作后4位编号。例如当前编号为1207230011表示2012年7月23日领取的总序号为11的资产。代码如下:string ls_part1 /当前日期string ls_dbsn /当前数据库中的最大编号string ls_sn /新生成的编号integer ls_temp ls_part1=right(string(today(),yyyymmdd),6)/从数据库中选择当前最大的编号select MAX(
31、f_no) into :ls_dbsn from ec;if ls_dbsn thenls_temp=integer(right(ls_dbsn,4) /取最大编号中的后4位即顺序号ls_temp +elsels_temp=1 /初始化序号end ifls_sn=ls_part1+right(0000+string(ls_temp),4)return ls_sn创建全局函数gf_getph,设计思路:大致同gf_getbh函数。代码如下:/函数作用:生成一个计算机采购批号,例如09102表示2009年1月第2批。/返回值:string类型,四位年月份mmdd加一位流水号,共5位string l
32、s_dbsn /数据库中当前的最大批号int ls_agrsn /参数中的的流水号,通常一月内采购次数不会超过9次string ls_sn /新生成的批号string ls_part1 /当前日期的年月作为批号前4位ls_part1=left(right(string(today(),yyyymmdd),6),4) /取当前日期的一部分作为编号的前4位 select MAX(c_no) into :ls_dbsn from computer; /从数据库中选择最近一次采购的批号if ls_part1left(ls_dbsn,4) thenls_agrsn=1 /本月第一次采购elsels_ag
33、rsn=integer(right(ls_dbsn,1)+1 /本月采购序号加1end ifls_sn=ls_part1+string(ls_agrsn)return ls_sn4.2.4创建操作窗口创建职员信息录入窗口w_employee_input:图4-11 w_employee_input窗口设计思路:插入一空白行,调用全局函数gf_getgh()获取一个合法的职员工号,调用数据窗口函数dw.setitem()对工号项进行赋值,利用数据窗口对象的itemchanged事件设置数据输入允许开关,同时设置数据输入限制。利用函数dw.update()更新数据库内容。“插入”按钮的click!
34、事件的脚本为;long ll_currow /用来保存当前要操作的数据行string ls_gh= /用来保存工号if ib_modified then ll_currow=dw_1.insertrow(0) /插入一行空白数据dw_1.scrolltorow(ll_currow) /滚动到新插入的行中dw_1.setcolumn(2) ls_gh=gf_getgh() /调用全局函数,获取一个合法工号if ib_modified then dw_1.setitem(ll_currow,e_no,ls_gh) ib_modified=false /设置开关状态 if dw_1.update()
35、=1 thencommit;return 0elseif messagebox(提示,数据错误,不能保存。是否继续关闭?,question!,yesno!,2)=1 thenreturn 0elserollback;return 0end ifend ifend ifend if数据窗口对象dw_1的itemchanged事件脚本为ib_modified=true /设置开关状态/以下为输入限制if dwo.name = e_sex thenif not match(data, 男女) then /性别只能输入男或女messagebox(输入错误,性别必须为男或女!) return 2end
36、if end if if dwo.name = e_age thenif integer(data)100 then /年龄不能小于16或大于100messagebox(输入错误,企业不收童工或超老年人!) return 2end if end if创建w_employee_modify_filter过滤窗口:图4-12 w_employee_modify_filter窗口设计思路:接收用户在过滤条件中输入的内容,利用字符串合成语句生成相应的SQL语句,作为数据窗口检索函数dw.setsqlselect()的参数。“重输”按钮表示清除当前输入的条件,重新输入,其clicked!事件脚本为:dw
37、_1.reset()dw_1.insertrow(0)“确定”按钮的clicked!事件脚本为:string ls_data /保存用户输入的数据string ls_colname /保存列名integer li_index /循环变量string ls_sql= /对应的SQL语句dw_1.accepttext() /避免dw_1中最后输入的内容被遗漏。for li_index=1 to integer(dw_1.object.datawindow.column.count)if li_index=4 then /第4列为非字符型,要单独处理ls_data=string(dw_1.getit
38、emnumber(1,li_index) elsels_data=dw_1.getitemstring(1,li_index) /获取第li_index列中的数据end ifif len(ls_data)0 then /如果输入了内容 ls_colname=dw_1.describe(#+string(li_index)+.dbname) ls_sql=ls_sql+ and (+ls_colname+ like %+ls_data+%)end ifnextif len(ls_sql)1 then ls_sql=trim(right(ls_sql,len(ls_sql)-6)end ifclo
39、sewithreturn(parent,ls_sql)创建w_employee_modify职员信息修改窗口:图4-13 w_employee_modify窗口设计思路:利用数据窗口对象函数dw.modifiedcount()和dw.deletedcount()判断数据窗口内容是否经过修改来确定是否更新数据库内容。其中窗口的open事件脚本为:dw_1.settransobject(sqlca)dw_1.retrieve()dw_1.setcolumn(3) /定焦在第3列,因为工号和姓名不能被改动。窗口的closequery事件的脚本为:integer li_flagif dw_1.modi
40、fiedcount()+dw_1.deletedcount()0 thenli_flag=messagebox(提示,数据已经修改,是否保存?,question!,yesnocancel!,1)choose case li_flagcase 1 /保存if dw_1.update()=1 thencommit;return 0elseif messagebox(提示,数据错误,不能保存。是否继续关闭?,question!,yesno!,2)=1 thenreturn 0elserollback;return 1end ifend ifcase 2rollback;return 0case 3
41、/取消return 1end chooseelsereturn 0end if“过滤”按钮的clicked!事件的脚本为:string ls_temp /保存原始SQL语句string ls_rtn= /保存过滤条件窗口中的返回值string ls_sql= /保存数据窗口dw_1对应的SQL语句open(w_employee_modify_filter) /打开过滤条件窗口ls_rtn=message.stringparm /保存返回的过滤条件ls_sql=dw_1.getsqlselect() /获取老的SQL语句if pos(lower(ls_sql),where)0 thenls_sql=left(ls_sql,pos(lower(ls_sql),where)-1)end ifls_temp=ls_sql /保留无where部分SQL语句if len(ls_rtn)0 then /返回了过滤条件ls_sql=ls_sql+ where +ls_rtndw_1.setsqlselect(ls_sql) /启用新的SQL语句dw_1.retrieve()el
链接地址:https://www.31ppt.com/p-3992826.html