




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第9章章数据库编程数据库编程 9.1数据库概述数据库概述 9.2ODBC数据库编程数据库编程 9.3数据库编程常用技巧数据库编程常用技巧 9.4数据库相关的数据库相关的ActiveX控件控件 9.1数据库概述数据库概述 数据库和数据库和DBMS 数据库是指以一定的组织形式存放在计算机存储介质上的相互关联的数据的集合。例如,把一个学校的教师、学生和课程等数据有序地组织起来,存储在计算机磁盘上,就构成了一个数据库。为了有效地管理数据库,常常需要一些数据库管理系统(DBMS)为用户提供对数据库操作的各种命令、工具及方法,包括数据库的建立和记录的输入、修改、检索、显示、删除和统计等。流行的DBMS都
2、提供了一个SQL接口。 SQL 作为用来在DBMS中访问和操作的语言,SQL(结构化查询语言)语句分为两类:一是DDL(Data Definition Language,数据定义语言)语句,它是用来创建表、索引等,另一是DML(Data Manipulation Language,数据操作语言)语句,这些语句是用来读取数据、更新数据和执行其他类似操作的语句。 9.1数据库概述数据库概述ODBC、DAO和和OLE DB ODBC(开放数据库连接) 、DAO(数据访问对象)及OLE DB(OLE数据库)三种数据库方式,使应用程序从特定的数据管理系统(DBMS)脱离出来。 ODBC提供应用程序接口(
3、API),使任何一个数据库都可以通过ODBC驱动器与指定的DBMS相联。程序就可通过调用ODBC驱动管理器中相应的驱动程序达到管理数据库的目的。 DAO使用Jet数据库引擎形成一系列的数据访问对象:数据库对象、表和查询对象、记录集对象等。可以打开一个Access数据库文件(MDB文件),也可直接打开一个ODBC数据源以及使用Jet引擎打开一个ISAM(被索引的顺序访问方法)类型的数据源(dBASE、FoxPro、Paradox、Excel或文本文件)。 OLE DB试图提供一种统一的数据访问接口,并能处理除了标准关系型数据库中的数据之外,还能处理包括邮件数据、Web上的文本或图形、目录服务以及
4、主机系统中的IMS和VSAM数据。 OLE DB提供一个数据库编程COM接口,使得数据的使用者可以使用同样的方法访问各种数据,而不用考虑数据的具体存储地点、格式或类型。这个COM接口与ODBC相比,其健壮性和灵活性要高得多。 9.2 ODBC数据库编程数据库编程 9.2.1MFC AppWizard使用使用ODBC一般过程一般过程 构造数据库构造数据库数据库表与表之间的关系构成了一个数据库。用Microsoft Access 创建一个数据库Student.mdb,暂包含一个数据表score,如表。在表中包括上、下两部分内容,上部分是数据表的记录内容,下部分是数据表的结构内容。 9.2 ODBC
5、数据库编程数据库编程创建创建ODBC数据源数据源 如果没有ODBC组件,当安装Visual C+的同时也会装上ODBC程序。它不是出现在程序组中,出现在系统的“控制面板”管理工具中,如图。 双击ODBC图标,进入ODBC数据源管理器。可以设置ODBC数据源的一些信息。“用户DSN”页面是定义自己在本地计算机使用的数据源名,如图。 9.2 ODBC数据库编程数据库编程创建用户DSN的过程如下。(1)(1)单击添加,在对话框中选择要添加用户数据源的驱动程序,这里选择“Microsoft Access Driver”,如图。(2) (2) 单击完成,单击选择按钮将前面创建的数据库调入,如图。 9.2
6、 ODBC数据库编程数据库编程(3)(3)单击确定,刚才创建的用户数据源被添加在“ODBC数据源管理器”的“用户数据源”列表中。如图。 9.2 ODBC数据库编程数据库编程在在MFC AppWizard中选择数据源中选择数据源 用MFC AppWizard创建一个支持数据库的文档应用程序,如下面的过程。(1)(1)用MFC AppWizard创建一个单文档应用程序Ex_ODBC。(2)(2) 在向导的第2步对话框中加入数据库的支持,如图。 9.2 ODBC数据库编程数据库编程9.2 ODBC数据库编程数据库编程(3) (3) 选中“数据库查看使用文件支持”项,单击Data Source,从中选
7、择ODBC的数据源“Database Example For VC+”,如图。 (4)(4)单击OK,如图,从中选择要使用的表score。 9.2 ODBC数据库编程数据库编程(5)(5)单击OK,又回到了向导的第2步对话框。(6)(6)单击完成。开发环境自动打开表单视图CEx_ODBCView的对话框资源模板IDD_EX_ODBC_FORM以及相应的对话框编辑器。(7)(7) 编译并运行,如图。 记录浏览按钮9.2 ODBC数据库编程数据库编程设计浏览记录界面设计浏览记录界面 按照图所示的布局,为表单对话框资源模板添加所表所示的控件。 9.2 ODBC数据库编程数据库编程(2)(2)按快捷键
8、Ctrl+W,切换到Member Variables页面,在Class name框中选择CEx_ODBCView,为上述控件添加相关联的数据成员。这里添加的控件变量都是由系统自动定义的,并与数据表字段相关联的。例如,双击IDC_STUNO,在弹出的“Add Member Variable”(添加类成员变量)对话框中的成员变量下拉列表中选择要添加的成员变量名m_pSet-m_studentno,选择后,控件变量的类型将自动设置,如图。 9.2 ODBC数据库编程数据库编程(3)(3)按照上一步骤的方法,为下表的其他控件依次添加相关联的成员变量。控件变量的范围和大小应与数据表中的字段一一对应。如图
9、。 9.2 ODBC数据库编程数据库编程(4)(4)编译运行并测试,如图。 9.2 ODBC数据库编程数据库编程9.2.2 ODBC数据表更新数据表更新 在生成的CEx_ODBCView类中,包含一个指向CEx_ODBCSet对象的指针m_pSet。该指针与用户的表相关联,是由MFCAppWizard建立的,当数据表的字段更新后,例如,若Access将score数据表添加一个“备注”字段名,并关闭Access后,就需要为Ex_ODBC重新来指定数据表,其步骤如下:(1)(1)按快捷键Ctrl+W,切换到“Member Variables”页面。(2)(2)在“Class name”的下拉列表中
10、选择“CEx_ODBCSet”,如图。Update Columns 重新指定与CRecordSet类相关的表,Bind All指定表的字段的绑定,即为字段重新指定默认的关联变量。 9.2 ODBC数据库编程数据库编程(3)(3)单击Update Columns,选择ODBC数据源“Database Example For VC+”,如图。 (4)(4)单击OK,如图,从中选择要使用的表。 9.2 ODBC数据库编程数据库编程(5)(5)单击OK,如图。 (6)(6)单击Bind All ,MFC Wizard将自动为字段落添加相关联的变量。需要说明的是,在按Bind All按钮绑定前最好将已有
11、的字段关联变量删除,以保证数据表字段名更改或删除后与变量绑定的正确性。 9.2 ODBC数据库编程数据库编程9.2.3CRecordSet 类基本操作类基本操作 查询记录查询记录 先看一个示例,该示例在前面的Ex_ODBC的表单中添加一个编辑框和一个查询按钮,单击查询,将按编辑框中的学号内容对数据表进行查询,并将查找到的记录显示在前面添加的控件中。示例的过程如下:(1)(1)打开Ex_ODBC应用程序的表单资源,按图8所示的布局添加控件,其中添加的编辑框ID号设为IDC_EDIT_QUERY,“查询”按钮的ID号设为IDC_BUTTON_QUERY。 9.2 ODBC数据库编程数据库编程(2)
12、 打开MFCClassWizard,为控件IDC_EDIT_QUERY添加关联变量m_strQuery。(3)在CEx_ODBCView类中添加按钮控件IDC_BUTTON_QUERY的BN_CLICKED消息映射,在映射函数中添加代码:void CEx_ODBCView:OnButtonQuery() UpdateData();m_strQuery.TrimLeft();if (m_strQuery.IsEmpty()MessageBox(要查询的学号不能为空!);return;if (m_pSet-IsOpen()m_pSet-Close();/ 如果记录集打开,则先关闭m_pSet-m_
13、strFilter.Format(studentno=%s,m_strQuery);/ studentno是score表的字段名,用来指定查询条件m_pSet-m_strSort = course;/ course是score表的字段名,用来按course字段从小到大排序m_pSet-Open();if (!m_pSet-IsEOF()/ 如果打开记录集有记录UpdateData(FALSE);/ 自动更新表单中控件显示的内容elseMessageBox(没有查到你要找的学号记录!); 9.2 ODBC数据库编程数据库编程(4)(4)编译运行并测试,如图。 9.2 ODBC数据库编程数据库编程
14、增加记录增加记录增加记录是使用AddNew函数,但要求数据库必须是以“可增加”的方式打开的。下面的代码是在表的末尾增加新记录:m_pSet-AddNew();/在表的末尾增加新记录m_pSet-SetFieldNull(&(m_pSet-m_studentno),FALSE);/设定m_studentno值不为空(NULL)m_pSet-m_studentno=21010503;./输入新的字段值m_pSet-Update();/将新记录存入数据库m_pSet-Requery();/ 刷新记录集,这在快照集方式下是必须的 删除记录删除记录 可以直接使用CRecordSet:Delete函数来删
15、除记录。要使删除操作有效,还需要移动记录函数。例如下面的代码:CRecordsetStatusstatus;m_pSet-GetStatus(status);/获取当前记录集状态m_pSet-Delete();/删除当前记录if(status.m_lCurrentRecord=0)/当前记录索引号,0表示第一条记录m_pSet-MoveNext();/下移一个记录elsem_pSet-MoveFirst();/移动到第一个记录处UpdateData(FALSE); 9.2 ODBC数据库编程数据库编程修改记录修改记录 函数CRecordSet:Edit可以用来修改记录,例如:m_pSet-Ed
16、it();/修改当前记录m_pSet-m_name=刘向东;/修改当前记录字段值.m_pSet-Update();/将修改结果存入数据库m_pSet-Requery(); 撤消操作撤消操作 如果用户在进行增加或者修改记录后,希望放弃当前操作,则在调用CRecordSet:Update()函数之前调用CRecordSet:Move(AFX_MOVE_REFRESH)来撤消操作,便可恢复在增加或修改操作之前的当前记录。 9.3数据库编程常用技巧数据库编程常用技巧 9.3.1显示记录总数和当前记录号显示记录总数和当前记录号 Ex_ODBC的记录浏览过程中,不能知道表中的记录总数及当前的记录位置,必须
17、将这些信息显示出来。这时就需要使用CRecordset类的成员函数GetRecordCount和GetStatus用来获得表中的记录总数和当前记录的索引,原型:long GetRecordCount( ) const;long GetRecordCount( ) const;void GetStatus( CRecordsetStatus& void GetStatus( CRecordsetStatus& rStatus ) const; ) const;下面的示例过程将实现显示记录信息的功能:(1)(1) 打开应用程序Ex_ODBC。(2)(2) 在MainFrm.cpp文件中,向原来的i
18、ndicators数组添加一个元素,用来在状态栏上增加一个窗格,修改的结果如下:static UINT indicators =ID_SEPARATOR, / 第一个信息行窗格ID_SEPARATOR,/ 第二个信息行窗格ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,; 9.3数据库编程常用技巧数据库编程常用技巧(3)(3)用ClassWizard为CEx_ODBCView类添加OnCommand消息处理函数,添加代码:BOOL CEx_ODBCView:OnCommand(WPARAM wParam, LPARAM lParam)
19、CString str;CMainFrame* pFrame = (CMainFrame*)AfxGetApp()-m_pMainWnd;/ 获得主框架窗口的指针CStatusBar* pStatus = &pFrame-m_wndStatusBar;/ 获得主框架窗口中的状态栏指针if (pStatus)CRecordsetStatus rStatus; m_pSet-GetStatus(rStatus);/ 获得当前记录信息str.Format(当前记录:%d/总记录:%d,1+rStatus.m_lCurrentRecord,m_pSet-GetRecordCount();pStatus
20、-SetPaneText(1,str); / 更新第二个窗格的文本return CRecordView:OnCommand(wParam, lParam);9.3数据库编程常用技巧数据库编程常用技巧(4)(4)在CEx_ODBCView的OnInitialUpdate函数处添加下列代码:void CEx_ODBCView:OnInitialUpdate()m_pSet = &GetDocument()-m_ex_ODBCSet;/ 获得在文档类定义的记录集指针CRecordView:OnInitialUpdate(); / 视图更新并初始化GetParentFrame()-RecalcLayo
21、ut();/ 视图所在的父窗口重新调整外观ResizeParentToFit();/ 根据视图的尺寸重新调整父窗口的大小while (!m_pSet-IsEOF()m_pSet-MoveNext();m_pSet-GetRecordCount();m_pSet-MoveFirst();(5)(5)在Ex_ODBCView.cpp文件的开始处增加下列语句:#include “MainFrm.h”(6)(6)将MainFrm.h文件中的保护型变量m_wndStatusBar变成公共变量。(7) (7) 编译运行并测试。 9.3数据库编程常用技巧数据库编程常用技巧9.3.2 编辑记录编辑记录 下面的
22、过程是在Ex_ODBC的表单视图中增加三个按钮:添加、修改和删除,如图。单击添加或修改按钮都将弹出一个如图的对话框,在对话框中对数据进行编辑后,单击确定按钮使操作有效。 9.3数据库编程常用技巧数据库编程常用技巧(1)(1)切换到ResourceView页面,打开用于表单视图CEx_ODBCView的对话框资源IDD_EX_ODBC_FORM。向表单中添加三个按钮:添加、修改和删除。(2)(2)添加一个对话框资源,打开属性对话框将其字体设置为“宋体9号”,标题定为“学生课程成绩表”,ID号设为IDD_SCORE_TABLE。(3) (3) 将表单中的控件复制到对话框中。(4)(4)将OK和Ca
23、ncel的标题改为“确定”和“取消”。图中具有3D效果的竖直线是用静态图片控件(属性为Frame,Etched)构造的。(5)(5) 双击对话框模板或按Ctrl+W快捷键,为对话框资源IDD_SCORE_TABLE创建一个对话框类CScoreDlg。(6)(6)打开Member Variables标签,在Class name中选择CScoreDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。为控件添加控件变量,如图。 9.3数据库编程常用技巧数据库编程常用技巧(7)(7)用MFC ClassWizard为CScoreDlg添加IDOK按钮的BN_CLICKED的消息映
24、射,代码:void CScoreDlg:OnOK() UpdateData();m_strStudentNO.TrimLeft();m_strCourseNO.TrimLeft();if (m_strStudentNO.IsEmpty()MessageBox(学号不能为空!);else if (m_strCourseNO.IsEmpty()MessageBox(课程号不能为空!);elseCDialog:OnOK();(8)(8)为CEx_ODBCView类中的三个按钮,添加代码:void CEx_ODBCView:OnRecAdd() CScoreDlg dlg;if (dlg.DoModa
25、l()=IDOK)m_pSet-AddNew();m_pSet-m_course= dlg.m_strCourseNO;m_pSet-m_studentno= dlg.m_strStudentNO;m_pSet-m_score= dlg.m_fScore;m_pSet-m_credit= dlg.m_fCredit;m_pSet-Update();m_pSet-Requery(); 9.3数据库编程常用技巧数据库编程常用技巧void CEx_ODBCView:OnRecEdit() CScoreDlg dlg;dlg.m_strCourseNO= m_pSet-m_course;dlg.m_s
26、trStudentNO= m_pSet-m_studentno;dlg.m_fScore= m_pSet-m_score;dlg.m_fCredit= m_pSet-m_credit;if (dlg.DoModal()=IDOK)m_pSet-Edit();m_pSet-m_course= dlg.m_strCourseNO;m_pSet-m_studentno= dlg.m_strStudentNO;m_pSet-m_score= dlg.m_fScore;m_pSet-m_credit= dlg.m_fCredit;m_pSet-Update();UpdateData(FALSE);9.3
27、数据库编程常用技巧数据库编程常用技巧void CEx_ODBCView:OnRecDel() CRecordsetStatus status;m_pSet-GetStatus(status);m_pSet-Delete();if (status.m_lCurrentRecord=0)m_pSet-MoveNext();elsem_pSet-MoveFirst();UpdateData(FALSE);(9)(9)在Ex_ODBCView.cpp文件的开始处增加下列语句:#include “ScoreDlg.h”(10)编译运行并测试。 9.3数据库编程常用技巧数据库编程常用技巧9.3.3处理多个
28、表处理多个表 用Microsoft Access 为数据库Student.mdb添加一个数据表course,如表所示。表中上部分是数据表的记录内容,下部分是数据表的结构内容。 9.3数据库编程常用技巧数据库编程常用技巧示例的具体步骤如下:(1)(1)打开前面的单文档应用程序Ex_ODBC。(2)(2)按快捷键Ctrl+W。单击Add Class,选择“New”。(3) (3) 指定CRecordSet的派生类CCourseSet,如图。 9.3数据库编程常用技巧数据库编程常用技巧(4)(4)单击OK,弹出“Database Options”对话框,图9.7所示。(5)(5)选择ODBC的数据源
29、“Database Example For VC+”,单击OK,选择要使用的表course。(6)(6)单击OK,单击确定,系统自动为生成CCodeSet类所需要的代码。(7)(7)将工作区切换到ResourceView页面,打开对话框资源IDD_STU_TABLE。按图所示的控件布局,向对话框添加一个组合框控件和三个用于显示课程名称、课时数和开课学期数据的静态文本控件。 9.3数据库编程常用技巧数据库编程常用技巧(8)(8)打开Member Variables页面,在Class name中选择CStuDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。再为控件添加控件
30、变量。 9.3数据库编程常用技巧数据库编程常用技巧(9)(9)切换到Messsage Maps页面,为CScoreDlg中增加WM_INITDIALOG的消息映射,并添加下列代码:BOOL CScoreDlg:OnInitDialog() CDialog:OnInitDialog();/ 将课程信息表的课程号添加到组合框中CCourseSet cSet;cSet.Open();while (!cSet.IsEOF()m_comboNO.AddString(cSet.m_courseno);cSet.MoveNext();if (cSet.IsOpen() cSet.Close();/ 确定组合
31、框的当前选择项m_strCourseNO.TrimLeft();if (!m_strCourseNO.IsEmpty()m_strNO = m_strCourseNO;UpdateData( FALSE );OnSelchangeComboNo();return TRUE; / return TRUE unless you set the focus to a control 9.3数据库编程常用技巧数据库编程常用技巧(10)(10)为控件IDC_COMBO_NO增加CBN_SELCHANGE的消息映射,添加代码:void CScoreDlg:OnSelchangeComboNo() int
32、nIndex = m_comboNO.GetCurSel();if (nIndex = CB_ERR) return;CString str;m_comboNO.GetLBText( nIndex, str);/ 根据课程号查找course表中的记录CCourseSet cSet;cSet.m_strFilter.Format(courseno=%s, str);cSet.Open();if (!cSet.IsEOF()/ 如果打开记录集有记录m_strNO = m_strCourseNO = str;m_strName = cSet.m_cname;m_strHours.Format(%d,
33、 cSet.m_hours);m_strOpen.Format(%d, cSet.m_copen);m_fScore = cSet.m_credit;UpdateData(FALSE);if (cSet.IsOpen() cSet.Close(); 9.3数据库编程常用技巧数据库编程常用技巧(11)(11)在ScoreDlg.cpp文件的开始处增加下列语句:#include ScoreDlg.h#include CourseSet.h“(12)(12)编译运行并测试。当单击修改按钮时,弹出如图所示的对话框。 9.3数据库编程常用技巧数据库编程常用技巧9.3.4字段操作字段操作 CRecordS
34、et类中的成员变量m_nFields (用于保存数据表的字段个数)和成员函数GetODBCFieldInfo及GetFieldValue可以简化多字段的访问操作。 GetODBCFieldInfo函数用来数据表中的字段信息,其函数原型如下:void GetODBCFieldInfo( short void GetODBCFieldInfo( short nIndex, CODBCFieldInfo& , CODBCFieldInfo& fieldinfo ); ); nIndex指定字段索引号。fieldinfo是CODBCFieldInfo结构参数,表示字段信息。CODBCFieldInfo
35、结构如下:structCODBCFieldInfoCStringm_strName;/字段名SWORDm_nSQLType;/字段的SQL数据类型UDWORDm_nPrecision;/字段的文本大小或数据大小SWORDm_nScale;/字段的小数点位数SWORDm_nNullability;/字段接受空值(NULL)能力;SWORD和UDWORD分别表示short int和unsigned long int数据类型。 GetFieldValue函数用来获取数据表当前记录中指定字段的值,最常用的函数原型如下:void GetFieldValue( short void GetFieldVal
36、ue( short nIndex, CString& , CString& strValue ); );9.3数据库编程常用技巧数据库编程常用技巧 例例Ex_Field Ex_Field 多个字段的编程操作。(1)(1)创建一个基于CScrollView类的单文档应用程序Ex_Field。(2)(2) 为数据表course创建一个CRecordSet的派生类CCourseSet, (3) (3) 在CEx_FieldView:OnDraw函数中添加下列代码: void CEx_FieldView:OnDraw(CDC* pDC)CEx_FieldDoc* pDoc = GetDocument(
37、);ASSERT_VALID(pDoc);TEXTMETRIC tm;pDC-GetTextMetrics(&tm);int nLineHeight = (int)(tm.tmHeight + tm.tmExternalLeading) * 1.5);int x = 0, y = 0, nWidth;CCourseSet cSet;cSet.Open();CODBCFieldInfo field; / 创建表头for (UINT i=0; icSet.m_nFields; i+)cSet.GetODBCFieldInfo( i, field );nWidth = tm.tmAveCharWid
38、th * field.m_nPrecision;if (nWidth TextOut(x, y, field.m_strName);x += nWidth; 9.3数据库编程常用技巧数据库编程常用技巧/ 显示记录CString str;while (!cSet.IsEOF()x = 0;y += nLineHeight;for (UINT i=0; icSet.m_nFields; i+)cSet.GetODBCFieldInfo( i, field );cSet.GetFieldValue(i, str);/ 计算每一个字段所需的长度nWidth = tm.tmAveCharWidth *
39、field.m_nPrecision;if (nWidth TextOut(x, y, str);x += nWidth;cSet.MoveNext();cSet.Close();/ 设置视图滚动大小CSize sizeTotal;sizeTotal.cx = x + nWidth;sizeTotal.cy = y + nLineHeight;SetScrollSizes(MM_TEXT, sizeTotal); 9.3数据库编程常用技巧数据库编程常用技巧(4)(4)在Ex_FieldView.cpp文件的前面添加CCourseSet类的包含语句:#include Ex_FieldDoc.h#
40、include Ex_FieldView.h#include CourseSet.h“(5) (5) 编译运行,结果如图所示。 9.4数据库相关的数据库相关的ActiveX控件控件 9.4.1使用使用MSFlexGrid控件控件 将控件的类添加到项目中将控件的类添加到项目中 (1)(1)选择“工程”“添加工程”“Components and Controls.”,如图。(2)(2)双击“Registered ActiveX Controls”项。在列表中找到Micorsoft FlexGrid Control,如图。单击更多信息可以获得该控件的帮助内容。 9.4数据库相关的数据库相关的Acti
41、veX控件控件(3)(3)在该控件双击鼠标。单击确定 ,如图。单击OK 接受所有的类。(4) (4) 单击结束按钮关闭“Components and Controls Gallery”对话框。 9.4数据库相关的数据库相关的ActiveX控件控件向对话框添加向对话框添加MSFlexGrid控件控件 打开表单IDD_EX_ODBC_FORM,看到上述控件已添加到对话框编辑器的控件工具栏中,如图。通过对话框编辑器可以方便地添加MSFlexGrid控件。 修改修改MSFlexGrid控件属性控件属性 在IDD_EX_ODBC_FORM表单资源添加MSFlexGrid控件,右击该控件,选择“属性”或“
42、Properties MSFlexGrid Object”命令均可打开该控件的属性对话框,如图。 添加的控件9.4数据库相关的数据库相关的ActiveX控件控件编程控制编程控制 (1)(1) 保留默认的属性及其控件标识IDC_MSFLEXGRID1。(2)(2)在CEx_ODBCView类中为刚才添加的MSFlexGrid控件增加一个CMSFlexGrid类成员变量m_MSFGrid,并在CEx_ODBCView类的OnInitialUpdate函数中添加代码:void CEx_ODBCView:OnInitialUpdate()m_pSet-MoveFirst();m_MSFGrid.Set
43、Cols(m_pSet-m_nFields+1 );/ 根据字段个数,设置单元格的最大列数m_MSFGrid.SetRows(m_pSet-GetRecordCount()+1);/ 根据记录数,设置单元格的最大行数m_MSFGrid.SetColWidth(-1,1440);/ 将所有的单元格都设为相同的列宽。-1表示所有的列,列宽单位为一个点的/ 1/20(一个点是1/72英寸),也就是说,1440刚好为1英寸。/ 定义单元格的表头m_MSFGrid.SetRow(0);m_MSFGrid.SetCol(0);/ 定位到(0,0)单元格m_MSFGrid.SetText(记录号);/ 设置
44、其显示内容m_MSFGrid.SetCellAlignment(4);/ 设置单元格对齐方式,4表示水平和垂直居中CODBCFieldInfo field; 9.4数据库相关的数据库相关的ActiveX控件控件for (UINT i=0; im_nFields; i+)m_MSFGrid.SetRow(0);m_MSFGrid.SetCol(i+1);m_pSet-GetODBCFieldInfo(i,field);/ 获取指定字段信息m_MSFGrid.SetText(field.m_strName);m_MSFGrid.SetCellAlignment(4);int iRow=1;while (!m_pSet-IsEOF()/将表的记录内容显示在单元格中CString str;str.Format(记录%d,iRow);m_MSFGrid.SetRow(iRow);m_MSFGrid.SetCol(0);m_MSFGrid.SetText(str);m_MSFGrid.SetCellAlignment(4);for (UINT i=0; im_nFields; i+)m_MSFGrid.SetRow(iRow);m_MSFGrid.SetCol
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 濮阳医专文化试题及答案
- 家具行业设计中的市场细分与用户定位研究试题及答案
- 大学化学考试策略选择试题及答案
- 注册土木工程师考试案例分析与解决试题及答案
- 潍坊社区招职试题及答案
- 建筑消防安全试题及答案
- 有机化合物的分离提纯试题及答案
- 宠物难产试题解析及答案
- 流行文化对家具设计趋势的影响试题及答案
- 研究2025年创业扶持政策的实际执行问题试题及答案
- 大学生性健康教育智慧树知到答案章节测试2023年南昌大学
- 2、圆口纲完整版课件
- JB/T 20173-2016辊压干法制粒机
- 外科护理学题库(中专)
- 电动葫芦(行车)检查记录表
- DB2110T 0004-2020 辽阳地区主要树种一元、二元立木材积表
- 建设工程施工项目每日“防高坠三检”检查记录表
- 住建部《建筑业10项新技术(2017版)》解读培训课件
- 基于深度学习的问题链讲座课件(44张PPT)
- 水文学习题和答案解析
- 西安交通大学赵进全模拟电子技术基础第8-9章
评论
0/150
提交评论