logo资料库

C++中用ODBC和ADO方式连接SQL数据库.doc

第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
资料共30页,剩余部分请下载后查看
企事业管理信息处理的 C++的数据库编程 第 1 节 数据库的逻辑设计 1.1 商品进销存数据库管理项目 .......等数据表。在表的数据结构设计中,字段名尽量采用“可读性”较好的标识符,在程序中看到它, 也就知道它实际含义,即“说明”处的文字解释。 下面就是这样做的,在。 1.2 学生成绩管理数据库项目 在下面的讨论中,结合本教科书(详见第 247 页),不妨做“学生成绩管理数据库”,它有三个数据表: 学生信息表(学号/C/8,姓名/C/8,性别/C/6,出生日期/C/10,身高/C/4,专业/C/16) 表名为 StudentTable (number , name , sex , birthdate , height, specialty )
课程表(课程号/C/8, 所属专业/C/20,课程名/C/10,学分/C/4 ,考试时间/C/10 ) 表名为 CourseTable (CourseNumber , ForSpecial , CourseName , TotalCredit, TestDate ) 学生成绩表(学号/C/8, 课程号/C/8,成绩/C/6 ) (studentNO, courseNo, score ) 表名为 StudentScoreTable ★上面的数据库,不管是在 ACCESS 系统中设计的,还是在 SQL Server 系统中设计的, VC++的使用和 SQL 语句引用的方式是一样的、效果是一样的。 ★C++特别适合做“文本(类型 CString)”处理。在学生成绩管理数据库中,各字段一律 定义为“文本型”,当字段实际类型是数值型或要做算术运算时,C++提供了将数值字符串转 换为算术型量转换函数: atoi(str)、atol(str)依次将串转换为 int、long;而 atof(str)转换 double 或 float 型。 第 2 节 数据库管理系统和数据库的物理设计 2.1 用 ACCESS 系统创建学生成绩管理数据库 2.2 用 SQL Server 系统创建学生成绩管理数据库 ★省略 2.3 将创建的数据库添加到系统数据源 ODBC 的“用户 DSN”中 例如:由 ACCESS 创建的数据库,它是一个容器型文件,扩展名为“.mdb”。所以,上述数据库文件 是“学生成绩管理.mdb”。 操作:“开始 / 控制面板 / 性能和维护 / 管理工具 / ODBC 数据源 ”,则弹出“ODBC 数据源管理器” 对话框。先选择“用户 DSN”,再按“添加(D)…”按钮:
按“添加”按钮之后,又弹出下面“创建新数据源”对话框: 取数据源的驱动程序“Microsoft Access Driver (*.mdb)”之后,按“完成”按钮。当按“完成”按 钮之后,系统回到第 2 步,弹出下面“ODBC Microsoft Access 安装”对话框。在此,完成将已经设计 的 ACCESS 系统的数据库送入系统 ODBC 并且命名(数据源(N):处填写)。例如,将“学生成绩管理.mdb” 数据库,送入系统数据源 ODBC 中并且命名为 StudentAndJava: 第3节 C++开发应用程序的基本知识 3.1 VC++系统的几个重要的英文词语
(1)Identifier 标识符(俗话讲“名字”),缩写词是ID。 (2)MFC Microsoft 微软的基础类库。 Foundation ClassLibrary (3)Application(App) 泛指“应用”(程序)。 (4)API Application Programming Interface 应用程序接口。 (5)AFX Application Frameworks 应用程序框架。 (6)AppWizard 应用程序向导。 (7)WorkSpace VC++的工作空间视窗,有三个页(面): ClassView页:“类”视图页,展示当前应用程序所用的类。 ResourceView页:“资源”视图页,展示当前应用程序所用的资源(如Dialog和Menu等)。 FileView页:“文件”视图页,展示当前应用程序所存放的文件(如扩展名为.cpp、.h文件)。 (8)ODBC Open Database Connectivity(开放的数据库连接)。为各种类型的数据库管理系统提供了统一 的编程接口,例如不同数据库系统的驱动程序。 3.2 MFC中提供的基类(Base Class) (1)CObject 是大多数类的基类,完成动态空间的分配与回收,支持一般诊断与出错处理。 (2)CCmdTarget 负责将系统事件(消息)和窗口事件(消息)发送给响应该事件的对象。 (3)CWinApp 是CCmdTarget类的派生类,完成对线程的控制(线程的建立、运行、终止、挂起)。 (4)CDocument 是文档类,包括应用程序在运行期间所得到的数据。 (5)CWnd 是通用窗口类,提供Windows中的所有通用特性、对话框和控件。 (6)CFrameWnd 是从CWnd继承来的,实现了标准的框架应用程序。 (7)CDialog 用来控制对话框窗口。 (8)CView 用于让用户通过窗口来访问文档。 (9)CMDIFameWnd 是一个简化的窗口框架(没有最大化和最小化按钮),用于多文档应用程序的主框架窗口的显示和 管理。
(10)CMDIChildWnd 用于文档子窗口的显示和管理。 (11)动态记录集CRecordSet 选择和连接ODBC中数据库的某个“表”。 3.3 C++的对话框(表单视图)中最基本“控件”的使用 (1)静态文本(Static Text) 设计“标签”,默认的ID是“IDC_STATIC”。不接受用户的输入,不产生通知消息。例如,书 写数据库的字段名、提示词。 (2)组框(Group Box) 定义一个矩形框,默认的ID是“IDC_STATIC”。矩形框内可以放按钮等控件,使界面设计“好 看”一点。 (3)编辑框(Edit Box) 在对换话框中用于设计文本数据的显示或输入,系统默认的ID是“IDC_EDIT1”,用其属性对换 话框中“General”选项后,用户可重新命名字(例如:IDC_STATIC_number)。 (4)命令按钮(Button) 映射消息:BN_CLICKED 单击,BN_DOUBLECLICKED 双击,响应“单击”消息的是“事件(Events)” 函数程序。系统默认的ID是IDC_BUTTON1。 ★C++中的消息驱动机制 Windows的环境中,系统产生的动作和用户程序运行产生的动作“称为”事件(Events)产生的消息 (Message),Windows是通过系统发送消息来完成用户输入的。 例如:用户按鼠标左按钮,系统发送 WM_LBUTTONDOWN 消息; 用户敲一个字符键,系统发送 WM_CHAR 消息;COMMAND 用户进行菜单选择、工具按钮单击等操作,系统发送 WM_消息; ★ C++中的资源 应用程序中的光标、菜单、工具栏、位图、对话框、.....,都是资源,系统都用相应的“标识符”
来区分。这些资源,像VC++中的常量一样,可以被编辑和修改。VC++的许多编辑器,都能达到“所见即所 得”的设计效果。 例如:IDOK为对话框中“确认”,IDCANCEL为对话框中“取消”,BN_CLICKED为单击按钮。 ★Windows的动态连接库(.DLL) 实现用户界面、在屏幕上显示文本和图形,都是通过动态连接库来实现的。动态连接库是一些具有 扩展名为DLL文件,文件中是一些特殊结构的函数。 例如:USER32.DLL,负责窗口管理,功能有消息、菜单、光标、计时器,其它与控制窗口显示相关的 功能。 3.4 在C++中创建一个工程(Project)并且附带数据库的基本步骤 (1)在C++环境中,选择菜单“文件/新建”,在弹出的“新建”对话框中,取“工程/MFC AppWizard(exe)/ 给工程命名”。例如,工程名是“学生成绩管理”: (2)在MFC向导的第1步,选择“S单个文档”(或M多重文档),然后按“下一步”按钮。即,要创建 一个表单视图(界面),在界面上设置各种“控件”: (3)在 MFC 向导的第 2 步,取“W 数据库查看使用文件支持”,并通过命令 Data Source 去浏览已经 存放在 ODBC 中的数据库及其数据库中的一个表:
数据库和数据表选择成功后,按 MFC 向导对话框中“完成”按钮以及最后的“确定”按钮,就进入 下面的 C++的 MFC 开发环境。可以用“工具箱”中的控件在界面上设计了,例如控件(标签、文本框、 组框、命令按钮,在工具箱中的图标依次是 )。 注意:“W 数据库查看使用文件支持”将数据库与表单视图连接在一起,或者说建立了“表单视图与 记录集”之间的联系,系统自动产生了程序操作数据库的指针 m_pSet->。 第4节 用C++做应用程序开发中的技术或技巧的汇总
4.1 数据库指针“m_pSet->”常用的成员函数(完成不同的功能) (1) 激活界面中控件 UpdateData( TRUE ); 激活表单中控件,例如m_Name、m_Number、m_Result…等。 UpdateData( FALSE ); 使用户能看见表单视图(界面上)当前记录的m_Name、m_Number、…等 的变化 (2)数据指针的位置的确定 m_pSet->IsEOF( ) 是否遇到数据表尾,“是”返回值为真。 m_pSet->IsBOF( ) 是否为数据表文件头。 m_pSet->MoveFirst( ); 指向第1个记录 m_pSet->MoveNext( ); 指向当前位置的下一个记录 m_pSet->MovePrev( ); 指向当前位置的前一个记录 m_pSet->MoveLast( ); 指向最后一个记录 m_pSet->m_字段名;(例如:学号字段,m_pSet->m_number) (3)在数据库中添加一个新记录 m_pSet->AddNew( ); 追加一条新记录的功能函数 在此语句之后,书写向数据库追加的记录的各个字段。最后写下面两句换话: m_pSet->Update( ) ; 新记录写入数据库的数据表。 m_pSet->Requery( ); 刷新记录集。这将改动“物理”数据库。 (4)删除数据库中当前显示的记录 m_pSet->Delete( ); 删除“当前显示”的记录时,有时会出现“<已删除>”字样回显。 (5)执行“统计或查询”类命令的一般程序模式 在对话框上添加一个“命令按钮”,再创建该命令的事件(Events...)函数,在函数体内书写程序, 组织“循环、判定、数据指针移位”等操作。例如: m_pSet->MoveFirst( ); !m_pSet->IsEOF() while( ) 没有遇到数据表尾时继续循环。 { 统计和判断语句; 放结果信息的控件m_Result 成员变量; MessageBox("按确定键看下一个记录","对话框", 0 ); m_pSet->MoveNext( ); } 4.2 应用程序执行时的“人机交互”办法 可以引用系统内部的人机交互对话框,下面的是它们一般格式: AfxMessageBox("提示信息", int ); 窗口标题不能自己确定 MessageBox("提示信息","窗口标题", int ); 可以自己确定窗口标题 int, (1)AfxMessageBox("窗口内提示信息,标题默认为项目名", 100, 10 ); 返回值是整数。 有“是(Y)”、“否(N)” 两个按钮,选择“是(Y)”函数返回值 6、 “否(N)”函数返回值 7。 (2)MessageBox("窗口内提示信息","窗口标题", 0 ); 只有一个“确定”按钮,返回值是整数1。
分享到:
收藏