一、填空题(每格1分,共20分)
1.三层C/S结构包括客户机、应用服务器和 数据库服务器 三部分。
2.两个具有相同结构的关系R和S,它们的 差 运算是由属于R但不属于S的元组组成的集合。 3.在E-R图中,用矩形表示 实体集,用椭圆形表示 属性,用菱形表示 联系 。 4.数据库系统的技术文档包括系统说明书、技术说明书和使用说明书。 5.在Access 2002中,文本类型的最大长度为 255 。
6.DSN可以分成三种,分别是 系统DSN 、 用户DSN 和 文件DSN 。其中 系统DSN 可以被登录到系统中的所有用户使用。
7.可通过把TADOQuery组件的Active属性值设置为 True 来执行存放在SQL属性中的SQL语句。 8.TADOStoreProc组件通过ProcedureName属性指定存放在服务器上的一个存储过程,应用程序可以执行这个存储过程。
9.一个Rave报表文件中可以包含 多 个报表,一个报表中可以包含 多 张报表页。
10.如果客户端要通过 HTTP 协议连接到应用服务器,就需要使用TWebConnection组件。使用该组件进行连接,首先要设置应用服务器IIS,在应用服务器上,把HTTPsrvr.Dll 复制到IIS默认的scripts虚拟目录下并打开默认站点服务。该组件有一个重要的属性URL ,用来定位应用服务器,该属性的值应设置为应用服务器上的“HTTPsrvr.Dll”所在的虚拟目录。
二、选择题(每题1分,共20分)
1. 使用Rave报表设计器的 A 组件,可以把数据库中的位图字段显示在报表上。
A.BitMap B.MetaFile C.DataText D.Section
2. 下列 D 组件最适合执行SQL的SELECT语句。
A.TADOConnection B.TADOCommand C.TADOTable D.TADOQuery
3. 下列不属于两层CS结构的特点是 D 。
A.安装与维护麻烦 B.客户端过于庞大 C.应用(企业)逻辑放在客户端 D.客户端只处理显示逻辑
4. 要使TQuery组件中的SQL语句执行后返回一个结果数据集,应调用TQuery组件的哪个方法?B
A.Add B.Open C.ExecSQL D.Open和ExecSQL
5. 要使TDBNavigator组件能够浏览某个数据表中的记录,应把它的DataSource属性设置为 B 组
件名。
A.TTable B.TDataSource C.TField D.不需设置
6. 要给学生信息表(STUDENT)增加一个出生日期字段(日期型),下面正确的是 C 。
A.CREATE TABLE STUDENT ADD 出生日期 DATETIME B.ALTER TABLE STUDENT ALTER出生日期 DATETIME
第 1 页 共 5 页
C.ALTER TABLE STUDENT ADD出生日期 DATETIME D.ALTER TABLE STUDENT SET出生日期 DATETIME
7.
在ODBC层次结构中, A 包含在ODBC32.DLL中,对用户是透明的,其任务是管理ODBC驱动程序,是ODBC中最重要的部件。 A.驱动程序管理器 D.ODBC API C.ODBC管理器 B.数据源名
在Access 2002中,要定义数据表某个字段的属性,应在 D 视图中进行。 A.数据表 B.数据库 C.关系 D.表设计
在数据库桌面中已经建立了一个数据库别名“MYALLAS”,现在要让TTable组件能够访问该别名下的数据表,应把它的 D 属性设置为该别名值。 A.TableType B.TableName C.Database D.DatabaseName
下列的哪个运算不是关系运算中的传统的集合运算?C A.并 B.差 C.投影 D.交
8.
9.
10.
11. “主机-终端”数据库应用系统的特点是终端只处理 A 逻辑? A.显示 B.应用 C.事务 D.数据
12. 通过TADOTable组件的 A 属性,可以设定正在被操作的数据表的名字。
A.TableName B.TableDirect C.CommandType D.CommandText
13. TQuery组件主要用于执行SQL语句,它执行的SQL语句存放在 D 属性中。
A.DatabaseName B.TableName C.DataSource D.SQL
14. 要使TDataSource组件与TTable组件相联系,应把它的 A 属性设置为TTable组件的名称。
A.DataSet B.DataField C.DataSource D.DatabaseName
15. 使用Database Desktop程序,不能完成下列的哪个功能?D
A.创建和维护数据库表 B.创建和维护数据库别名 C.执行SQL语句 D.创建三层结构的数据库程序
16. 关于主键的说法不正确的是哪个?C
A.它能够唯一地标识表中的每条记录 B.在主键字段中不允许Null值的存在 C.只能由一个字段组成 D.可用于与其他表中的外键建立关系
17. 下列的哪一项不是逻辑设计第一阶段(分析用户需求)产生的?D
A.用户活动图 B.数据流图
第 2 页 共 5 页
C.数据字典 D.局部E-R图
18. 通过TRvProject组件可以可视化地访问Rave报表,TRvProject组件的 G 属性用来指明应用程
序使用的Rave报表项目文件的文件名。。 A.Execute B.LoadFromFile C.ProjectFile D.ReportName
19. 在关系运算中,根据具有相同属性名的字段相同进行联结,且在联结结果中去掉重复属性,这样
的运算是下面哪一个?B A.内部联结 (连接) B.自然联结(连接) C.等值联结(连接) D.外部联结(连接)
20. 在关系模型中,同一个关系中的不同属性,其属性名 B 。
A.可以相同 B.不能相同 C.可以相同,但数据类型不同 D.必须相同
三、缩略语解释(每题2分,共10分)
1. ODBC Open DataBase Connectivity:开放数据库连接,是数据库访问的标准
2. HTTP HyperText Transfer Protocol:超文本传输协议,基于TCP/IP,是因特网中最常用的网络传
输协议
3. DBS DataBase System:由DBMS、应用程序、支持数据库运行的软硬件环境和DBA构成系统 4. RDO Remote Data Object:远程数据对象,微软用于访问远程数据对象的技术
5. MADC Microsoft Data Access Components:由微软提供的用于进行数据访问的最新技术,包括
DAO,RDO,ADO,ODBC和RDS等
四、程序阅读(每题5分,共20分)
1.请解释下面一段程序的作用。
Procedure Tform1.table1BeforeDelete(DataSet: TDataSet); Begin //table1中的表是学生信息表S try
table2.indexName := ‘XH’; //学号作业索引名,table2中的表是选修表SC if table2.findkey([DataSet.fieldbyname(‘学号’).Asstring]) then begin
//程序代码略,利用TQuery组件删除相应table2中的记录
end; except
on E:EDBEngineError do
showmessage(‘不能删除该记录’); end; End;
Procedure Tform1.table1AfterPost(DataSet: TDataSet); Begin
showmessage(‘数据保存成功’); End;
这是一个级联删除的示例,在删除S表前,先搜索SC表,若发现有与当前记录关联的记录存在,就先删除之。
如果在删除操作中遇到例外,将终止删除操作。
第 3 页 共 5 页
2.阅读下面的一段程序,请比较与第1题中代码的差别。
Procedure Tform1.table1AfterDelete(DataSet: TDataSet); Begin //table1中的表是学生信息表S
table2.indexName := ‘XH’; //学号作业索引名,table2中的表是选修表SC if table2.findkey([DataSet.fieldbyname(‘学号’).Asstring]) then begin
//程序代码略,利用TQuery组件删除相应table2中的记录 end; End;
这段同样是级联删除的示例,但与第1题不同的是,它是先删除S表记录,然后再根据被删除记录来决定是否删除SC表中的相应记录。 而且,即使发生例外,也不终止删除操作。
3.分析第1题和第2题中存在的主要问题,解决这一问题的方法是什么,可以利用什么组件来解决这一问题。(提示:上述两段代码都涉及到两个表的删除操作)
第1题和第2题都涉及两个表的删除操作,可能会导致数据的一致性问题。解决的方法是利用事务处理机制,这一点可以利用TDatabase组件。利用该组件的事务处理方法可以解决这一问题。 4.解释下面的代码的作用。并对其进行注释。 procedure TForm1.Button1Click(Sender: TObject); begin //Button1单击触发事件
datasource1.DataSet := table1; //设置TDataSource组件,使之与table1关联 dbgrid1.DataSource := datasource1; //设置TDBGrid组件,使之与TDataSource关联 table1.Close; //关闭table1,为设置其他属性进行准备 table1.DatabaseName := 'aa'; //设置table1的数据源 table1.TableName := ‘Students’; //设置table1的待操作表
table1.Open; //取回数据集,并显示在关联组件上 end;
这段代码通过TDBGrid组件将组件table1中的表Students内容显示出来,并且此显示操作是通过单击按钮Button1来激发的。
五、编程题(每题5分,共30分)
1. 请将下面的程序补充完整,使之完成返回SC(选修表)中选修了课程号(Cno)为“01”的记录。
并将打开数据集后的当前记录的前三个字段值显示在组件edit1(文本编辑条)中。 Query1.Close; //关闭Query1 Query1.SQL.Clear; //清除待执行语句
Query1.SQL. Add (‘SELECT * FROM SC WHERE Cno=’’01’’’); //查询语句定义 Query1.Open ; //执行查询
Edit1.text := Query1.fields[0].asstring+Query.fields[1].asstring+Query1.fields[2].asstring; //显示内容至edit1上
2. 在上一题的基础上,补充一段代码,将返回数据集中撮后一条记录的“Sno”、“Cno”和“Grade”
字段内容显示到组件edit2(文本编辑条)中。 Query1.Last;
Edit2.text:=Query1.fieldbyname(‘sno’).asstring+Query1.fieldbyname(‘Cno’).asstring+Query1.fieldbyname(‘Grade’).asstring
3. 改造第1题中的代码,使之使用参数的方式进行查询,从edit3(文本编辑条)中读取用户输入作
第 4 页 共 5 页
为待查询的课程号,并以参数的形式传递给Query1,从而动态地返回选修记录。 Query1.SQL.Add(‘SELECT * FROM SC WHERE Cno=:cn’); Query1.parambyname(‘cn’).asstring := edit3.text; Query1.Open
4. 请将下面的程序补充完整,使之完成能够执行用户输入的SQL语句,该语句由edit4来获取。 ADOCommand1. CommandType := CmdText; //设置命令类型 ADOCommand1. CommandText := edit4.text; //设置命令文本 ADOCommand1. Excute; //执行命令
5. 如果通过TADOQuery组件来完成第4题的任务,代码如何书写?(假设定义了TADOQuery组件
的实例为ADOQuery1)。由于不能保证用户输入的SQL语句一定正确,因此需要添加一些代码,保证程序运行的正确,即将出现SQL语句语法问题时,在label1(文本标签)上显示“SQL语句有错,请重新输入。” ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(edit4.text); Try
ADOQuery1.ExecSQL; Except
Label1.caption := ‘SQL语句有错,请重新输入。‘; End;
6. 写一段代码完成第四题中第1题和第2题中被省略的代码(粗体字部分),利用TADOQuery组件完
成删除相应记录的操作。 Begin
ADOQuery1.close; ADOQuery1.sql.clear;
ADOQuery1.sql.add(‘delete from SC where xh = :xh’);
ADOQuery1.params[0].asstring := DataSet.fieldbyname(‘学号’).Asstring;
ADOQuery1.execsql; End;
第 5 页 共 5 页
因篇幅问题不能全部显示,请点此查看更多更全内容