• PL/SQL过程_oracle

    PL/SQL过程_oracle

          要想利用PL/SQL程序完成比较完整的数据库任务,需要进一步学习一些高级设计要素的内容。前面编写执行的PL/SQL程序,共同的特点是没有名称,只能存储为文件,然后通过执行文件的方式执行,因此称为无名块。与此对应的是在PL/SQL中也引入了高级程序设计的一些概念,其中最重要的就是过程。     过程就是高级程序设计语言中的模块的概念,将一些内部联系的命令组成一个个过程,通过参数在过程之间传递数据是模块化设计思想的重要内容。 创建过程     1. 过程的语法结构     完整的过程结构如下:     create or replace procedure 过程名 as         声明语句段;     begin         执行语句段;     exception         异常处理语句段;     end;     2. 过程的特点     过程是有名称的程序块,as关键词代替了无名块的declare。     3. 创建过程实例     在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序将创建名为tempprocedure的过程,create是创建过程的标识符,replace表示若同名过程存在将覆盖原过程。该过程定义了一个变量,其类型和testtable数据表中的currentdate字段类型相同,都是日期型,将数据表中的recordnumber字段为88的currentdate字段内容送入变量中,然后输出结果。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     set serveroutput on     create or replace procedure tempuser.tempprocedure as       tempdate tempuser.testtable.currentdate%type;     begin       select currentdate       into tempdate       from testtable       where recordnumber=88;       dbms_output.put_line(to_char(tempdate));     end;     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【配套程序位置】:第9章/ createprocedure.sql。     执行结果如图9.41所示。 查询过程     登录【企业管理器】,在【管理目标导航树】里选择【网络】/【数据库】/【myoracle.mynet】/【方案】/【过程】/【TEMPUSER】选项,出现如图9.42所示的创建好的过程。 修改过程     (1)在【SQLPlus Worksheet】的【菜单栏】选择【文件】/【打开】菜单命令,将创建过程的createprocedure.sql文件调出进行修改,修改完毕后重新执行创建过程。     (2)在【企业管理器】里选中要修改的过程,用鼠标右键单击,在出现的快捷菜单里选择【查看/编辑详细资料】选项,如图9.43所示。     (3)出现如图9.44所示的编辑过程的【一般信息】选项卡。在【文本编辑区】可以编辑该过程,单击“确定”按钮将更新该过程,单击“编译”按钮将编译该过程的 PL/SQL 源代码,使该过程可以在数据库中存储和执行。 执行过程     要执行创建的过程,必须通过主程序来调用过程。     在【SQLPlus Worksheet】中执行下列PL/SQL程序,执行结果如图9.45所示。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     set serveroutput on     begin         tempprocedure;     end;     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【配套程序位置】:第9章/ executeprocedure.sql。     在Oracle中,创建好的过程可以被任何程序调用。 带参数的过程     前面介绍的过程没有参数,主程序和过程没有数据的传递,下面介绍带参数的过程的设计和使用。     1. 参数类型     在PL/SQL过程中,可以有3种类型的参数。     in参数:读入参数,主程序向过程传递参数值。     out参数:读出参数,过程向主程序传递参数值。     in out 参数:双向参数,过程与主程序双向交流数据。     2. 定义带参数的过程     在下面的PL/SQL程序代码中,将创建三个调用参数。     tempdeptno:类型为in,与scott.dept.deptno的类型一致,为数值型。     tempdname:类型为out,与scott.dept.dname的类型一致,为字符型。     temploc:类型为in out,与scott.dept.loc类型一致,为字符型。     创建两个过程内参数。     loc1:与scott.dept.loc的类型一致,为字符型。     dname1:与scott.dept.dname的类型一致,为字符型。     该带参数的过程的功能是从数据表scott.dept中寻找deptno字段等于tempdeptno调用参数值的dname和loc字段,和其他字符组合,送给两个出口参数。     以system用户名、sysdba身份登录【SQLPlus Worksheet】,执行下列PL/SQL程序,执行结果如图9.46所示。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     Set serveroutput on     create or replace procedure scott.tempprocedure(         tempdeptno in scott.dept.deptno%type,         tempdname out scott.dept.dname%type,         temploc in out scott.dept.loc%type)as         loc1 scott.dept.loc%type;         dname1 scott.dept.dname%type;     begin         select loc into loc1         from scott.dept         where deptno=tempdeptno;         select dname into dname1         from scott.dept         where deptno=tempdeptno;         temploc:='地址:'||loc1;         tempdname:='姓名'||dname1;     end;     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【配套程序位置】:第9章/ createscottprocedure.sql。     调用参数分割用“,”号。     3. 使用带参数的过程     在主程序中的实际参数和过程中的形式参数的传递有很多种办法,这里推荐读者采用一一对应的办法,按对应的位置传递参数。要求实际参数和形式参数在数据类型和位置排列上做到完全一致。     在【SQLPlus Worksheet】中执行下列PL/SQL程序,该程序调用带参数的过程scott.tempprocedure,实际参数为(10,’’,’’)     执行结果如图9.47所示。     【配套程序位置】:第9章/ executescottprocedure.sql。     读者可以尝试改变参数值,然后测试过程执行结果。

  • PL/SQL程序结构_oracle

    PL/SQL程序结构_oracle

        表中的sysdate为系统时间函数;dbms_output为系统默认的程序包,put_line为包中定义的方法,功能是输出信息;在Oracle中,所有对数据库数据的更改并没有直接操作数据库,而是放在叫工作区的内存里,只有在commit语句执行后,才发生永久更改。 PL/SQL程序结构     结合上述实例进行分析,完整的PL/SQL程序结构可以分为3个部分。     1. 定义部分     以Declare为标识,在该部分中定义程序中要使用的常量、变量、游标和例外处理名称,PL/SQL程序中使用的所有定义必须在该部分集中定义,而在高级语言里变量可以在程序执行过程中定义。     2. 执行部分     以begin为开始标识,以end为结束标识。该部分是每个PL/SQL程序所必备的,包含了对数据库的操作语句和各种流程控制语句。     3. 异常处理部分     该部分包含在执行部分里面,以exception为标识,对程序执行中产生的异常情况进行处理。一个完整的PL/SQL程序的总体结构如图9.5所示。     有的程序比较简单,往往省略异常处理部分。下面开始介绍PL/SQL的一些基本语法要素。

  • 安装Oracle 9i数据库服务器_oracle

    安装Oracle 9i数据库服务器_oracle

         (5)出现如图2.8所示的【安装类型】界面。      (6)出现如图2.9所示的【数据库配置】界面。     (7)出现如图2.10所示的【数据库标识】界面。在【全局数据库名】文本框里输入名称“myoracle.mynet”后,在【SID】文本框里自动生成“myoracle”,单击"下一步"按钮。      (8)出现如图2.11所示的【数据库文件位置】界面。      (9)出现如图2.12所示的数据库字符集界面。     (10)出现如图2.13所示的【摘要】界面。     (11)安装过程开始复制文件,在进行到整个过程的44%时,出现如图2.14所示的【磁盘位置】界面。     (12)在安装进程进行到87%时,出现磁盘位置界面。     (13)出现如图2.15所示的【配置工具】界面,安装程序将自动完成4项任务。     (14)调用的【数据库配置助手】界面如图2.16所示。     (15)【Oracle数据库配置助手】配置成功后出现如图2.17所示的界面。     (16)出现如图2.18所示的【安装结束】界面。 2.1.7 安装结果     逻辑上来看实际上包括3个部分。     一个管理客户机。     一个数据库服务器。     一个数据库:【全局数据库名】为myoracle.mynet

  • 教你设计大型Oracle数据库_oracle

    教你设计大型Oracle数据库_oracle

    一、概论   超大型系统的特点为:   1、处理的用户数一般都超过百万,有的还超过千万,数据库的数据量一般超过1TB;   2、系统必须提供实时响应功能,系统需不停机运行,要求系统有很高的可用性及可扩展性。   为了能达到以上要求,除了需要性能优越的计算机和海量存储设备外,还需要先进的数据库结构设计和优化的应用系统。   一般的超大型系统采用双机或多机集群系统。下面以数据库采用Oracle 8.0.6并行服务器为例来谈谈超大型数据库设计方法:   确定系统的ORACLE并行服务器应用划分策略   数据库物理结构的设计   系统硬盘的划分及分配   备份及恢复策略的考虑   二、Oracle并行服务器应用划分策略   Oracle并行服务器允许不同节点上的多个INSTANCE实例同时访问一个数据库,以提高系统的可用性、可扩展性及性能。Oracle并行服务器中的每个INSTANCE实例都可将共享数据库中的表或索引的数据块读入本地的缓冲区中,这就意味着一个数据块可存在于多个INSTANCE实例的SGA区中。那么保持这些缓冲区的数据的一致性就很重要。Oracle使用 PCM( Parallel Cache Management)锁维护缓冲区的一致性,Oracle同时通过I DLM(集成的分布式锁管理器)实现PCM 锁,并通过专门的LCK进程实现INSTANCE实例间的数据一致。   考虑这种情况:INSTANCE1对BLOCK X块修改,这时INSTANCE2对BLOCK X块也需要修改。Oracle并行服务器利用PCM锁机制,使BLOCK X从INSTANCE 1的SGA区写入数据库数据文件中,又从数据文件中把BLOCK X块读入INSTANCE2的SGA区中。发生这种情况即为一个PING。PING使原来1个MEMORY IO可以完成的工作变成2个DISK IO和1个 MEMORY IO才能够完成,如果系统中有过多的PING,将大大降低系统的性能。   Oracle并行服务器中的每个PCM锁可管理多个数据块。PCM锁管理的数据块的个数与分配给一个数据文件的PCM锁的个数及该数据文件的大小有关。当INSTANCE 1和INSTANCE 2要操作不同的BLOCK,如果这些BLOCK 是由同一个PCM锁管理的,仍然会发生PING。这些PING称为FALSE PING。当多个INSTANCE访问相同的BLOCK而产生的PING是TRUE PING。   合理的应用划分使不同的应用访问不同的数据,可避免或减少TRUE PING;通过给FALSE PING较多的数据文件分配更多的PCM锁可减少 FALSE PING的次数,增加PCM锁不能减少TRUE PING。   所以,Oracle并行服务器设计的目的是使系统交易处理合理的分布在INSTANCE实例间,以最小化PING,同时合理的分配PCM锁,减少FALSE PING。设计的关键是找出可能产生的冲突,从而决定应用划分的策略。应用划分有如下四种方法:   1、根据功能模块划分,不同的节点运行不同的应用   2、根据用户划分,不同类型的用户运行在不同的节点上   3、根据数据划分,不同的节点访问不同的数据或索引   4、根据时间划分,不同的应用在不同的时间段运行   应用划分的两个重要原则是使PING最小化及使各节点的负载大致均衡。   三、数据库物理结构的设计   数据库物理结构设计包括确定表及索引的物理存储参数,确定及分配数据库表空间,确定初始的回滚段,临时表空间,redo log files等,并确定主要的初始化参数。物理设计的目的是提高系统的性能。整个物理设计的参数可以根据实际运行情况作调整。   表及索引数据量估算及物理存储参数的设置   表及索引的存储容量估算是根据其记录长度及估算的最大记录数确定的。在容量计算中考虑了数据块的头开销及记录和字段的头开销等等。表及索引的initial和next存储参数一般设为相等,pctincrease设为0。  

  • DB2文件导入导出常见命令总结_oracle

    DB2文件导入导出常见命令总结_oracle

        Db2 的数据迁移,最常用的就是导入导出功能,而导入导出的命令貌似简单,实则内含玄机,千变万化,稍不留神,则错误百出,这儿就工作中常用到的命令,总结了一下,分享给大家!欢迎大家踊跃拍砖!J     当然在这以前,我觉得有必要提及一点关于导入导出基础的知识!     DEL:界定的ASCII文件,行分隔符和列分隔符将数据分开。     ASC:定长的ASCII文件,行按照行分割符分开,列定长。     PC/IXF:只能用来在db2之间导数据,根据类型数字值被打包成十进制或者二进制,字符被保存为ASCII,只保存变量已经使用了的长度,文件中包括表的定义和表的数据。     WSF:工作表方式导入导出,这种格式的文件类型用的比较少。     Db2中对不同的数据导入导出方式,支持不同的文件类型,这里个人觉得很有必要注意的。     文件类型 Import export load     -------------------------------------------------------     定界 支持 支持 支持     非定界 支持 不支持 支持     Ixf 支持 支持 支持     Wsf工作表 支持 支持 不支持     关于3种导入导出操作进行简单的介绍:     export:导出数据,支持IXF,DEL或WSF     import:导入数据,可以向表中导入数据,支持上面提到的4种文件类型。     load:导入数据,功能和import基本相同。支持以上说的几种文件类型。     关于Export     这个其实比较简单,没啥好说的,一般命令:export to filename of filetype select x from xx where ;就ok了,这里需要注意的是:     1. 关于不同字符集的导出     MODIFIED BY CODEPAGE=     Exprot to filename.del for del MODIFIED BY CODEPAGE=1386 select … from …where …;     这里,在数据从数据库倒出来的时候就会做一个数据库代码页的转换     2.时间字段格式化的     MODIFIED BY TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt"     例:Exprot to filename.del for del MODIFIED BY TIMESTAMPFORMAT="yyyy-mm-dd hh:mm:ss tt" select … from …where …;     关于Import     1.Import模式的介绍     CREATE/INSERT/INSERT_UPDATE/REPLACE/REPLACE_CREATE     CREATE :首先创建目标表和它的索引,然后将数据导入到新表中。该选项惟一支持的文件格式是 PC/IXF。还可以指定新表所在表空间的名称     INSERT :将导入的数据插入表中。目标表必须已经存在。     INSERT_UPDATE :将数据插入表中,或者更新表中具有匹配主键的行。目标表必须已经存在,并且定义了一个主键。     REPLACE :删除所有已有的数据,并将导入的数据插入到一个已有的目标表中。     REPLACE_CREATE :如果目标表已经存在,则导入实用程序删除已有的数据,并插入新的数据,就像 REPLACE 选项那样。如果目标表还没有定义,那么首先创建这个表以及它的相关索引,然后再导入数据。正如您可能想像的那样,输入文件必须是 PC/IXF 格式的文件,因为那种格式包含对导出表的结构化描述。如果目标表是被一个外键引用的一个父表,那么就不能使用 REPLACE_CREATE。     2. 批量提交     COMMITCOUNT,保证insert的数据在COMMITCOUNT以后进行一次commit,这对于大数据量的导入文件来说是一个不错的方法,     例:Import from filename of del COMMITCOUNT 50000 insert into tabname;

  • 研究生管理信息系统的开发流程_oracle

    研究生管理信息系统的开发流程_oracle

      系统需求分析     研究生个人信息管理     导师信息管理     专业信息管理 功能模块设计     针对上述需求,设计的功能模块如图10.34所示。 数据表设计     1.研究生信息数据表     数据表名称:graduate_info。数据表结构如表10.4所示。     2.专业信息数据表     3.导师信息数据表 索引和视图设计     1.研究生信息数据表的索引和视图设计     2.专业信息表的索引和视图设计     3.导师信息数据表的索引和视图设计 创建数据库用户     (1)在如图10.35所示的创建用户的【一般信息】选项卡中进行如下设置。     (2)切换到如图10.36所示的创建用户的【角色】选项卡。     (3)成功创建上述用户的SQL代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     CREATE USER "GRADUATEUSER" PROFILE "DEFAULT"         IDENTIFIED BY "12345678" DEFAULT TABLESPACE "USERS"         TEMPORARY TABLESPACE "TEMP"         ACCOUNT UNLOCK;     GRANT UNLIMITED TABLESPACE TO "GRADUATEUSER";     GRANT "CONNECT" TO "GRADUATEUSER";     GRANT "RESOURCE" TO "GRADUATEUSER";     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【参见光盘文件】:第10章/creategraduateuser.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行creategraduateuser.sql文件创建用户。 创建数据表     1.创建研究生信息表     (1)在如图10.37所示的创建表的【一般信息】选项卡中进行如下操作。     (2)切换到如图10.38所示的创建表的【约束条件】选项卡。     (3)上述创建数据表graduateuser.graduate_info的SQL代码如下。     (3)上述创建数据表graduateuser.graduate_info的SQL代码如下。     (4)读者可以直接在【SQLPlus Worksheet】中执行createtablegraduateinfo.sql 文件创建数据表graduateuser.graduate_info。     2.创建专业信息表     (1)在如图10.39所示的创建表的【一般信息】选项卡中按照如图所示进行设置。     (2)切换到如图10.40所示的创建表的【约束条件】选项卡。     (3)上述创建数据表graduateuser.major_info的SQL代码如下。     【参见光盘文件】:第10章/createtablemajorinfo.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createtablemajorinfo.sql文件创建数据表graduateuser.major_info。     3.创建导师信息表     (1)在如图10.41所示的创建表的【一般信息】选项卡中按照如图所示进行设置。     (2)切换到如图10.42所示的创建表的【约束条件】选项卡。     (3)上述创建数据表graduateuser.director_info的SQL代码如下。     【参见光盘文件】:第10章/createtabledirectorinfo.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createtabledirectorinfo.sql 文件创建数据表graduateuserdirector_info。 创建索引     1.为研究生信息表的NAME字段建立索引     (1)在如图10.43所示的创建索引的【一般信息】选项卡中按照图示进行操作。     (2)其他选项卡按照默认设置即可。     (3)上述创建索引的SQL代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     CREATE INDEX "GRADUATEUSER"."研究生姓名字段索引"         ON "GRADUATEUSER"."GRADUATE_INFO"("NAME")         TABLESPACE "INDX"     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【参见光盘文件】:第10章/createindexgraduate.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createindexgraduate.sql 文件创建数据表graduateuser.graduate_info的索引“研究生姓名字段索引”。     2.为导师信息表的NAME字段建立索引     (1)在如图10.44所示的创建索引的【一般信息】选项卡中按照图示进行操作。     (2)其他选项卡按照默认设置即可。     (3)上述创建索引的SQL代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     CREATE INDEX "GRADUATEUSER"."导师姓名字段索引"        ON "GRADUATEUSER"."DIRECTOR_INFO"("NAME")        TABLESPACE "INDX"     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【参见光盘文件】:第10章/createindexdirector.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createindexdirector.sql 文件创建数据表graduateuser.director_info的索引“导师姓名字段索引”。 创建视图     1.为研究生信息表建立视图     (1)在如图10.45所示的创建视图的【一般信息】选项卡中按照图示进行操作。     (2)其他选项卡按照默认设置即可。     (3)上述创建视图的SQL代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     CREATE OR REPLACE VIEW "GRADUATEUSER"."VIEW_GRADUATE" AS         select *         from graduateuser.graduate_info WITH READ ONLY     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【参见光盘文件】:第10章/createviewgraduate.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createviewgraduate.sql文件创建数据表graduateuser.graduate_info的视图“VIEW_GRADUATE”。     2.为专业信息表建立视图     (1)在如图10.46所示的创建视图的【一般信息】选项卡中按照图示进行操作。     (2)其他选项卡按照默认设置即可。     (3)上述创建视图的SQL代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     CREATE OR REPLACE VIEW "GRADUATEUSER"."VIEW_MAJOR" AS         select *         from graduateuser.major_info WITH READ ONLY     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【参见光盘文件】:第10章/createviewmajor.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createviewmajor.sql文件创建数据表graduateuser.major_info的视图“VIEW_MAJOR”。     2.为导师信息表建立视图     (1)在如图10.47所示的创建视图的【一般信息】选项卡中按照图示进行操作。     (2)其他选项卡按照默认设置即可。     (3)上述创建视图的SQL代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     CREATE OR REPLACE VIEW "GRADUATEUSER"."VIEW_DIRECTOR" AS        select *        from graduateuser.director_info WITH READ ONLY     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     【参见光盘文件】:第10章/createviewdirector.sql。     (4)读者可以直接在【SQLPlus Worksheet】中执行createviewdirector.sql 文件创建数据表graduateuser.director_info的视图“VIEW_DIRECTOR” VB工程总体框架     开发完成的研究生管理信息系统的总体框架如表10.7所示。     【参见光盘文件】:第10章/研究生管理信息系统.vbp。 系统是如何运行的     (1)启动VB,打开配套光盘的工程文件。     (2)如图10.48所示。     (3)出现如图10.49所示的工程属性的【通用】选项卡。     (4)打开模块Module1,查看名为Main的过程的代码如下。说明Main过程将启动名为frmMain的主窗体。     (5)编辑名为frmMain的主窗体,如图10.50所示。     (6)出现如图10.51所示的【菜单编辑器】界面,可以查看主窗体的菜单设计。     工程中设计的菜单如表10.8所示。     (7)为什么这些菜单可以调用这些子窗体或者执行退出主窗体的操作呢?在图10.50的主窗体中用鼠标双击,在出现的代码窗口中的主要代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     ‘选择菜单项DirectorInsertMenu后将显示子窗体FormInsertDirector     Private Sub DirectorInsertMenu_Click()        FormInsertDirector.Show     End Sub     ‘选择菜单项DirectorSelectMenu 后将显示子窗体FormSelectDirector     Private Sub DirectorSelectMenu_Click()       FormSelectDirector.Show     End Sub     ‘选择菜单项DirectorUpdateMenu后将显示子窗体FormUpdateDirector     Private Sub DirectorUpdateMenu_Click()      FormUpdateDirector.Show     End Sub     ‘选择菜单项GraduateInsertMenu后将显示子窗体FormInsertGraduate     Private Sub GraduateInsertMenu_Click()      FormInsertGraduate.Show     End Sub     ‘选择菜单项GraduateSelectMenu后将显示子窗体FormSelectGraduate     Private Sub GraduateSelectMenu_Click()       FormSelectGraduate.Show     End Sub     ‘选择菜单项GraduateUpdateMenu后将显示子窗体FormUpdateGraduate     Private Sub GraduateUpdateMenu_Click()       FormUpdateGraduate.Show     End Sub     ‘选择菜单项MajorInsertMenu后将显示子窗体FormInsertMajor     Private Sub MajorInsertMenu_Click()       FormInsertMajor.Show     End Sub     ‘选择菜单项MajorUpdateMenu后将显示子窗体FormUpdateMajor     Private Sub MajorUpdateMenu_Click()       FormUpdateMajor.Show     End Sub     ‘选择菜单项ExitMenu后将显示退出主窗体     Private Sub ExitMenu_Click()       End     End Sub     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 模块的设计     模块Module1的其他主要代码如下。     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD     ‘定义了名为ConnectString的无参数函数,连接数据库     Public Function ConnectString() As String         ConnectString = "DSN=graduateDB;UID=graduateuser;PWD=12345678"     End Function     ‘定义了名为ExecuteSQL的带参数函数,参数SQL和MsgString都为字符串型。该函数用于执行SQL语句。     Public Function ExecuteSQL(ByVal SQL As String, MsgString As String) As ADODB.Recordset        ‘conn为ADODB的connection连接对象        Dim conn As ADODB.Connection        ‘rest为ADODB的记录集对象        Dim rest As ADODB.Recordset        ‘若执行SQL错误转向ExecuteSQL_Error标记处        On Error GoTo ExecuteSQL_Error        Set conn = New ADODB.Connection        ‘连接数据库        conn.Open ConnectString        Set rest = New ADODB.Recordset        ‘执行SQL字符串语句        rest.Open Trim$(SQL), conn, adOpenKeyset, adLockOptimistic        Set ExecuteSQL = rest        MsgString = "查询到" & rest.RecordCount & " 条记录"        ‘执行SQL完毕后关闭连接和记录集        ExecuteSQL_Exit:        Set rest = Nothing        Set conn = Nothing        Exit Function        ‘执行SQL错误时的处理方法        ExecuteSQL_Error:        MsgString = "查询错误: " & _        Err.Description        Resume ExecuteSQL_Exit        End Function        ‘定义了名为Checktxt的带参数函数,参数txt为字符串型。该函数用于检测txt字符串是否有内容。        Public Function Checktxt(txt As String) As Boolean            If Trim(txt) = "" Then                Checktxt = False            Else                Checktxt = True            End If     End Function     DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD 各子窗体的设计     1.添加信息窗体的设计     打开名为FormInsertGraduate的子窗体,如图10.52所示。     窗体的设计如表10.8所示。 表10.8 子窗体FormInsertGraduate的设计     窗体的程序代码分析如下。     2.修改信息窗体的设计     打开名为FormUpdateGraduate的子窗体,如图10.53所示。     窗体的设计如表10.10所示。     窗体的程序代码分析如下。     3查询信息窗体的设计     打开名为FormSelectGraduate的子窗体,如图10.54所示。窗体的设计如表10.11所示。     窗体的代码设计如下。

更多...

加载中...