数据库操作与管理:Microsoft Access 宏定义与 DB2 系统详解
在数据库管理和操作中,Microsoft Access 和 DB2 是两款功能强大的工具。下面将详细介绍 Microsoft Access 中的宏定义以及 DB2 数据库系统的相关内容。
Microsoft Access 中的宏定义
在 Microsoft Access 里,表单是与数据库交互的重要方式。我们可以直接将属性值写入对应的绑定控件,并且表单还支持对数据库进行查询操作,在“编辑”菜单中有友好的“查找”选项。要修改属性值,只需选择元组,然后在显示旧属性值的槽中直接写入新值,通过移动到不同元组(通常按 Page - Up 或 Page - Down 键滚动表单元素)即可使修改生效。表单通常基于单个表构建,也可以定义包含其他表单的表单,通过指定表单中值之间的链接来实现。例如,对于存在一对多关系的表,可以用包含的表单展示与主表单元素相关联的所有元素。
报告的定义方式与表单类似,使用的工具和概念也几乎相同。但报告的主要目的是对数据库内容进行概要描述,通常包含计算控件来计算聚合函数,不允许查看特定元组,并且一般用于打印而非交互式使用。
宏是指定系统必须执行的一组操作的方式,能实现任务执行的自动化。使用宏可以完成以下操作:
1.
表单与表单或报告交互
:例如,在描述客户数据的表单中添加按钮,激活描述订单的表单,展示该客户的订单数据;还能添加按钮打印列出客户信用余额及商品订购、交付和支付总额的报告。
2.
自动选择和分组元组
:在表单中插入按钮,可立即选择满足给定条件的元组。
3.
为属性赋值
:使用宏可以将从其他控件或数据库其他表中获取的值赋给表单的控件。
4.
保证数据正确性
:宏对表单中数据的操作和验证非常有用,可定义宏对属性的不同错误值做出不同提示,确保插入数据的正确性。
5.
设置表单、报告和属性的属性
:能自动更改这些对象的任何属性,如在需要表单内容但不想显示时将其设为不可见。
6.
自动化数据传输
:若需要在 Access 和其他应用程序之间反复传输数据(读写),可以使用宏实现自动化。
7.
创建自定义环境
:指定宏在每次打开数据库时打开一组表、查询、表单和报告,还能个性化工具栏。
8.
指定对特定事件的反应
:对于表单的每个元素,可指定在访问、选择或修改该元素的事件发生后执行哪个宏。但要注意,这种反应行为仅在使用特定表单操作数据库时才会出现,若直接在 SQL 中执行相同操作或使用其他表单,则不会检测到访问或修改事件。
定义宏的步骤如下:首先,在主数据库窗口中选择“宏”组件的“新建”选项,此时 Access 会显示宏设计窗口。窗口上半部分是一个有两列(“操作”和“注释”)的表格,宏由“操作”列中描述的一系列操作组成,每行一个操作,可添加简要描述。表格下半部分显示一组属性,为每个操作指定参数。还可以添加“条件”列来指定命令执行时必须验证的条件,也能使用简单的控制结构。
可用的命令分为多个家族,以下是各家族中比较重要的命令:
|命令家族|具体命令|
| ---- | ---- |
|执行|RunCommand(调用命令,如菜单选项)、OpenQuery(执行查询)、RunMacro(执行宏)、RunSQL(执行 SQL 命令)、RunApp(执行外部应用程序)、CancelEvent(忽略事件)、Quit(关闭会话)、StopMacro(终止宏的执行)、StopAllMacros(终止所有宏的执行)|
|数据访问|ApplyFilter(对元组应用选择条件)、FindNext(移动到下一个元组)、FindRecord(访问一个元组)、GotoControl(将光标定位在表单控件中)、GoToRecord(转到特定元组)|
|数据修改|SetValue(为属性分配特定值)、DeleteObject(删除对象)、OpenForm、OpenQuery、OpenReport、OpenTable(分别打开表单、查询、报告和表的命令)|
下面是一个简单的宏示例,该宏与 ITEM 表的 Price 属性修改相关。如果 Price 大于 1000,则将 Expensive 属性的值设为 Yes,否则设为 No。
DB2 数据库系统概述
DB2 Universal Database 属于 IBM 生产的“历史悠久”的数据库管理系统家族。其最早的成员是 SQL/DS,它是基于关系模型的首批商业系统之一,于 80 年代初由 IBM 推出。而 SQL/DS 又源于 System R,这是 70 年代初在 IBM 圣何塞研究实验室开发的首批关系型数据库管理系统原型之一,SQL 语言也正是在这个原型的开发环境中诞生的,后来成为所有基于关系模型的数据库管理系统的标准。
DB2 除了完全支持关系模型外,还提供了一些面向对象的特性和丰富的高级功能:
1.
支持非传统数据类型管理
:如文本、图像、声音和视频。
2.
支持用户定义的数据类型和函数管理
。
3.
SQL 扩展
:包含强大的在线分析处理(OLAP)运算符和用于指定递归查询的特殊构造。
4.
支持并行性
:基于“共享内存”配置(数据库由对称多处理(SMP)机器管理)和“无共享”配置(数据库在通过网络连接的不同机器之间进行分区)。
DB2 的服务器组件可在 Windows NT、OS/2 和多种基于 Unix 的平台上使用,客户端组件可在 Windows 和 Macintosh 个人计算机环境中使用。客户端和服务器可以基于广泛使用的通信协议标准(如 TCP/IP、NetBios 等)进行通信。此外,DB2 系统可以通过分布式关系数据库架构(DRDA)协议参与异构和分布式多数据库环境,该协议也被许多其他数据库管理系统采用。最后,DB2 支持主要的接口标准(如 ODBC、JDBC),并遵循 SQL - 2 标准。
DB2 系统版本
DB2 系统有四个版本,可管理复杂度不断增加的架构:
1.
个人版
:适用于个人计算机,可在 Windows 和 OS/2 环境中使用,允许创建和操作单用户数据库。
2.
工作组版
:允许本地和远程用户及应用程序共享访问本地数据库,可在最多具有四个处理器的对称多处理机器上使用。
3.
企业版
:允许本地和远程用户及应用程序共享访问本地和远程数据库,可在具有四个以上处理器的对称多处理机器上使用,还能参与通过 DRDA 协议通信的多数据库系统架构。
4.
企业扩展版
:除了具备企业版的功能外,还允许将数据库在通过通信网络连接的多台计算机之间进行分区,每台计算机可以是具有四个以上处理器的并行机器。
对于每个版本,系统都提供了一个应用程序开发环境(软件开发工具包),支持多种编程语言(如 C、C++、Java)。此外,还有一些与 DB2 互补的 IBM 产品,包括用于异构数据库集成的工具(DB2 DataJoiner)、用于数据仓库开发的产品(Visual Warehouse)、OLAP 工具(DB2 OLAP Server)和一组数据挖掘应用程序(Intelligent Miner)。
DB2 的实例和模式
在同一台计算机上可以定义多个不同的 DB2 服务器实例,每个实例都有名称和自己的配置,可管理多个数据库,这些数据库归该实例所有。例如,可以为运营应用程序和决策支持应用程序分别定义和配置不同的 DB2 实例。安装 DB2 时会创建一个预定义实例,名为 db2。实例的数据库组织成具有名称的模式,模式由表集合组成,新表默认插入与用户账户同名的模式中。
DB2 客户端拥有可访问的实例和数据库列表,并提供创建新实例、新模式和新数据库的工具。要与服务器交互,客户端必须先访问一个 DB2 实例,然后与该实例的一个数据库建立连接。客户端可以同时连接到一个实例的多个数据库,并可以在实例级别(如创建新数据库)和数据库级别(通常是 SQL 语句)发送 DB2 命令。如果在 DB2 操作中未指定模式名称,则引用默认模式。
与 DB2 交互的方式
与 DB2 数据库交互有两种方式:
1.
交互式方式
:将 SQL 命令发送到系统,结果会立即显示在屏幕上,提供了简单的文本界面和用户友好的图形界面。
2.
通过执行嵌入 SQL 命令的传统编程语言程序
:有静态 SQL 和动态 SQL 两种方式。静态 SQL 在编译时已知 SQL 语句的结构,而动态 SQL 在运行时生成 SQL 语句。与其他数据库管理系统不同,DB2 不提供 4GL(即专门的应用程序开发语言),虽然这意味着需要外部编译器来开发应用程序,但能创建易于在不同系统之间移植的软件。
数据库操作与管理:Microsoft Access 宏定义与 DB2 系统详解
DB2 数据库管理
交互式工具
-
命令行处理器(CLP)
:这是与 DB2 交互最简单的方式,是一个文本环境,在所有平台都可用。在操作系统层面使用
db2命令调用。它能接受 SQL 和 DB2 管理命令,并将结果和消息直接显示在屏幕上。若命令超过一行,需用反斜杠\表示续行。在 CLP 环境中,若未使用db2start命令显式激活数据库服务器,则无法访问数据库。例如,当系统提示db2 =>时,表示系统准备好接收命令。 - 控制中心 :可用于数据库管理,包括表创建、完整性约束定义、授权控制、备份和恢复等操作。其界面有两个主要窗口,左边窗口按层次结构显示可用的 DB2 对象(实例、数据库、表等),用户可显式声明这些对象,也可让控制中心在本地网络搜索可访问的所有 DB2 对象。右边窗口显示左边窗口中所选对象的信息。例如,若有两台包含 DB2 对象的机器(Bernina 和 Cad2),可在左边窗口查看它们的相关信息,点击右边窗口可查看具体数据库中的表等内容。
-
命令中心
:允许用户输入和执行 SQL 命令,还能编写脚本(即一系列要执行的 SQL 语句)。它由三个集成环境组成:
- 脚本环境 :可输入单个 SQL 命令或 SQL 命令序列,也接受 DB2 数据库管理命令。输入命令后,点击齿轮状的“执行”图标即可执行,结果会显示在“结果环境”中。输入的命令或脚本可保存到文件或脚本中心以便后续执行。
- 结果环境 :显示 SQL 命令执行的结果。
- 访问计划环境 :显示 DB2 优化器为执行在脚本环境中输入的 SQL 命令创建的访问计划。访问计划呈树状结构,叶子节点对应 SQL 命令涉及的表,内部节点对应系统执行命令的操作,如扫描表、表连接、中间结果排序等。点击窗口顶部的相应图标可创建访问计划,点击节点可获取操作的相关数据,如执行成本和结果基数的详细估计,通过分析访问计划可优化查询,如引入索引避免排序操作。
- 脚本中心 :可创建、修改和安排命令序列,这些命令可以是 SQL、DB2 或操作系统语句。脚本可立即运行,也可安排在特定日期和时间执行,还能设置为重复执行,如“每周六凌晨 3 点”。使用时需明确脚本包含的是 DB2 语句(包括 SQL 命令)还是操作系统命令。
- 日志 :记录数据库中发生的所有事件,可用于查看执行的查询/更新操作(作业面板)、执行的备份/恢复操作(恢复面板)、系统自动生成的注意信号(警报面板)以及系统执行各种操作生成的所有消息(消息面板)。
- 信息中心 :提供大量关于 DB2 系统的信息,可用于获取各种主题的帮助,如“表的创建”“数据库的备份”等主题的描述、DB2 消息和错误代码的解释以及说明 DB2 各种功能的示例程序列表。
应用程序
-
静态 SQL
:在大多数数据库应用中使用。以下是一个嵌入 C 语言的静态 SQL 程序示例,该程序访问包含
EMPLOYEE和DEPARTMENT表的数据库,读取输入的地点名称,并按部门排序打印该地点部门员工的姓名和工资。
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <sqlenv.h>
exec sql include sqlca;
void main() {
char CurrDept[10]; /* Program variable declaration */
exec sql begin declare section; /* Host variable declaration */
char EmpSurname[10]; /* Employee surname */
char DeptName[10]; /* Department name */
char DeptLoc[15]; /* Department location */
long EmpSalary; /* Employee salary */
char msgbuffer[500]; /* Buffer for DB2 error messages */
exec sql end declare section;
exec sql declare C1 cursor for /* Cursor declaration */
select distinct emp.surname, emp.salary, dep.name
from employee emp, department dep
where emp.department = dep.department_id and
dep.location = :DeptLoc
order by dep.name;
exec sql whenever sqlerror go to PrintError;
exec sql connect to emps; /* Connection to the database */
printf("Enter a location:"); scanf("%s", DeptLoc);
exec sql open c1; /* Opens the cursor */
exec sql fetch c1 into :EmpSurname, :EmpSalary, :DeptName;
if (sqlca.sqlcode==100)
printf("No department in this location.\n");
while (sqlca.sqlcode == 0) {
if (strcmp(DeptName,CurrDept)!=0) {
printf("\nDepartment: %s\nEmployee\tSalary\n",DeptName);
strcpy(CurrDept,DeptName);
} /* end if */
printf("%s\t%d\n", EmpSurname, EmpSalary);
exec sql fetch c1 into :EmpSurname, :EmpSalary, :DeptName;
} /* end of while */
exec sql close c1; /* Closes the cursor */
exec sql connect reset; /* Resets the connection */
return;
PrintError: /* Retrieves and prints an error message */
sqlaintp(msgbuffer, 500, 70, &sqlca);
printf("Unexpected DB2 error: %s\n", msgbuffer);
return;
} /* end of main */
程序执行步骤如下:
1. 声明 DB2 系统库(
sqlenv.h
)和
sqlca
结构,用于系统返回状态信息,
sqlca
中的
sqlcode
字段包含最后执行的 SQL 命令的退出状态码。
2. 定义全局变量,其中包含在
declare section
内的主机变量,用于程序和数据库之间的数据交换。在 SQL 语句中使用主机变量时,前面需加冒号以区分变量和属性名。
3. 使用
whenever
语句指定执行不成功的 SQL 命令后程序的行为,这里指定发生错误时跳转到
PrintError
例程。
4. 使用
connect to
语句建立与数据库的连接,之后可自由执行 SQL 命令,执行
commit
语句后,命令对数据库的影响才会永久生效(此示例程序无更新操作,未使用该语句)。
5. 使用游标技术,先定义游标
C1
,然后打开游标执行查询,使用
fetch
语句将结果逐行复制到主机变量并显示,通过检查
sqlcode
的值控制操作,结果为空时(
sqlcode = 100
)输出提示,有元组时(
sqlcode = 0
)继续复制和打印操作。
6. 关闭游标并释放连接。
7. 创建 DB2 应用程序时,先在 CLP 或命令中心使用
prep filename
命令进行预编译,然后根据所选主机语言环境的技术进行编译和链接。
-
动态 SQL
:DB2 提供三种创建基于动态 SQL 应用程序的方法:
-
调用级接口(CLI)
:基于 ODBC,提供可由程序直接调用以访问数据库的函数库。例如,
sqlconnect()函数用于连接到 DB2 数据库,sqlprepare()函数用于准备 SQL 命令,sqlexecute()函数用于执行准备好的 SQL 命令,sqlfetch()函数用于将元组加载到程序的主机变量中。使用 CLI 技术的程序无需预编译,还可在支持 ODBC 的其他数据库管理系统上使用。 -
Java 数据库连接接口(JDBC)
:基于与 CLI 相同的原理,但专门用于开发用 Java 编写的程序,是纯面向对象的。它提供
executeQuery(String)方法,接受包含 SQL 命令的字符串作为输入,并返回RESULTSET类的对象,该类有许多方法,方便程序员操作其中的元组。除标准 Java 应用程序外,还可开发能由 Web 浏览器加载和执行的小程序。 - 嵌入式动态 SQL :提供特殊语句执行动态 SQL 的主要操作,包括准备 SQL 命令(调用 DB2 优化器创建访问计划)、描述 SQL 命令的结果(指定属性的数量和类型)、执行准备好的 SQL 命令(为命令中可能使用的主机变量赋值)以及将结果逐行加载到程序变量中以便后续使用。
-
调用级接口(CLI)
:基于 ODBC,提供可由程序直接调用以访问数据库的函数库。例如,
综上所述,Microsoft Access 的宏定义和 DB2 数据库系统都提供了丰富的功能和灵活的操作方式,无论是小型数据库的自动化操作还是大型企业级数据库的管理和开发,都能满足不同用户的需求。在实际应用中,可根据具体场景选择合适的工具和方法来处理数据库相关任务。
超级会员免费看
408

被折叠的 条评论
为什么被折叠?



