第十一章 访问数据库 - 首都师范大学
c++面向对象程序设计第11章 数据库编程

建立数据源
4.选定数据库类型后(我们所用的student.mdb是一个Access数据库,所 以选择Microsoft Access Driver),单击“完成”按钮。然后又一个对话 框弹出来了(见下图)。
建立数据源
5.单击数据库中的选取按钮,在弹出的文件选择对话 框中选定所用的数据库文件(如student.mdb),再在 “数据源名”中输入一个数据库名,这个名字可以 随便起,比如对我们要用的数据库,起名为 Student 。单击OK按钮,回到ODBC数据源管理器的 对话框,我们可以看到刚才输入的数据库名已经显 示在User DSN中,选择“确定”按钮,建立数据源 的工作就完成了。
11.1 MFC中的OBDC类
11.2 建立数据源 11.3 编写应用程序
11.4 增加控件
11.5 编译并运行
11.6 增加和删除记录
实验10 数据库编程
MFC中的ODBC类
Visual C++从1.5版本开始就具有数据库操作功能,到现在,Visual C++6.0己拥有多种数据库访问方式,包括ODBC,DAO,ADO等等。其 中最关键也最基本的就是ODBC标准数据库访问方式(Open Database Connectivity ,开放数据库连接),它包含了一组动态链接库(DLL),这 些动态链接库提供了一个标准的数据库应用的程序设计接口,通过它可 以实现对所有含有ODBC驱动程序的数据库的访问。ODBC是基于 SQL(结构化查询语言)而设计的,而且它还定义了C语言同SQL数据库之 间的程序设计接口。目前包含在Visual C++中的ODBC软件开发包(SDK) 包含了Visual FoxPro(DBF文件),Microsoft Access(MDB文件),ASCII 文本文件,SQL Sever以及Microsoft Excel(XLS文件)等多种数据库的驱 动程序,而其他一些公司也提供了它们数据库产品的ODBC驱动程序(如 Oracle ,Intbmix,Progess等等)。如果用户需要使用这些数据库,就必 须把它们的ODBC驱动程序安装到计算机上。
第11章 数据库编程

2020/6/17 Visual C++程序设计与应用教程
第11章 数据库编程
15
ODBC API ODBC 驱动程序
是一些DLL,提供ODBC和数据库之间的接口。 数据源
包含数据库位置和数据库类型等信息,实际上 是一种数据连接的抽象。
2020/6/17 Visual C++程序设计与应用教程
第11章 数据库编程
年龄
INTEGER,
系别
CHAR(8)
)
2020/6/17 Visual C++程序设计与应用教程
第11章 数据库编程
8
2.数据操纵
SQL中的数据操纵语言是一组操纵表中数据的语句,包括 插入记录语句INSERT、删除记录语句DELETE和更新记录语句 UPDATE。
插入记录语句INSERT
在指定表的尾部添加一条包含指定字段值的新记录。一般 格式:
下面是查找记录集对象stuSet中年龄为20的记录:
stuSet.m_strFilter=”年龄=20”;
2020/6/17 Visual C++程序设计与应用教程
2020/6/17 Visual C++程序设计与应用教程
第11章 数据库编程
3
11.1.1 数据库和数据库管理系统
数据库:
是以一定的组织方式将相关的数据组织在一起,存放 在计算机外存储器上,能为多个户共享的与应用程序彼 此独立的一组相关数据的集合。
数据库管理系统:
是一种操纵和管理数据库的软件系统,简称DBMS, 例如FoxPro、SQL Server、Oracle、Sybase、Access 等都是比较常见的数据库管理系统。在数据库管理系统的 支持下,数据完全独立于应用程序,并且能被多个用户或 程序共享,其关系如图所示。
数据库访问PPT课件

关系数据库
• 常用的数据库模型
• 层 次 模 型 ( Hierarchical Model ) 、 网 状 模 型 (Network Model)、关系模型(Relational Model) 和面向对象的数据模型(Object Oriented Model)
数据库操作(2)
• 【例16.2】数据库表记录的插入、更新和删除操作示例
import sqlite3 regions = [("021", "上海"),('022', "天津"),("023", "重庆"),("024", "沈阳")] #打开SQLite数据库:c:\Pythonpa\ch16\sales.db
con = sqlite3.connect(r"c:\Pythonpa\ch16\sales.db") #使用不同的方法分别插入一行数据 con.execute("insert into region(id, name) values ('020', '广东')") con.execute("insert into region(id, name) values (?, ?)", ('001', '北京')) #插入多行数据
Ch16 数据库访问
•本章要点: ✓16.1 数据库基础 ✓16.2 Python数据库访问模块 ✓16.3 使用sqlite3模块连接和操作SQLite数据库 ✓16.4 使用SQLiteStudio查看和维护SQLite数据库
《visual-c .net程序设计教程和上机指导》第11章:数据库编程

返回
ID 1 2 3
NAME 小李
BIRTHDAY 2001.12.07 1980.11.05 1984.12.08
SEX 男
小张
女
小王
男
表11.1 表的例子
返回
11.1.2 数据库的几种访问技术
Visual C++ .NET提供了多种访问数据库技术,如下所示: ●ODBC (Open DataBase Connectivity)
● MFC ODBC(Microsoft Foundation Classes ODBC)
● DAO (Data Access Object)
● OLE DB(Object Link and Embedding DataBase)
● ADO、ADO .NET (ActiveX Data Object)
员中。当用户要修改当前记录或增加新记录时,程序先将各字段的
新值放入域数据成员中,然后调用相应的CRecordset 成员函数,把 域数据成员设置到数据源中。
返回
3. 记录集的建立
要建立记录集,首先要构造一个CRecordset派生类对象,然后调 用Open成员函数查询数据源中的记录并建立记录集。在Open函数中, 可能会调用GetDefaulConnect和 GetDefaultSQL函数。函数的声明为: CRecordset m_RecordSet_Name(CDatabase* pDatabase=NULL);
返回
11.2 ODBC编程技术的使用
11.2.1 MFC的主要ODBC类概述 11.2.2 CDatabase类的使用 11.2.3 CRecordset类的使用 11.2.4 CRecordView类的使用
计算机文化基础(北京邮电大学出版)第11章 Access数据库基础知识

(4) 导入表
导入表是指用其他软件中已经输入并保存的数据直接建立表格, 例如,从Excel的工作表中导入数据。
(5) 链接表
这种方式是在建立的表与其他的数据源之间建立链接,当对表 中数据进行改变时,数据源中的数据也随之改变,反之,数据源中 的数据发生变化时,在表中也有所反映。
2
目录
11.1 数据库的基本概念 Access简介 11.2 Access简介 11.3 数据表的建立和使用 11.4 建立查询 11.5 创建窗体 11.6 使用报表 本章小结
3
11.1 数据库的基本概念
11.1.1 基本概念 数据和信息
数据(Data)是描述现实世界事物的符号记录, 是用物理符号记录的可以识别的信息。 信息(Information)是经过加工的数据。所有 的信息都是数据,而只有经过提炼和抽象之后具 有使用价值的数据才能成为信息。
表11.1 学生信息表
8
11.1.2 数据模型
关系: 关系:一个关系对应一张二维表。 关系模式: 关系模式:对关系的描述称为关系模式,其格式 为: 关系名(属性名1, 属性名2, …, 属性名n) 记录: 记录:也称为元组,表示表中的一行。 属性: 属性:表中的一列为一个属性,也称为字段。属 性的名称被成为属性名。 关键字: 关键字:关系中能唯一区分、确定不同元组的属 性或属性组合,称为该关系的一个关键字。 主键: 主键:一个表中可能有多个关键字,在实际应用 中通常选择其中一个,被选用的关键字被成为主 键。
数据库系统
数据库系统(DataBase System,DBS)是由数据 库、数据库管理系统、应用程序、数据库管理员、 用户和计算机硬件等构成的人—机系统。 数据库管理人员是专门从事数据库的建立、使用 和维护的工作人员。
数据库原理及应用(Access 2003)第11章

学习目标
VBA的基础知识
在VBA中各种变量的定义及用法 程序设计中的流程控制方法
1
返回总目录
第11章 面向对象程序设计语言—VBA
教学内容
11.1 VBA概述 11.2 模块、函数及程序 11.3 Visual Basic的数据类型与数据库对象 11.4 变量 11.5 将数据库对象命名为VBA程序代码中的变量 11.6变量命名的法则
(5)变体型(Variant) 变体数据类型是一种可变的数据类型,可以表示 任何值,包括数值、字符串及日期等。 (6)字节型(Byte) 字节型是一种数值类型,以一个字节的无符号二 进制数存储,取值范围为0~255。 (7)布尔型(Boolean) 布尔型是一个逻辑值,用两个字节存储,它只有 两种值,即True或False。 (8)对象型(Object) 对象型数据用来表示图形或OLE对象或其他对象, 用4个字节存储。
11.3.1 VBA中基本数据类型
(1)字符串型(Sபைடு நூலகம்ring)
字符串是一个字符序列,由 ASCII 字符组成,包 括标准的ASCII字符和扩展ASCII字符及汉字等。 字符串是放在双引号内的若干个字符,长度为 0 的字符串称为空字符串。 VB 中的字符串分为 两种,即变长字符串和定长字符串。变长字符 串的长度是不确定的,最大长度不超过;定长 字符串的长度是固定的,最大长度不超过。
24
11.3.1 VBA中基本数据类型
(2)整数(integer)
整数是不带小数点和指数符号的数,在机器内以 二进制补码形式表示。整型(Integer):整型 以两个字节的二进制码表示和参加运算,取值 范围为-32768~32767。长整型(Long):长整 型以四个字节的二进制码表示和参加运算,取 值范围为-2147483648~2147483647。
Access数据库应用技术 第11章

2. 功能要求 (1) 系统有一个欢迎界面,提供“进入”和“离开”两 个命令按钮,由用户选择打开主窗体开始业务管理还是退出 系统。 (2) 主窗体要有下拉菜单,分别对进货、销售和统计进 行管理。 (3) 进货业务在一个窗体中进行货物的输入。 (4) 销售业务在一个窗体中进行登记,相应地要进行数 据表的修改。 (5) 统计功能主要以报表形式输出。
3. 设计说明 根据应用系统的主要功能,给出设计方案,要求实现功 能要求中指定的内容。同时,可根据具体情况,适当添加更 多的实用功能。
11.1.1 需求分析及模块设计 家庭财产管理中,存在着数据存储和管理的需求。为改
变日常管理的繁琐和不准确等缺陷,选择使用数据库技术来 进行数据管理。根据实际需要,本系统应具有以下功能模块:
(1) 财产管理模块。该模块主要用于对家庭财产进行管 理,包括财产类别管理、存放地点管理、家庭物品管理等。
(2) 打印输出模块。该模块主要以报表或数据访问页的 形式浏览或打印数据,包括按类别打印家庭财产、按存放地 点打印家庭财产及打印财产明细报表等。
如图11-5所示。
图11-4 类别管理窗体
图11-5 房间管理窗体
(3) 家庭财产窗体:用于家庭财产的编辑录入,其窗口 显示如图11-6所示。
图11-6 家庭财产窗体
11.1.5 报表设计 设计并创建了多张报表,以完成系统的打印输出功能,
主要报表如下: (1) 按房间划分财产报表,如图11-7所示。 (2) 按类别分类财产报表,如图11-8所示。 (3) 财产明细表,如图11-9所示。
图11-7 按房间划分财产报表
图11-8 按类别分类财产报表
图11-9 财产明细表
11.1.6 主窗体的设计及管
理功能,其结果如图11-10所示。
数据库原理与应用(清华大学版)课后答案第11章 索引

索 引 11.1 练习题11及参考答案1.什么是索引?索引分为哪两种?各有什么特点?答:索引是为了加速对表中数据行的检索而创建的一种分散的存储结构。
根据索引的顺序与数据表的物理顺序是否相同,可以把索引分成两种类型:∙ 聚簇索引:数据表的物理顺序和索引表的顺序相同,它根据表中的一列或多列值的组合排列记录。
∙ 非聚簇索引:数据表的物理顺序和索引表的顺序不相同,索引表仅仅包含指向数据表的指针,这些指针本身是有序的,用于在表中快速定位数据。
2.创建索引有什么优、缺点?答:创建索引的优点如下:(1)加速数据检索。
(2)加快表与表之间的联接。
(3)在使用ORDER BY 和GROUP BY 等子句进行数据检索的时候,可以减少分组和排序的时间。
(4)有利于SQL Server 对查询进行优化。
(5)强制实施行的惟一性。
创建索引的缺点如下:(1)创建索引要花费时间和占用存储空间。
(2)建立索引加快了数据检索速度,却减慢了数据修改速度。
3.哪些列上适合创建索引?哪些列上不适合创建索引?答:一般来说,以下的列适合创建索引:(1)主键:通常检索、存取表是通过主键来进行的,因此,应该考虑在主键上建立索引。
(2)连接中频繁使用的列:用于连接的列若按顺序存放,则系统可以很快地执行连接。
如外键,除用于实现参照完整性外,还经常用于进行表的连接。
(3)在某一范围内频繁搜索的列和按排序顺序频繁检索的列。
以下的列不适合创建索引:第 章11(1)很少或从来不在查询中引用的列,因为系统很少或从来不根据这个列的值去查找数据行。
(2)只有两个或很少几个值的列(如性别,只有两个值“男”或“女”),以这样的列创建索引并不能得到建立索引的好处。
(3)以bit、text、image数据类型定义的列。
(4)数据行数很少的小表一般也没有必要创建索引。
4.创建索引时须考虑哪些事项?答:使用CREA TE INDEX语句创建索引。
默认情况下,如果未指定聚集选项,将创建非聚集索引。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1. ODBC(Open Database Connectivity)是微软的开放服务体系结构WOSA中有关数据库的一个组成部分。
一个基于ODBC的应用程序可以不依赖任何访问数据库。
这种访问操作是依赖于不同DBMS的ODBC 和ODBC实现的。
ODBC是一种结构,它由下列部件自上向下组成:
⑴;
⑵,用于管理被安装的ODBC驱动程序和;
⑶,用于管理驱动程序;
⑷ ODBC;
⑸ ODBC,提供ODBC和数据库之间的。
⑹,包含了和等信息,是一种数据连接抽象。
2. MFC为ODBC提供的用于建立与数据源连接的类CDatabase;在构造了一个该类对象之后,必须调用成员函数Open或OpenEx才能建立与数据库的连接。
其中Open的原型如下:
virtual BOOL Open( LPCTSTR lpszDSN,
BOOL bExclusive = FALSE,
BOOL bReadOnly = FALSE,
LPCTSTR lpszConnect= “ODBC;”,
BOOL bUseCursorLib = TRUE );
throw( CDBException, CMemoryException );
例如在一个应用程序中定义了一个数据源连接类对象:
CDatabase m_db;
并需要与一个指定的用户身份UID=ZYF用户口令PWD=1234的数据源DSN = Student Registration以ODBC方式连接,该连接为共享、可读写并使用光标库,试写出两种用于实现该连接操作(可以忽略异常的俘获处理操作)的Open函数调用表达式:
答案:
3. MFC为ODBC提供的用于从数据源选择一组记录集的类CRecordset在构造了一个该类象对之后,然后调用Open成员函数按照指定的SELECT命令语句或表名查询数据源中的记录并建立记录集。
CRecordset类构造函数的原型声明如下:
CRecordset( CDatabase* pDatabase = NULL);
根据pDatabase所传值的不同,构造记录集对象分为三种情况:
⑴ pDatabase指向一个CDatabase类对象,并且该对象已经通过调用CDatabase::Open
成员函数与一个指定的数据源成功连接,则记录集类构造函数的操作过程为:
在该数据源类对象上建立→调用CRecordset::Open。
⑵ pDatabase指向一个CDatabase类对象,但该对象没有与指定的数据源连接,则记录
集类构造函数的操作过程为:
在该数据源类对象上建立→调用与缺省指定的数据源连接→调用CRecordset::建立记录集。
⑶ pDatabase = NULL,则记录集类构造函数的操作过程为:
建立→调用的构造函数建立数据源连接对象→调用
连接缺省指定的数据源→调用建立记录集。
4. MFC为ODBC提供了用于与某个记录集直接相连的表单视图类,该类可以通过数据交换机制DDX在与表单视图控件之间的;而记录集字段数据与相应数据库的字段之间数据交换是通过CRecordset::实现的,该函数的参数是一个指针,指向记录字段数据交换机制的
对象。
5. 在记录集中,修改当前记录的操作必须按下列步骤进行:
⑴调用CRecordset::函数,进入模式。
该函数将当前域数据成员的内容保
存到中。
若调用Move(AFX_MOVE_REFRESH)可恢复数据,退出
模式。
⑵在模式下数据域成员的新值。
⑶调用CRecordset::函数,将改变后的记录写回并退出模式。
按照上述操作步骤,在CRecordView::OnMove函数中添加修改当前记录的功能,尝试在如下程序的空白处添入正确的代码:
virtual BOOL CRecordView::OnMove(UINT nIDMoveCommand)
{
CRecordset* pSet = OnGetRecordset();
if(pSet->CanUpdate())
{
pSet->; // 进入修改记录模式
if(!) //为数据域成员设置新值
return TRUE ;
pSet->; // 修改数据源
}
…
UpdateData(FALSE);
return TRUE;
}
6. 在记录集中,添加一个新记录的操作必须按下列步骤进行:
⑴调用CRecordset::函数,进入模式。
该函数将当前域数据成员的内
容保存到并将所有域数据成员都设置NULL。
若调用
Move(AFX_MOVE_REFRESH)可恢复数据,并退出模式。
⑵在模式下域数据成员的值。
⑶调用CRecordset::函数,将改变后的记录写回并退出模式。
例如,在CRecordView的派生类CSectionForm中定义了成员函数OnRecordAdd用于向记录集中添加新记录,其主要代码如下,试在程序的空白处添入正确的代码:
提示:由于CRecordView::OnMove成员函数在实现记录移动操作之前,需要通过调用成员函数CRecordset::Update使当前记录更新,所以调用OnMove隐含了对数据源的更新和退出记录的编辑或添加模式。
void CSectionForm::OnRecordAdd()
{
if(m_bAddMode) // m_bAddMode = TRUE指示记录集当前处于添加模式
(ID_RECORD_FIRST); // ID_RECORD_FIRST记录集首位置…
m_pSet->; // 进入添加新记录模式
m_pSet->SetFieldNull(&(m_pSet->m_CourseID), FALSE); // 设置数据域为空
…
m_bAddMode = ; // 设置添加模式状态标志
…
UpdateData(FALSE);
}
7. 在记录集中,删除当前记录的操作必须按下列步骤进行:
⑴调用CRecordset::函数,同时给和中的当前记录加上删除
标志。
⑵到另一个,跳过已删除的记录。
例如,在CRecordView的派生类CSectionForm中定义了成员函数OnRecordDelete用于从记录集中删除当前记录,其代码如下,试在程序的空白处添入正确的代码:
void CSectionForm::OnRecordDelete()
{
try
{
m_pSet->; // 为指定的记录集设置删除标志}
catch(CDBException, e)
{
AfxMessageBox(e->m_strError);
return;
}
m_pSet->; // 移动到下一记录,删除指定记录
if(m_pSet->IsEOF())
m_pSet->; // 移动到最后一个记录
if(m_pSet->IsBOF())
m_pSet->SetFieldNull(NULL); // 设置记录集为空
UpdateData(FALSE);
}
X。