搜档网
当前位置:搜档网 › VS2010 C++中用ODBC和ADO方式连接SQL Server数据库

VS2010 C++中用ODBC和ADO方式连接SQL Server数据库

VS2010  C++中用ODBC和ADO方式连接SQL Server数据库
VS2010  C++中用ODBC和ADO方式连接SQL Server数据库

3.4 在C++中创建一个工程(Project)并且附带数据库的基本步骤

(1)在C++环境中,选择菜单“文件/新建”,在弹出的“新建”对话框中,取“工程/MFC App Wizard(exe)/给工程命名”。例如,工程名是“学生成绩管理”:

(2)在MFC向导的第1步,选择“S单个文档”(或M多重文档),然后按“下一步”按钮。即,要创建一个表单视图(界面),在界面上设置各种“控件”:

(3)在MFC向导的第2步,取“W数据库查看使用文件支持”,并通过命令Data S ource去浏览已经存放在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->Move First( ); 指向第1个记录

m_pSet->Move Next( ); 指向当前位置的下一个记录

m_pSet->Move Prev( ); 指向当前位置的前一个记录

m_pSet->Move Last( ); 指向最后一个记录

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->Move First();

while( !m_pSet->IsEOF()) 没有遇到数据表尾时继续循环。

{ 统计和判断语句;

放结果信息的控件m_Result 成员变量;

MessageBox("按确定键看下一个记录","对话框", 0 );

m_pSet->Move Next( );

}

4.2 应用程序执行时的“人机交互”办法

可以引用系统内部的人机交互对话框,下面的是它们一般格式:

Afx MessageBox("提示信息", int,int ); 窗口标题不能自己确定

MessageBox("提示信息","窗口标题", int );可以自己确定窗口标题

(1)Afx MessageBox("窗口内提示信息,标题默认为项目名", 100, 10 ); 返回值是整数。

有“是(Y)”、“否(N)” 两个按钮,选择“是(Y)”函数返回值6、“否(N)”函数返回值7。

(2)MessageBox("窗口内提示信息","窗口标题", 0); 只有一个“确定”按钮,返回值是整数1。

如果是int f lag = MessageBox( "窗口内提示信息", "窗口标题",100);

有“是(Y)”、“否(N)” 两个按钮,选择“是(Y)”函数返回值6、“否(N)”函数返回值7。

用户在程序中用if语句判f lag中保存的返回值,决定执行“则”或“否则”动作。

(3)利用字符串“并置”运算,将记录的各个字段“合并”到1个字符串变量中,放到MessageBox()或者Afx MessageBox()中,作为提示信息随时输出。

例如:CString info="\0";

info = "学号:\t" + m_pSet->m_number + "\n";

info += "姓名:\t" + m_pSet->m_name + "\n";

info += "性别:\t" + m_pSet->m_sex + "\n";

info += "身高:\t" + m_pSet->m_column1 + "\n";

info += "出生日期:\t" + m_pSet->m_birthdate + "\n";

if(查询条件满足)

{MessageBox( info, "查询到的记录如下:",100 ); return; }

4.3 更改应用程序的“标题”

在C++环境中创建的“项目(Project)”,例如“学生成绩管理”工程,做“编译、连接、运行”时,结果显示为:

在标题栏上出现了“无标题”字样。我们希望将“无标题–学生成绩管理”中的“无标题–”去掉,改成设计者自己定义的标题,例如换成为“学生成绩管理”。

方法是:在Class View 页,展开类CMy App(因为我们用汉字“学生成绩管理”作为工程名,C++不识别“汉字标识符”,所以工程类名用My代替,全名是C My App),双击函数Init Instance。双击函数InitInstance之后,在弹出的源码文档中,找到函数InitInstance的下面显示位置(该函数尾部),添加“深色”的一行:

m_pMainWnd->SetWindowT ext("学生成绩管理");//新加的

再重新“编译、连接、运行”,结果的标题就变成为希望的了:

4.4 在主界面(main()函数所在地)中的成员变量。

这是开发较复杂项目时必然出现的问题。例如,对一个数据表作记录添加时,用另一个对话框接受用户输入的字段值,在调用处启动该对话框中,然后引用其控件的成员变量,再做记录添加操作。同样,做不同数据表操作时,有时也需要“交流信息”,也可以用这样办法来实现。

(1)在主调文档中用Insert Dialog命令新建立一个对话框,命名为Dlg1Name。

在VC++的工作空间视窗中选择“资源页ResourceView”,然后“右击”Dialog,在弹出的快捷菜单中选择“Insert Dialog”(见下图),则出现一个对话框,按“Ctrl + W”键之后,给该对话框命名为Dlg1Name(以后再插入对话框时,可以命名为Dlg2Name、Dlg3Name、Dlg4Name等)。

当单击选项“Insert Dialog”之后,出现下面只带“OK和Cancel”两个按钮的对话框,默认的ID 是IDD_DIALOG1、默认的标题是Dialog :

按“Ctrl + W”键之后,系统弹出“Adding a Class”对话框,按“OK”按钮,则出现给该对话框资源命名字的“New Class”对话框,我们输入Dlg1Name(这个名字就是IDD_DIALOG1以资源方式出现

在程序中,是程序员操作该对话框的手段,请见下面(2)点),然后按“OK”按钮:

(2)在IDD_DIALOG1对话框中设置“标签、文本框”等控件,并将控件映射到对应的成员变量,见下图。在主调处设计一个命令按钮,在命令按钮的事件函数中说明“Dlg1Name dlg;”对象,请并用对象dlg去操作IDD_DIALOG1对话框中的成员变量。

例如:对话框中的成员变量是:m_number和m_name

用对象操作是:dlg.m_number和dlg.m_name

#include "Dlg1Name.h"

void CMyView::On Button Add( )

{ //记录添加模块,操作另一个对话框:

Dlg1Name dlg;

if( dlg.DoModal()==IDOK )

{ //按IDD_DIALOG1的“OK”按钮返回之后:

m_pSet->AddNew( ); //先执行追加新记录的功能函数AddNew()

m_pSet->m_number = dlg.m_number;//给学号、姓名字段赋值:

m_pSet->m_name = dlg.m_name;

//... ... 其他字段

m_pSet->Update( ) ; //新记录写入数据库的数据表

m_pSet->Requery( ); //刷新记录集。这将改动"物理"数据库。

}

}

(3)将新插入对话框(例如IDD_DIALOG1)的默认标题“Dialog”改成有实际意义的窗口标题。

例如:这是做记录插入用的对话框,所以对话框标题取作“添加记录对话框”。在该对话框

窗口(Dialog Properties)中,写上新的标题:

4.5 在新建对话框(如IDD_DIALOG1)中“连接ODBC的数据源”的方法

(1)如果连接主控文档m_pSet->所指向的那个数据表时

先找到项目的“头文件(“学生成绩管理Set.h)”,展示了其中的“类名(CMySet)”,然后在新建对话框的.CPP文件中添加:

#include “学生成绩管理Set.h”

CMySet pset ;

通过对象pset即可操作字段名和记录移动等功能函数。

例如:pset.Open( );

和pset.m_number;

(2)使用系统基类CRecordset为新建对话框连接ODBC中的其他数据表

按“Ctrl + W”键,进入MFC Class Wizard,然后操做下面三步:

当第3步点击“New...”之后,弹出下面“New Class”对话框,操作(1)和(2)之后按“OK”:

上面按“OK”按钮之后,弹出“DataBase Options”对话框,这时要选择数据库、点动态使用。然后按该对话框左上角的“OK”按钮,进入(Select Database Tables)选择数据库中某个数据表的对话框,选定一个表。

要操作对话框Dlg1Name中已经连接上的命名为Dlg1Dataset的数据表时,可用下面代码:

#include "Dlg1Dataset.h"

Dlg1Dataset pset;

pset.Open( );

pset.m_字段名;

pset.m_MoveNextt( );.... 等

4.6 如果后台数据库或数据库中的数据表“结构修改了”,那么原来的C++的表单文档如何办?

请注意:m_pSet->是MFC App Wizard建立的,目的是建立“表单视图与记录集”之间的联系。但是,有一个“弱点”:当ACCESS库或SQL库中的数据表“结构被修改时”,则VC++中表单文档就不识别了。

MFC App Wizard的环境下,用Update Column与Bind All按钮来重新修改。要注意的是“只能用于开始创建项目时的带数据库的、含main()函数的单个文档”,因为指针m_pSet->是唯一的。P254图8.14。

(1)将原来的“Member V ariables”的成员变量(上图CYYYSet下的),用Delete V ariable命令一一删除,然后再单击Update Column按钮,重新从数据源ODBC中选择“数据库”和“表”。

(2)对第1步重新连接的数据库及表,单击Bind All按钮,则重新添加相关联字段。

4.7 在当前正在开发的项目(Project)的“工具箱”的方法

例如在MFC环境下,往项目“学生成绩管理ADO Data控件,过程为:(1)使用C++菜单“工程/添加工程/Components and controls …”,则弹出Components and controls Gallery对话框;

(2)在该对话框中双击“Registered Activex Controls”文件夹;在展开的Registered Activex Controls文件夹内,使用滚动条寻找所需要的控件。例如ADO Data控件,对应的文件为Microsoft ADO Data Control,version 6.0 OLE DB。

(3)找到控件所对应的文件之后,点击该文件名(即选中),然后按“Insert”按钮(这之后的系统询问,一律使用默认值),最后将控件插入到“工具箱”之中,方便使用。

Data Grid控件:对应文件(Microsoft Data Grid Control,version 6.0 OLE DB) Data Combo控件:对应文件(Microsoft Data Combo Control,version 6.0 OLE DB)Web控件:对应文件(Microsoft Web Browser )

★4.8 标签(Static tex t )控件建立时,系统默认的ID是“IDC_ST ATIC”。在它的属性对话框中,要给

它一个命名,比如是“IDC_ST ATIC_QUERY”Query,是为了增强该标识符的可读性。

在操作命令“查询记录”所对应的模块函数体内加下面源代码(注意:只有命令按钮的事件函数内才能用):

CStatic*pwnd=(CStatic*)GetDlgItem( IDC_ST ATIC_ QUERY);

pwnd->SetWindowT ex t("输入要查询的学号:");

这样,命令“查询记录”运行时,动态文本信息将送进标签IDC_ST ATIC_QUERY的框架内。

其它“命令按钮”使用时类似。

动态地更换组框(Group Box)的标题

void CEx_MCIView::On Button Top( )

{ CStatic *pwnd=(CStatic*)GetDlgItem( IDC_STATIC_top );

pwnd->SetWindowText("请编辑当前记录的相关字段值");

}

第5节使用C++的MFC AppWizard和ADO技术创建表单视图和连接数据库

5.1 主控窗口带数据库使用m_pSet->指针,其他对话框使用ADO控件完成数据库的插入、删除、查询、修改等操作。

(1)采用“3.4”节的做法,在C++中创建一个工程(Project)并且附带数据库。

(2)采用“4.4”节的做法,在工程中插入新的对话框并且命名字。

(3)采用“4.7”节做法,在项目(Project)的“工具箱”中添加ADO Data控件、Data Grid控件。在新建对话框中设置ADO Data控件和Data Grid控件,状态如下:

或DataGrid1右击选择“属性”:

这就打开控件属性窗口(Properties),在此对控件做下面的属性(Property )值设置:

设置控件Adodc1和DataGrid1的属性,连接数据库及表。

在Adodc1属性对话框中:Connection String属性填:DSN=Student And Java

记录源(Record Source)属性填:命令方式和访问的表

而Data Grid1的属性:Data Source属性值取IDC_ADODC1控件所绑定的。

(4)主调处用命令方式打开对话框(例如下面代码),效果为

#include "Dlg2Name.h"

void CMyView::OnButton Query( )

{ Dlg2Name dlg;

if(dlg.DoModal( )==IDOK )

{ AfxMessageBox("打开数据编辑对话框");

UpdateData(FALSE);

}

}

5.2 使用DataGrid控件的选项功能,在DataGrid的列表上做记录的追加、删除、字段值的修改。

(1)DataGrid

(2)如果主空界面的m_pSet->数据库表和DataGrid

(3)ADO操作的数据库,既可以是ACCESS的、也可以是SQL Server的,模式一样。

注意:因为做“记录追加、记录删除”时,涉及“数据库的表”物理改动,有一个响应时间问题,所以用“新建对话框”教适宜,主控模块用“命令调用”方式,启动一次对话框,做一个记录的“追加”或者“删除”操作。

由ADO data 控件提供数据源的DataGrid列表添加、删除、更新(即修改)”等操作,见下图的标识,应该充分利用它。

(4)用DataGrid列表作记录删除时,先用鼠标器,然后按人热键“DELETE”。主调对话框也被删除。

(5)用DataGrid先用鼠标器指到“*”标记行,然后将光标移进“相关字段”并输入新数据。记录录入完成后,按“OK”按钮:主调对话框可以看到新记录。

(6)在DataGrid用鼠标器点击到“目标字段”,然后光标在“该字段”闪动,用户进行修改字段数据。修改完成后,按“OK”按钮返回。

5.3 DataGrid控件的选项功能“允许添加(记录追加)、允许删除(记录删除)、允许更新(字段值修改)”,但是数据查询和统计功能需要自己设计。

做法:用Insert Dialog插入一个对话框,命名为Dlg3Name,标题是“数据查询和统计对话框”,在此设计查询键、查询命令。查询命令的事件处理函数,完成被查询对象的操作,即对相关数据表的访问。

源代码:

(1)主控处“查询记录”事件的程序:

#include "Dlg3Name.h"

void CMyView::OnButtonQuery( )

{ Dlg3Name dlg;

dlg.DoModal( );

}

(2)

#include"学生成绩管理Set.h"

void Dlg3Name::OnButtonQuery( )

{//对话框3中,访问主控界面的数据库

CMySet pset;

UpdateData(TRUE);

pset.Open();

pset.MoveFirst();

while ( !pset.IsEOF() )

{

if ( m_number==pset.m_number || m_name==pset.m_name )

{ CString info="\0"; 查询条件满足

info = "学号:\t" + pset.m_number + "\n";

info += "姓名:\t" + pset.m_name + "\n";

info += "性别:\t" + pset.m_sex + "\n";

info += "出生日期:\t" + pset.m_birthdate + "\n";

info += "专业:\t" + pset.m_specialty + "\n";

MessageBox( info, "查询到的记录如下:",100 );

return;

}else pset.MoveNext( );

}

}

★然虽在一个“主控文档窗口”内,既可以用指针m_pSet->操作数据库,同时也可以用ADO控件操作同一数据库,只因为DataGrid控件做“记录追加、记录删除”时要物理地修改数据库,有时运行不正常。因为ADO和DataGrid的“游标”定位方式,与m_pSet->操有差异的。

★当DataGrid表中,要将原来的英文字段名(如Course Number)换成汉字输出时,应在Adodc1控件的“记录源”选项中,用命令SQL语句,一般格式为:

SELECT Course Number AS 课程号, Course Name AS 课程名FORM CourseT able

5.4 引用ADO Data控件数据源的控件、DataList控件的使用方法。

C++控件,但是一个Adodc控件只能连接数据库的一个(记录源)表。

D ata Combo和DataList操作数据表,像DataGrid控洋那样,也要依靠Adodc控件连接的数据库。所以,要想DataGrid、D ata Combo、DataList访问不同的数据表,必须各自用Adodc1控件。

右击“DataList”控件,在掸出快捷菜单中取“属性(R)...DataList Object”,则有:先在属性“RowSource”项下指定“IDC ADODC1”;再在属性“ListField”项下选择被LIST的字段(例如“商品名”,但是一个DataList控件只能输出一个字段)。

注:实现“Data Combo”控件的使用时,类似DataList控件的做法。例如将商品编号字段“shangpinID”放入:

第6节C++数据库编程中的常规算法和实现

在“5.3”节已经讲到:DataGrid控件的选项功能“允许添加、允许删除、允许更新”

录追加、记录删除和字段值修改。但是,对数据库的大量查询和统计

设计程序了,这就是第6节要讨论的问题。

?做法:用Insert Dialog插入一个对话框,命名为Dlg3Name,标题是“数据查询和统计对话框”,在此设计查询键、查询命令。查询命令的事件处理函数,完成被查询对象的操作,即对相关数据表的访问。

?当没有DataGrid列表自动提供的操作功能的时候,自己书写功能程序。这是要学会的。

6.1 一个简单的方案:数据浏览和数据追加、删除、修改、查询和统计等操作都在主控窗口,数据指针是系统给的m_pSet->。

这样做的要求是:

(1)记录查询时:必须是先赋给了查询键值。若执行“查询”命令时没有输入查询键值,则不执行“查询的模块程序”而返回。

(2)删除当前记录时:必须是浏览到了要删除的记录。若执行“删除”命令时没有指定到记录位置就返回,则不执行“m_pSet->Delete( );”命令。

(3)记录追加时:仍然是采用在各字段数据,存放在对话框的各个成员变

量中,从对话框返回后,定义该对话框的对象dlg,通过dlg引用成员变量程序执行,在m_pSet->AddNew( )命令执行后,依次将“dlg.成员变量赋值给m_pSet->字段名”。

(4)修改记录时:即做当前记录的相关字段内容修改。在当前记录中,鼠标器点击的字段,光标进入,则键入新数据,然后执行命令m_pSet->Edit( ),则数据库被物理地修改。如果你点击“修改记录”命令之前,没有指定到记录位置、或者没有修改当前记录的字段值,则不执行命令m_pSet->Edit( )。

void CMyView::On Button Query( )

{ CRecordsetStatus status;

m_pSet->GetStatus(status); //必须及时跟踪指针m_pSet->所指的记录号

UpdateData(TRUE);//激活表单控件(例如m_strQuery)

m_strQuery.TrimLeft( );

if ( m_strQuery.IsEmpty() )

{ MessageBox("你输入的查询学号为空!");

m_recordNO = status.m_lCurrentRecord- 1; //返回值0时是#1号,所以给-1

UpdateData(FALSE);

return;

}

else //自己用循环查找,不用书上的:

{ m_pSet->MoveFirst( );

while( !m_pSet->IsEOF( ) )

{ m_pSet->GetStatus(status); //及时索引当前记录号

m_recordNO = status.m_lCurrentRecord + 1;

if( m_strQuery==m_pSet->m_number )

{ UpdateData(FALSE);return; }

//找到,自动更新表单控件的显示内容为当前记录,然后退出。

else m_pSet->MoveNext( );

}

MessageBox("没有查找到你要查询的学号记录!");//循环内没正常退出,表明到文件尾还没找到。

m_pSet->MoveFirst( ); //让指针移到开头为别处使用

return;

}

}

// CStatic *pwnd=(CStatic*)GetDlgItem( IDC_STA TIC_QUERY );

// pwnd->SetWindowText("输入要查询的学号:");

// int flag=MessageBox( "你没有输入查询键值吧?","询问对话框",100 );

// if( flag!=6 )return; //执行“查询”命令时没给查询条件则返回。

//查询:atoi(str)、atol(str)依次将串转换为int、long;而atof(str)转换double或float型。

利用字符串“并置”运算,将记录的各个字段“合并”到1个串变量中,放到MessageBox()中,作为提示信息及时输出:CString info="\0";

info = "学号:\t" + m_pSet->m_number + "\n";

info += "姓名:\t" + m_pSet->m_name + "\n";

等等

MessageBox( info, "查询到的记录如下:",100 ); return;

删除记录程序,对用户的当前指定记录(表单视图中正在显示的)做物理删除操作。为此,对“要删除谁?”,用MessageBox("你是否浏览到了要删除的记录?","删除询问",100)来询问;对“确实删除它吗?”,用MessageBox("你确实要删除第(" + info +")号记录吗?", "确认删除",100 )来做人机交互。

void CMyView::On Button Delete( )

{ int tag=MessageBox("你是否浏览到了要删除的记录?","删除询问",100);

if( tag != 6 ) return; //执行"删除"命令时没有浏览到指定到记录位置,则返回。

CRecordsetStatus status;

CString info="0";

long num=0;

m_pSet->GetStatus(status);

num = status.m_lCurrentRecord;//获得当前记录号,0为#1号

num++; //使得#1号就是1。为了输出记录号,下面将其变成"串"。

while( num != 0 )

{ int x= num % 10;

info += x + '0'; //转换为字符,并且"并置"到info

num = num/10;

}

int flag= MessageBox("你确实要删除第("+ info +")号记录吗?", "确认删除",100 );

if( flag==6 )

{ m_pSet->Delete( );

m_pSet->Requery(); // 刷新记录,重新整里盘文件。可以。

//不能在《删除》时使用命令:m_pSet->Update( );

// 下面的if( )s1else s2,产生删除当前显示的记录时有"<已删除>"字样回显。

if( status.m_lCurrentRecord==0 ) m_pSet->MoveNext();

else m_pSet->MoveFirst( );

UpdateData(FALSE);

}else return;

}

对数据库做“记录追加”时,涉及多个字段值的录入与修改或修改各字段的数据,是最合适的。

假设做此工作的对话框的ID是IDD_DIALOG1,我们给该对话框命名的类名是Dlg1Name,就可在对话框中做各成员变量的数据库初始化,在确认完全正确之后,返回主控界面,通过定义了Dlg1Name的对象dlg,将“dlg.成员变量”的数据值赋值给“m_pSet->m_字段名”。

#include "Dlg1Name.h"

void CMyView::On Button Add( )

{ //记录添加模块,操作另一个对话框:

Dlg1Name dlg;

if( dlg.DoModal()==IDOK )

{ m_pSet->AddNew( ); //先执行追加新记录的功能函数AddNew()

m_pSet->m_number = dlg.m_number;//给学号、姓名字段赋值:

m_pSet->m_name = dlg.m_name;

m_pSet->m_sex = dlg.m_sex;

m_pSet->m_birthdate= dlg.m_birthdate;

m_pSet->m_height = dlg.m_height;

m_pSet->m_specialty= dlg.m_specialty;

m_pSet->Update( ) ; //新记录写入数据库的数据表

m_pSet->Requery( ); //刷新记录集。这将改动"物理"数据库。

}else return;

}

模块:

主控界面:设计有“修改记录”命令按钮,要修改记录的“记录号”指示器。

被修改记录的工作对话框:

修改当前记录的字段值的模块:

●在用m_pSet->浏览记录时,其特性是可自然地接收用户对各字段值的修改并且写入盘文件。

我们采用:新建一个对话框(例如类名是Dlg5Name),在其中做记录修改操作,过程是:

(1m_pSet->浏览的时候,所选定的记录是要修改的当前记录,界面上设置了指示器。当按“修改记录”命令按钮时,首先询问:

int tag=MessageBox( "是你选定的要修改的记录号吗?","询问对话框",100);

(2)当回答“是(y)”时,将当前记录的各字段值拷贝到要打开的对话框的成员变量:

m_pSet->字段名→dlg.成员变量

在对话框中显示原来数据,并提示你修改。修改谁,用鼠标点击,光标出现,可以编辑。

(3)修改成功之后,若按对话框的“OK”按钮,又返回到主界面,再对m_pSet->所指示的当前记录重新赋值:

dlg.成员变量→m_pSet->字段名

●上面使用m_pSet->指针的往返过程中,因为用户未再移动“指针”,所以记录位置未改动。这一点,是我们随时可指定被修该记录号的重要环节。

这个程序“长一点”了,但要点只3句,多数是重复语句。

#include "Dlg5Name.h"

void CMyView::On Button Modify( )

{ //执行"修改记录"命令之前,下面4行是及时跟踪指针m_pSet->移动时所指定的记录号:CRecordsetStatus status;

m_pSet->GetStatus(status);

m_currentRecordNo = status.m_lCurrentRecord + 1; //因#1号是0,所以+1,变成物理#1 UpdateData(FALSE);

Dlg5Name dlg; // 工作对话框开始的程序:

int tag=MessageBox( "是你选定的要修改的记录号吗?","询问对话框",100);

if( tag==6 )

{ //(1)将当前记录的各字段值拷贝到对话框的对应成员变量上:

UpdateData(TRUE);//激活对话框控件

dlg.m_number = m_pSet->m_number;

dlg.m_name = m_pSet->m_name;

dlg.m_sex = m_pSet->m_sex;

dlg.m_birthdate = m_pSet->m_birthdate;

dlg.m_height = m_pSet->m_height;

dlg.m_specialty = m_pSet->m_specialty;

UpdateData(FALSE);//控件上的改变显示出来

//(2)按对话框的“OK”按钮时返回,返回之后重置数据库该记录的修改值:

dlg.DoModal( );

m_pSet->Edit();

m_pSet->m_number = dlg.m_number ;

m_pSet->m_name = dlg.m_name ;

m_pSet->m_sex = dlg.m_sex ;

m_pSet->m_birthdate = dlg.m_birthdate ;

m_pSet->m_height = dlg.m_height ;

m_pSet->m_specialty = dlg.m_specialty ;

m_pSet->Update( ) ;

m_pSet->Requery( );

UpdateData(FALSE);

}

else MessageBox( "在记录修改对话框中你没有按[OK]按钮!",0);

return;

}

查询和统计可以在独立对话框中进行:例如

其中:“查询”和“执行”命令的代码是类似的:

#include "学生成绩管理Set.h"

void Dlg3Name::On Button Query( )

{//对话框3中,访问主控界面的数据库

CMySet pset;

UpdateData(TRUE);

pset.Open();

pset.MoveFirst( );

while ( !pset.IsEOF() )

{

if( m_number==pset.m_number || m_name==pset.m_name )

{ CString info="\0";

info = "学号:\t" + pset.m_number + "\n"; info += "姓名:\t" + pset.m_name + "\n";

info += "性别:\t" + pset.m_sex + "\n"; info += "出生日期:\t" + pset.m_birthdate + "\n";

info += "专业:\t" + pset.m_specialty + "\n";

MessageBox( info, "查询到的记录如下:",100 );

return;

}else pset.MoveNext( );

}

}

void Dlg3Name::On Button Total( )

{// 统计类似查询,都要从头到尾浏览整个表。

// 对每个记录按条件统计:

CMySet pset;

UpdateData(TRUE);

m_birthdate=0; m_sex=0;

pset.Open();

pset.MoveFirst();

while ( !pset.IsEOF() )

{ if( pset.m_birthdate>="1980-1-1" )m_birthdate++;

if( pset.m_sex=="男" )m_sex++;

UpdateData(FALSE);

pset.MoveNext();

}

}

6.2 较复杂的设计的方案

主界面,用菜单方式调用不同对话框,各对话框自己连接一个数据的不同数据表,而不同数据表的常规操作(仍然是:数据浏览、数据追加、删除、修改、查询和统计等)。

第7节C++的多媒体编程和实现

7.1 在视屏上播放动画

用Insert Dialog插入一个对话框,命名为Dlg4Name,标题是“多媒体对话框”。在对话框设置一个web 控件,对应的成员变量名是m_W ebBrowser;再设置一个命令按钮(启动Web),命令的事件处理函数

打开和播放。

void Dlg4Name::OnButtonW eb( )

{ CFileDialog dlg(TRUE);

dlg.m_ofn.lpstrFilter = "所有图象和影视音频文件\\*.gif; *.jpg; *.html; *.wav; *.flash";

if ( dlg.DoModal( ) ==IDOK )

{ COleVariant vt( dlg.GetPathName( ) );

V ARIANT bt; //下面m_W ebBrowser是用户给W eb控件定义的成员变量。

m_W ebBrowser.Navigate2( vt, &bt, &bt, &bt, &bt );

}

}

7.2 用C++播放音乐

清华教材第299页[例9.4] 用VC++的MCIWnd类制作一个多媒体播放器。

MCIWnd类是VC++的控制多媒体设备的窗口类。下面介绍它的使用过程。可以播放扩展名为“A VI,MP3,W A V,MIDI,…”的视频和音频文件。

(1)在第1步选择M多重文档,第2步至第6步用默认值(当第2步使用数据库时亦然,已用了)

vc++中使用ado方式操作access数据库

vc++中使用ado方式操作access数据库ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API、DAO、RDO都要容易使用,并不失灵活性。本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码。为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到这个test.mdb。程序编译运行后的效果如图一所示 图一、ADO操作ACESS数据库的界面效果图 一、实现方法 万事开头难,任何一种新技术对于初学者来说最重要的还是"入门",掌握其要点。让我们来看看ADO数据库开发的基本流程吧!它的基本步骤如下: (1)初始化COM库,引入ADO库定义文件 (2)用Connection对象连接数据库 (3)利用建立好的连接,通过Connection、Command对象执行SQL命令,或利用Recordset对象取得结果记录集进行查询、处理。 (4)使用完毕后关闭连接释放对象。 下面我们将详细介绍上述步骤并给出相关代码。 1、COM库的初始化 我们可以使用AfxOleInit()来初始化COM库,这项工作通常在CWinApp::InitInstance()的重载函数中完成,请看如下代码: BOOL CADOTest1App::InitInstance() { AfxOleInit(); ...... } 2、用#import指令引入ADO类型库 为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句:

SQL数据库图书管理系统(完整代码)

作品设计报告书题目:《图书管理系统》 班级网络2012-1班 学号 姓名 课程名称数据库应用技术 指导教师

目录

数据库课程设计报告书 一、设计目标 1.掌握计算机管理信息系统设计的一般方法,主要包括系统分析、系统设计的组织 和实施。 2.关系型数据库管理系统的编程技术,并能独立完成一般小系统的程序设计、调试 运行等工作。 3.培养把所学知识运用到具体对象,并能求出解决方案的能力。 二、数据库存储设计指导思想 在数据库存储设计的无数选择中,简单是系统架构师和DBA 的秘密武器。 简单,有时候就来自于对一个特定的表或表空间没有选择最优I/O 特性,总有这么一种可能,一个富有经验的DBA 拥有高超的存储技能并可以没有时间限制的去为一个非常重要的表或者索引配置一个存储。然而这样做的问题是,就算能达到设计的最佳性能,为了维护原始对象,这也经常造成对一个系统的管理变得更加复杂。好的数据库存储设计的要点是,在一个动态系统上,实现所有目标应该是最初的系统设计的一部分,并应该在数据库运行过程中长期进行。这篇文档简单的最佳实践描述达到了这些目标并且几乎没有性能损失。 三、任务 角色:读者、图书馆馆员、系统管理员;基础数据:读者信息、图书信息、操作员信息;业务数据:借还书记录登记、罚款登记;统计数据:书籍借阅情况统计或读者借阅情况统计。基本要求:利用数据库技术,完成基础数据和业务数据的储存和操作,数据库设计合理1.设计报告:含E-R图、数据字典、关系模式、关系实例、查询描述、关系代数、SQL 实现的查询语言及查询结果。 2.上机实现。

1.问题描述 1.1背景 随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对着庞大的信息量,传统的人工方式管理会导致图书馆管理上的混乱,人力与物力过多浪费,图书馆管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效,规范和实用的图书管理系统,对图书资料进行集中统一的管理。 另一方面,IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理的革命,实现了信息的自动化处理,提高了处理的及时性和正确性。 提高图书管理工作效率,作到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。 1.2数据需求 图书馆管理信息系统需要完成功能主要有: 1. 读者基本信息的输入,包括借书证编号、读者姓名、读者性别。 2.读者基本信息的查询、修改,包括读者借书证编号、读者姓名、读者性别等。 3.书籍类别标准的制定、类别信息的输入,包括类别编号、类别名称。 4.书籍类别信息的查询、修改,包括类别编号、类别名称。 5.书籍库存信息的输入,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期、登记日期。 6.书籍库存信息的查询,修改,包括书籍编号、书籍名称、书籍类别、作者姓名、出版社名称、出版日期登记日期等。 7.借书信息的输入,包括读者借书证编号、书籍编号、借书日期。 8.借书信息的查询、修改,包括借书证编号、读者编号、读者姓名、书籍编号、书籍名称、借书日期等。 9.还书信息的输入,包括借书证编号、书籍编号、还书日期。 10.还书信息的查询和修改,包括还书读者借书证编号、读者姓名、书籍编号、书籍名称、借书日期、还书日期等。 11.超期还书罚款输入,还书超出期限包括超出期限还书的读者借书证号,书籍编号,罚款金额。

直接通过ADO操作ACCESS数据库

准备工作 (1)、引入ADO类 (2)、初始化COM (3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr 1.连接和关闭数据库 (1)连接 (2)、关闭

(3)、设置连接时间 2.打开一个结果集 (1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果 (2)关闭结果集 3.操作一个结果集 (1)、遍历(读取) a)、用pRecordset->adoEOF来判断数据库指针是否已经移到结果集的末尾了;m_pRecordset->BOF判断是否在第一条记录前面:

b)、取得一个字段的值的办法有两种办法 一是 二是 (2)、添加 1.调用m_pRecordset->AddNew(); 2.调用m_pRecordset->PutCollect();给每个字段赋值 3.调用m_pRecordset->Update();确认 (3)、修改 (4)、删除 a)、把记录指针移动到要删除的记录上,然后调用 4.直接执行SQL语句,除了要用到结果集其余的大部分功能都可以直接用SQL 语言实现 (1)、用_CommandPtr和_RecordsetPtr配合

(2)、直接用_ConnectionPtr执行SQL语句 其中CommandText是命令字串,通常是SQL命令。 参数RecordsAffected是操作完成后所影响的行数, 参数Options表示CommandText中内容的类型,Options可以取如下值之一: ?adCmdText:表明CommandText是文本命令 ?adCmdTable:表明CommandText是一个表名 ?adCmdProc:表明CommandText是一个存储过程 ?adCmdUnknown:未知 5.调用存储过程 (1)、利用_CommandPtr (2)、直接用_ConnectionPtr直接调用(见4.(2)) 6.遍历数据库中的所有表名

SQL数据库管理系统 A

绝密★启用前学院 学年第二学期期末考试 级专业()《SQL数据库管理系统》试卷A 一、选择题(共20分,每题1分) 1、SQL-server数据库文件的扩展名为()。 A、.ndf B、.ldf C、.mdb D、.mdf 2、数据库文件初始大小,在SQL- server 2000 中默认值为()。 A、1MB B、2MB C、3MB D、4MB 3、SQL- server 2000辅助数据库文件的扩展名为()。 A、.ldf B、.ndf C、.mdb D、.mdf 4、创建用户数据库的Transact-SQL命令是()。 A、create table B、create C、create database D、drop 5、使用Transact-SQL语句创建数据库时,()关键字是用于指定数据库的事务日志文件。 A、log on B、primary C、filename D、filegrowth 6、在SQL中,create table为( )数据库中基本表结构的命令。 A、建立 B、修改 C、删除 D、查询 7、在SQL中,alter table为( )数据库中基本表结构的命令。 A、建立 B、修改 C、删除 D、查询 8、Microsoft公司的SQLServer2000数据库管理系统一般只能运行于( )。 A、Windows平台 B、UNIX平台 C、LINX平台 D、NetWare平台 9、SQLServer2000标准版不支持的操作系统是( )。 A、Windows 2000 Server B、Windows NT Server C、Windows98 D、Windows 2000 Advanced Server 10、在SQL Server2000中.( )为用户建立数据库提供模板。 A、master B、model C、tempdb D、msdb 11、SQL Server系统中的所有系统级信息存储于哪个数据库( )。 A、master B、model C、tempdb D、msdb 12、下列语句中正确的是()。表 score(sti_id,names,math,English,VB) A、select stu_id,sum(math) from score B、select sum(math),avg(VB) from score C、select * ,sum(english) from score D、delete * from score 13、表设计器的“允许空”单元格用于设置该字段是否可输入空值,实际上就是创建该字段的() 约束。 A、主键 B、外键 C、NULL D、CHECK 14、在Transact-SQL语句中,用以修改数据库结构的命令是()。 A、create database B、drop database C、alter database D、alter table 15、在Transact-SQL语句中,用以删除数据库的命令是()。 A、create database B、drop database C、alter database D、drop table 16、整数数据类型int的存储大小为()。 A、1B B、2B C、3B D、4B 17、money型数据的存储大小为()。 A、2B B、4B C、8B D、10B 18、SQL-server数据库中每个表至多可以有()列。 A、1024 B、512 C、256 D、65536 19、数据表的名称最长不超过()个字符。 A、64 B、128 C、256 D、512 20、每个表允许存在()个住键约束。 A、1 B、2 C、3 D、4 二、填空题(共20分,每空1分) 1、数据库系统由__________和__________________两部分组成。 2、在SQL中,主码约束的关键字为__________,外码约束的关键字为____________。 3、数据库管理系统的基本功能包括____________、____________、____________和___________。 4、数据完整性可以分为____________、___________、____________和用户自定义完整性。 5、在SQL中,create view、update和drop view命令分别为_______、_______和_______视图的 命令。 6、在新版的SQL中,表之间的连接共有三种方式,对应的关键字分别为_____________、 ______________和right join。 7、SQL Server采用的结构化查询语言称为__________________。 8、一般可以使用______命令来标识 Transact-SQL批处理的结束。 9、SQL Server中的整数类型包括bigint、________、___________和tinyint四种。 三、简答题(共20分,每个5分) 1、SQL-server注释语句有哪几种符号?各用于什么情况? 2、简述索引的分类。 3、什么叫存储过程?存储过程分为哪三类?

VisualStudio2017中使用ADO访问数据库的实例

Visual Studio 2017 使用ADO访问数据库的实例 Visual Studio 2017 version 以Visual Studio 2015 和后续的Microsoft Visual Studio 更新中的进展为基础构建而成,为开发团队

提供需要的解决方案,使其接纳这种转变并开发和交付利用下一波Windows 平台创新(Windows 10) 的新式应用程序,同时在所有Microsoft 平台上支持多种设备和服务。 支持Windows 10 App 开发 敏捷项目管理(Agile Portfolio Management) 版本控制 轻量代码注释(lightweight code commenting) 编程过程 Visual Studio 2017 预览版提供的工具集非常适合生成利用下一波Windows 平台创新(Windows 10) 的新式应用程序,同时在所有Microsoft 平台上支持设备和服务。支持在Windows 10 中开发Windows 应用商店应用程序,具体表现在对工具、控件和模板进行了许多更新、对于XAML 应用程序支持新近提出的编码UI 测试、用于XAML 和HTML 应用程序的UI 响应能力分析器和能耗探查器、增强了用于HTML 应用程序的内存探查工具以及改进了与Windows 应用商店的集成。

Visual Studio 2017 预览版进行了大量改进,可帮助您在编码时提高工作效率并集中精力。某些功能首先在Visual Studio Power Tools 扩展中以试验性质出现,经过改进后才纳入到Visual Studio 中。新版本中内置了多种提高工作效率的功能,如自动补全方括号、使用快捷键移动整行或整块的代码以及行内导航。此外,Visual Studio 2017 预览版的团队资源管理器增强了主页设计,可以更简便地导航到团队协作功能,并可取消停靠“挂起更改”和“生成”,使其显示在一个单独的窗口中。 在处理大型代码文件时,可能难以了解当前所处的位置。在Visual Studio 2017 预览版中,可轻松地在两种模式之间切换滚动条的行为。在栏模式中,可更直接地查看脱字号位置等注释、更改所在位置和跟踪错误。在图模式下,滚动条显示源代码的实时预览,而将鼠标悬停

数据库管理系统中的SQL语言

数据库管理系统中的SQL语言 SQL的9条核心命令动词: SELECT 数据查询 CREATE/DROP/ALTER 数据定义 INSERT/UPDATE/DELETE 数据操纵 GRANT/REVOKE 数据控制 数据库的定义 SQL的作法:CREATE DATABASE <数据库文件名> VFP的作法:无直接创建数据库的SQL命令 数据库的管理 1、显示数据库信息 SP_HELPDB [数据库名] 2、配置数据库 SP_DBOPTION['数据库名'][,'选项名'][,'值'] 3、重新命名 SP_RENAMEDB'原名','新名' 4、删除数据库 DROP DATABASE 数据库名 数据表的定义 在SQL Server 2000和Visual FoxPro中都可以使用SQL语言定、操作管理和删除数据表 SQL基本表作法:CREATE TABLE [数据库名,[所有者,]]<表名> VFP基本表作法:CREATE TABLE|DBF <表名>[FREE](<字段名1><类型>(<长度>[,<小数位数>]) 数据表的管理 1、查看表的结构 SQL作法:SP_HELP[[@OBJNAME=]NAME] 2、修改表结构 SQL作法:ALTER TABALE 表名 ADD |ALTER COLUMN | DROP COLUMN <字段名1>[类型[(长度)]] [ NULL] [ NOT NULL] VFP作法:ALTER TABALE 表名 ADD |ALTER [COLUMN ]<字段名1><类型>(<长度>[,<小数位数>] [ NULL] [ NOT NULL] 3、表的删除 SQL作法和VFP作法相同 DROP TABALE <表名> 4、数据的插入 SQL作法:INSERT [INTO]<表名>[(列名)] VALUES (表达式) VFP作法:INSERT INTO <表名>(<字段名1>[,<字段名2>]…)VALUES (<表达式1>,<表达式2>]…)

VC++使用ADO开发ACCESS数据库

VC++使用ADO开发ACCESS数据库 本文通过实例演示如何在VC++中使用ADO进行ACCESS数据库编程,并对涉及到的几个概念进行详细解释。 本文不对ADO和ACCESS的基本概念进行详细解释,主要包括以下内容: 第一部分 ADO和ADOX到底是什么,二者的作用和区别建立数据库 第二部分 ADOX创建ACCESS数据库 第三部分ADO创建ACCESS数据库的表 第四部分使用_ConnectionPtr接口开发ACCESS数据库 第五部分使用_RecordsetPtr接口开发ACCESS数据库 第一部分ADO和ADOX到底是什么,二者的作用和区别 ADO是Microsoft 最新推出的数据库访问的高层软件接口。它和Microsoft 以前的数据库访问接口DAO、RDO相比具有更大的灵活性,使用也更方便,开发效率大为提高。 ADOX是核心ADO对象的扩展库。它提供的附加对象可用于创建、修改和删除模式对象,如表和过程。要使用ADOX,则应建立对ADOX类型库的引用。ADOX 库文件名为 Msadox.dll。 通俗地讲,ADO是访问数据库的一种接口,可以使用它方便地进行数据库编程。而ADOX是微软对ADO功能的扩展,比如:可以ADOX创建数据库(而ADO 没有创建数据库的功能)。 第二部分ADOX创建ACCESS数据库 用ADOX创建access数据库方法很简单,只需要创建一个Catalog对象,然后调用它的Create方法就可以了。 例程ADOXCreateDatabase演示如何使用ADOX创建一个ACCESS数据库。 打开VC++ 6.0,新建一个基于对话框的工程ADOXCreateDatabase。在对话框IDD_ADOXCREATEDATABASE_DIALOG中添加一个编辑框IDC_DBNAME和一个按钮IDC_BTN_CREATE,编辑框用以输入数据库名称。 使用ClassWizard给编辑框创建一个CString变量m_dbName。 双击IDC_BTN_CREATE按钮,并编辑OnBtnCreate()函数如下: void CADOXCreateDatabaseDlg::OnBtnCreate() { //使输入到编辑框IDC_DBNAME的内容更新到m_dbName变量中 UpdateData(TRUE); CString str; str="d:\\"+m_dbName+".mdb"; //检查该数据库是否已经存在,如果该数据库已经存在,弹出消息框,返回//使用API函数PathFileExists()检查路径文件是否存在 //请注意:为了使用API函数PathFileExists(),需要加入

C#与SQL数据库学生成绩管理系统完整代码

数据库技术及应用项目设 计报告 学生成绩管理系统 姓名:Celia Yan 2015-01-07

一.设计目的及意义 在如今的高校日常管理中,学生成绩管理系统是其中非常重要的一环,特别是当前学校规模不断扩大,学生人数日益增加,课程门类多,校区分散等实际情况,学生成绩统计功能越来越繁重,稍有疏忽就会出现差错。因此,学生成绩管理系统更具有非常大的实际应用意义。在互联网快速崛起的今天,改革传统的手工录入方式,公正,准确,及时反映学生的信息和成绩的情况,以适应信息时代的要求,是学生成绩管理系统的一个新的理念。通过成绩管理可以大大提高学校的工作效率。学生成绩管理系统应该完成以下两个方面的内容:学生档案资料的管理、学生成绩的管理。通过学生成绩管理系统可以做到信息的规范管理,科学统计和快速查询、修改、增加、删除等,减少管理方面的工作量。 二.主要功能 该系统主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、规范化和自动化,其主要任务是用计算机对学生信息进行日常管理,如查询、修改、增加、删除,另外还考虑到用户登录的权限,针对学生信息和权限登录的学生成绩管理系统。 本系统主要包括注册管理、教师管理、学生信息查询、添加、修改、删除等部分。其主要功能有: (1)学生信息的添加,包括输入学生基本信息和成绩。 (2)学生信息的查询,包括查询学生的基本信息和成绩。 (3)学生信息的修改,包括修改学生基本信息和成绩。 (4)学生信息的删除,包括删除学生基本信息和成绩。 (5)登录用户密码修改,用户登录到系统可进行相应的用户密码修改。 (6)管理员用户对用户名的管理,包括添加新用户、删除用户。 学生成绩管理系统是典型的信息管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。对于后者则要求应用程序功能完备,易使用。 该管理系统我使用的是Microsoft Visual Studio 2012 及 Microsoft SQL Server 2008。

ado连接 access 数据库

ado连接 access 数据库.txt-//自私,让我们只看见自己却容不下别人。如果发短信给你喜欢的人,他不回,不要再发。看着你的相片,我就特冲动的想P成黑白挂墙上!有时,不是世界太虚伪,只是,我们太天真。直接通过ADO操作Access数据库 作者:徐景周 下载示例源码 上次经过<直接通过ODBC读、写Excel表格文件>和<直接通过DAO读、写Access 文件>两篇文章,给大家介绍了ODBC和DAO两种数据库访问技术的基本使用方法,这次要给大家介绍的是ADO数据库访问技术的使用方法。ADO(Active Data Object,活动数据对象)实际上是一种基于COM(组件对象模型)中的自动化接口(IDispatch)技术,并以OLE DB(对象连接和镶入的数据库)为基础,经过OLE DB精心包装后的数据库访问技术,利用它可以快速的创建数据库应用程序。 ADO提供了一组非常简单,将一般通用的数据访问细节进行封装的对象。由于ODBC数据源也提供了一般的OLE DB Privider,所以ADO不仅可以应用自身的OLE DB Privider,而且还可以应用所有的ODBC驱动程序。关于OLE DB和ADO的其它详细情况,读者可以自行查阅相关书籍或MSDN,这里就不一一说明了。让我们直接步入主题,如何掌握ADO这种数据库访问技术。ADO的操作方法和前面讲过的DAO的操作在很多方面存在相似之处,在这里,笔者为了更有效的说明它的使用方法,用VC6.0做了一个示例程序(AdoRWAccess),这个示例程序可以直接通过ADO来操作Access数据库,示例程序的运行效果如下图所示: 在示例程序中我们仍采用原库结构,数据库名Demo.mdb,库内表名DemoTable,表内字段名为Name(姓名)和Age(年龄)的两个字段,来构造示例程序操作所需的Access数据库,这也和上两篇文章的示例源码中的库结构相兼容。 下面让我们看看ADO数据库访问技术使用的基本步骤及方法: 首先,要用#import语句来引用支持ADO的组件类型库(*.tlb),其中类型库可以作为可执行程序(DLL、EXE等)的一部分被定位在其自身程序中的附属资源里,如:被定位在msado15.dll的附属资源中,只需要直接用#import引用它既可。可以直接在Stdafx.h文件中加入下面语句来实现: #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \

sql数据库课程设计工资管理系统

河南城建学院 《数据库技术及其应用》课程设计报告书 题目:工资管理系统 系部:数理系 专业:数学与应用数学 班级: 姓名: 学号: 指导教师:-------------- 河南城建学院 2013年 1 月11日

目录 第一章选题的背景和意义 (1) 1 选题的背景 (1) 1.2选题的意义 (1) 第二章数据库结构设计 (2) 2.2 概念结构设计 (3) 2.3逻辑结构设计 (4) 第三章程序代码实现 (7) 3.1创建表: (7) 3.2数据导入: (9) 3.3查询功能的实现: (9) 3.4其他实现: (14) 第四章课程设计总结 (15) 刘保朋小结: (15) 参考文献: (16)

第一章选题的背景和意义 1选题的背景 随着公司业务的扩展,人员的增多,传统的手工作业已经不再适合公司发展的需要所以引进计算机技术对企业内部员工进行方便的管理,这样有诸多好处,各层管理人员可以对企业众多的员工信息进行动态的管理,例如基本资料的修改,添加,删除,查询等。有利于减少错误,减轻人事部门的任务,提高效率,节约人力资源,降低企业成本。 1.2选题的意义 随着经济的发展,企业正向着大型化、规模化发展,而对于大中型企业,员工、职称等跟工资管理有关的信息随之急剧增加。在这种情况下单靠人工来处理员工的工资不但显得力不从心,而且极容易出错。如何设计一个小型企业工资的数据库管理系统,由计算机代替人工执行一系列诸如增加新员工,删除旧员工,工资查询,统计等操作。这样就使办公人员可以轻松快捷地完成工资管理的任务。 对于企、事业单位的工资发放来说,不需要太大型的数据库系统。只需要一个操作方便,功能实用,能同时满足财务部门、单位其他相关部门及代发单位三方对数据的管理及需求的系统。企业的目标就是在于利用数据库编程设计一个操作方便、简单实用的工资管理系统。 实现工资的集中管理。可供管理人员对本单位的人员以及工资进行增加、删除、修改、查询,对人事的管理及工资发放中的应发工资合计等项目由系统自动进行计算;同时系统还可对人事及工资管理情况进行多角度查询。 利用数据库对小型企业的工资进行管理,不仅可以节省开支,而且还可以节省时间,充分发挥了其小却精的特点,通过对这个数据库的编程,也是企业认识到了自己在很多方面的不足,也掌握了很多应用方面的技巧。 第二章数据库结构设计 2.1需求分析 本系统开发的主要目标是要企事业单位工资管理实现计算机管理,使管理员能够有序的管理每一位职工的各项工资条款的发放,以及企业工资的统计,使企

SQL-server数据库管理系统试卷及答案A

SQL-server数据库管理系统试卷及答案A 学年第二学期 《SQL-server 2000数据库管理系统》试卷(A) 使用班级:命题教师:主任签字: 一、选择题(共20分,每题1分) 1、一个仓库可以存放多种产品,一种产品只能存放于一个仓库中。仓库与产品之间的联系类型是()。 A、一对一的联系 B、多对一的联系 C、一对多的联系 D、多对多的联系

2、不属于传统数据模型的是()。 A、层次数据模型 B、网状数据模型 C、关系数据模型 D、面向对象数据模型 3、以下正确的论述是()。 A、在建立数据库的时候,SQL Server 是可以创建操作系统文件及其目录路径。 B、数据库中有一些sys开头的系统表,用来纪录SQL Server组件、对象所需要的数据,这些系统表全部存放在系统数据库中。 C、SYS开头的系统表中的数据用户不能直接修改,但可以通过系统存储过程、系统函数进 行改动、添加。 D、12AM是中午,12PM是午夜。 4、数据库系统不仅包括数据库本身,还要包括相应的硬件,软件和()。 A、数据库管理系统 B、数据库应用系统 C、相关的计算机系统 D、各类相关 人员 5、数据库系统阶段,数据()。 A、具有物理独立性,没有逻辑独立性 B、具有物理独立性和逻辑独立性 C、独立性差 D、具有高度的物理独立性和一定程度的逻辑独立性 6、数据库中只存放视图的()。 A、操作 B、对应的数据 C、定义 D、限制 7、声明了变量:declare @i int,@c char(4),现在为@i赋值10,为@c赋值'abcd', 正确的语句是()。 A、set @i=10,@c='abcd' B、set i=10 , set @c='abcd' C、select @i=10,@c='abcd' D、select @i=10, select @c='abcd' 8、下列那组数据类型的列不能被指定为主键,也不允许指定主键列有NULL属性 ()。 A、int和decimal B、nvarchar和datetime C、image和text D、real和money 9、使用“CREATE DATABASE AAA“命令所建立数据库文件的初始大小是()。

ADO方法对Access数据库操作

一、Access数据库创建 新建一个Accesss数据库文件,然后文件--新建--空白桌面数据库,弹出下面的窗口。 点击那个小文件夹的图标,出现下面的窗口,保存类型选择2002—2003格 式,文件名,然后确定,创建。 然后在设计视图中设计数据库成下面的样式。

再在数据库中增添一些信息如下: 然后保存就可以了,记得注意一下把“表1”这个名字改过来啊。 二、在VC++中建立一个基于对话框的工程(在这里取名为sjtest) 1、在FileView中的Header Files的头文件中导入文件。(代码如下) #import "C:\Program Files\Common Files\System\ado\" no_namespace \ rename("EOF","adoEOF")rename("BOF","adoBOF")

2、在主窗口类声明两个变量。(在中) 代码:(这两个是智能指针,百度一下哈)_ConnectionPtr m_pConnection; _RecordsetPtr m_pRecordset;

3、在对话框中添加一个ListControl控件,并且将其属性中的Style设置如图 4、为list control捆绑变量m_Grid(查看—建立类向导—Add Member variable

name) 5、在CSjtestApp应用程序类中的初始化函数InitInstance()中初始化COM环境在上面添加: ::CoInitialize(NULL); 并在return之前释放:添加代码如下: ::CoUninitialize();

SQL-SERVER数据库管理系统软件的使用

数据库管理系统软件的使用 一、实验目的 (1)认识几种常见的数据库管理系统,熟悉它们的使用界面; (2)熟练掌握建立数据库和表,向数据库输入数据、修改数据和删除数据的操作。 二、实验内容 分别在Access和SQL SERVER2000中建立数据库并设计各表,输入多条实际数据,并实现数据的增、删、改操作。 三、实验步骤: 创建用于学生管理数据库,数据库名为XSGL,包含学生的基本信息,课程信息和选课信息。数据库XSGL包含下列3个表: (l)student:学生基本信息。 (2)course:课程信息表。 (3)sc:学生选课表。 各表的结构分别如表1、表2和表3所示。 表1 学生信息表:student 表2 课程信息表:course

表3 学生选课表:sc 1.用可视化界面在Access中建立数据库和表: (a)在Access中创建xsgl.mdb数据库,使用表设计视图创建如表1、表2、表3所示结构的3个表。 提示:(1)启动Access2000或Access2003,选择文件->新建->空数据库,输入数据库文件名xsgl.mdb,进入(2);

图1 Access数据库设计界面 (2)启动如图1的设计界面后,选择表对象和使用使用设计器创建表,选择新建,进入(3); 图2 表设计器 (3)生成如图2界面,选择设计视图,点击确定按钮,进入(4); (4)在图3表设计界面下,分别创建student表,course表和sc表的结构; (5)输入表中的记录:

分别在student 表、course 表和sc 表中输入如下表中的记录: 在数据库视图下,选择表对象中的相应表选择打开,在浏览视图下输入如下表记录: (b )对表中的记录进行浏览、修改、删除操作。 2.在SQLSERVER 中用企业管理器新建数据库和表: (1)建立xsgl 数据库: ①启动SQL Server2000企业管理器,界面如下:

SQL数据库图书管理系统(完整代码)

广西交通职业技术学院信息工程系作品设计报告书题目:《图书管理系统》 班级网络2012-1班 学号 20120404026 姓名唐张森 课程名称数据库应用技术 指导教师乐文行 二O一三年六月

目录

数据库课程设计报告书 一、设计目标 1.掌握计算机管理信息系统设计的一般方法,主要包括系统分析、系统设计的组织 和实施。 2.关系型数据库管理系统的编程技术,并能独立完成一般小系统的程序设计、调试 运行等工作。 3.培养把所学知识运用到具体对象,并能求出解决方案的能力。 二、数据库存储设计指导思想 在数据库存储设计的无数选择中,简单是系统架构师和DBA 的秘密武器。 简单,有时候就来自于对一个特定的表或表空间没有选择最优I/O 特性,总有这么一种可能,一个富有经验的DBA 拥有高超的存储技能并可以没有时间限制的去为一个非常重要的表或者索引配置一个存储。然而这样做的问题是,就算能达到设计的最佳性能,为了维护原始对象,这也经常造成对一个系统的管理变得更加复杂。好的数据库存储设计的要点是,在一个动态系统上,实现所有目标应该是最初的系统设计的一部分,并应该在数据库运行过程中长期进行。这篇文档简单的最佳实践描述达到了这些目标并且几乎没有性能损失。 三、任务 角色:读者、图书馆馆员、系统管理员;基础数据:读者信息、图书信息、操作员信息;业务数据:借还书记录登记、罚款登记;统计数据:书籍借阅情况统计或读者借阅情况统计。基本要求:利用数据库技术,完成基础数据和业务数据的储存和操作,数据库设计合理1.设计报告:含E-R图、数据字典、关系模式、关系实例、查询描述、关系代数、SQL 实现的查询语言及查询结果。 2.上机实现。

VC++下使用ADO访问Access数据库完整篇

VC++下使用ADO访问Access数据库完整篇 2009年10月18 | 分类: 编程开发 | 3 条评论 | 标签: Visual Studio 这次先整理一下ADO的全套流程方便有类似需求的网友参考。实际上,根据天缘的经验,接口类编程只需要遵守人家的约定就可以了,很多做软件的网友也都是忙的很,没有时间一一深究。 1、在StdAfx.h中引入ADO类支持 方法是在StdAfx.h中增加下面两句话: #include //如果需要则添加本句 #import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename ("EOF", "adoEOF") 2、初始化COM环境 在MFC中可以用AfxOleInit()或CoInitialize(NULL),该函数一般放在InitInstance()历程里。 非MFC使用用CoInitialize(NULL)。 卸载COM环境使用CoUnInitialize(),一般放在主程序的析构函数里。 这样我们就会三个指针可用:_ConnectionPtr、_RecordsetPtr和_CommandPtr,分别代表: _ConnectionPtr接口返回一个记录集或一个空指针,通常使用它来创建一个数据连接或执行一条不返回任何结果的SQL语句,对于要返回记录的操作通常使用_RecordserPtr来实现。而用 _ConnectionPtr操作时要想得到记录条数得遍历所有记录,用_RecordserPtr则不需要。 _RecordsetPtr指针是一个记录集对象。可以对记录集提供了更多的控制功能。它不一定要使用一个已经创建的数据连接,可以用一个连接串代替连接指针赋给 _RecordsetPtr的connection成员变量,让它自己创建数据连接。如果你要使用多个记录集,最好的方法是使用已经创建了数据库连接的全局 _ConnectionPtr接口,然后使用_RecordsetPtr执行存储过程和SQL语句。 _CommandPtr指针接口返回一个记录集。CommandPtr提供了一种简单方法来执行返回记录集的存储过程和SQL语句。可以利用全局 _ConnectionPtr接口,也可以在_CommandPtr接口里直接使用连接串。一次或少量数据库访问操作,一般是

《大型数据库管理系统-SQL》课程设计(信管10级)

《大型数据库管理系统——SQL Server》 课程设计要求 一、课程设计的目的和要求 《大型数据库管理系统——SQL Server》课程设计是信息管理与信息系统专业非常重要的实践性环节之一,是学习该课程后一次全面的综合练习。 通过本课程设计,使学生从基本概念和实际应用出发,掌握数据库设计和数据库创建、表的操作、存储过程与触发器应用、SQL程序设计等技能。着重培养学生SQL Server 2000开发数据库应用系统的技术和方法,进一步提高学生综合运用所学知识的能力。 二、课程设计的内容 基于Microsoft SQL Server,创建一个具体的数据库系统。 可以从下面题目中选取一个题目(一人一题):

三、课程设计内容的具体要求 1、在SSMS中,建立数据库,并实现对SQL Server的用户和角色管理。(10 分) 2、在SSMS中,创建数据库下的表(三个以上),并完成表和表之间的各种完整性约束的设置。(15 分) 3、使用T-SQL语句创建默认值对象,并与表中字段绑定。(5 分) 4、使用T-SQL语句创建规则对象,并与表中字段绑定。(5分) 5、使用T-SQL语句创建用户自定义数据类型,并用该数据类型定义表中字段。(5 分) 6、在SSMS中,自行录入数据,数据量要足够多(每张表至少10行以上数据),尽量模拟真实数据。(5 分) 7、使用T-SQL语句完成数据修改和数据删除的操作。(5 分) 8、在SSMS中,完成数据库的备份和恢复。(5分) 9、使用T-SQL语句执行查询操作(查询的数量不得少于5个,并且不能设计为单表查询,要包含各种查询,如:统计查询、模糊查询、单表查询、多表查询、嵌套查询等等)。(10 分) 10、创建多表组合的视图。(5 分) 11、编写一个用户自定义的函数,函数名自拟。函数功能是给定函数参数,返回该参数对应的基本信息结果。要求使用T-SQL语句调用函数,返回结果。(10 分) 12、创建一个带输入参数的存储过程,存储过程名自拟。存储过程接受代号为输入参数,存储过程的结果显示该代号的基本信息。要求使用T-SQL语句执行并验证触发器的正确性。(10 分) 13、创建触发器,利用触发器来保证数据库中的参照完整性,以维护其外键与参照表中的主键一致。使用T-SQL语句执行并验证触发器的正确性。(10 分) 四、评阅标准 1、课程设计文档规范性:格式规范、基本规范、存在问题 2、数据库实现功能大小:合理+详细、基本合理+较详细、一般+存在问题 3、实现程度:实现+正确、基本实现+基本正确、存在问题 五、提交的清单 1、课程设计文档打印稿一份。(具体格式要求见附录) 2、全班提交一份光盘。 3、光盘中,每个同学以自己的学号加姓名的形式创建一个文件夹(如:“ ****”),文件夹中包括自己创建的数据库(包括数据库主数据文件*.mdf和日志文件_log.ldf)及课程设计文档电子版。

VB利用ADO控件连接access数据库

VB利用ADO控件连接access数据库今天告诉大家VB利用ADO控件连接access数据库的两种方法: 一种是在 adodc1的属性里设置数据库文件的路径,这种方法的优点是简单易操作,缺点是,当源文件换了地方后,要重新设置数据库的路径,否则连接不上数据库了。 一种是用代码设置数据库的路径,这种方法的优点就是只要源文件和数据库在同一文件夹下,无论移动到哪里都能连接上。 如果没有建立好数据库的话,先建立一个数据库,然后建立一个表比如我们建的表名为message,然后把里面的字段名称和数据类型都按自己的需要设置好.然后保存就可以了. 打开Microsoft Visual Basic6.0 我用的是VB6.0,在需要调用数据库的窗体上加入一个adodc控件,默认名称为:Adodc1。默认的情况下工具栏里是没有这个控件的,可以打开工程---部件(快捷键CTRL+T),去掉只显示选定项的勾,然后勾上Microsoft ADO Data Control(OLEDB),然后确定,工具栏就会多了一个adodc的控件。 第一种方法:设置adodc1的属以连接数据库.在adodc1控件上右键--Adodc属性--使用连接字符串--生成--Microsoft Jet 4.0 OLE DB Provider--下一步--选择或输入数据库名称---找到要连接的数据库后,确定.然后记录源设置属性. 如果要把内容提交到数据库一般使用adCmdTable. 表选择要连接的表。设置完毕后就可以了. 如果我们想把内容提交到数据库.举个例子.. 在窗体建立一个文本框,设置属性中的DataSource为adodc1 DataField为要连接的数据库的字段名。如果数据库中有字段,会让你选择。

数据库管理系统SQL Server

数据库管理系统SQL Server之总预览(零) 外企公司来了个老外主管,中文还不错。下午主管打电话跟客户说:“请问是野种吗?”大家都愣了。他又说请问是野种吗?只听客户接通后,大声回骂到:“你才是野种,你全家都是野种。”说完啪的一声把电话给挂了,大家一看他手里的客户单,原来是叶总。 1、数据库管理系统SQL Server之概述(一) 2、数据库管理系统SQL Server之企业管理器(二) 3、数据库管理系统SQL Server之T-SQL语言(三) 零测试 数据库管理系统SQL Server之概述(一) 去相亲,见一娇小可爱女生,两人聊得很是投机,后来聊到体重,她让我猜她有多重 “肯定不过一百斤” “你怎么知道?”女崇拜的问。 LZ当时脑子一抽:“体重不过百,不是平胸就是矮,你两样都占了,所以肯定没过百” 然后。 就没有你然后了。 1、SQL Server的简介 a)SQL Server是Microsoft公司推出的适用于大型网络环境的关系型数据库管理系统,它支持客户/服务器 体系结构,能够支持大吞吐量的事务处理,也能在Microsoft Windows Server网络环境下管理数据存取的应用程序 b)SQL Server是开放式的系统,因此可以很好地与其他系统进行交互操作 2、SQL Server的结构 a)数据库:32767个数据库,最小为1MB,最大为1TB; b)表:每个数据库最多20亿个表,表中每行最大字节数为8060 c)列:每个表最多1024个列 d)索引:每个表一个簇式索引,最多249个非簇式索引,一个复合索引最多有16个索引关键字 e)存储过程:一个存储过程最多可以有1024个参数和最多32级嵌套 f)用户连接:32767个 g)锁定及打开的对象:20亿个 h)打开的数据库:32767个 3、SQL Server的版本 a)SQL Server 企业版:作为生产数据库服务器使用,支持SQL Server中的所有可用功能,并可根据支持最 大的web站点和企业联机事务处理及数据仓库系统所需的性能水平进行伸缩; b)SQL Server 标准版:作为小工作组或部门的数据库服务器使用; c)SQL Server 个人版:供移动的用户使用,这些用户有时从网络上断开,但所运行的应用程序需要SQL Server数据存储; d)SQL Server 开发版:供程序员用来开发将SQL Server用作数据存储的应用程序,虽然开发版支持企业版 的所有功能,使开发人员能够编写和测试可使用这些功能的应用程序,但是只能将开发版作为开发和测试系统使用,不用作为生产服务器使用。 4、SQL Server的系统目录 a)\BackUp 存放备份文件 b)\Binn 存放客户端和服务器端可执行文件与DLL文件

相关主题