毕业论文样文(4)

2019-02-17 10:34

中北大学成人教育学院2009届本科毕业设计说明书

从这个选项可以获得更快的速度还是更多的特征。

(1)Snapshot(快照) 这个选项要Visual C++在一次快照中下载整个查询。换言之,及时快速地给数据库内容拍照,并把它作为未来工作的基础。这种方法有三个缺点:第一,你看不到别人在网络上做的更新,这可能意味着你的决定是建立在老信息的基础上。第二,一次就下载所有这些记录,这意味着在下载期间给网络增加了沉重的负担。第三,记录下载时用户会结束等待,这意味着网络的呼叫性能变得更低。然而这种方法也有两个优点:第一,记录一旦被下载,该工作站所需的网络活动几乎就没有了棗这为其它请求释放了带宽。总之,你会看到网络的吞吐量增大了。第二,因为所有被申请的记录都在用户的机器上,所以用户实际上会得到应用程序更佳的总体性能。你可能想把快照的方法限制在较小的数据库上使用,原因在于快照适用于用户请求信息而不适用于数据编辑会话。

(2)Dynaset(动态集) 使用这个选项时,Visual C++创建指向所请求的每个记录的实际指针。另外,只有填充屏幕时实际需要的记录是从服务器上下载来的。这种方法的好处很明显。几乎马上就能在屏幕上看到记录。而且还会看到其它用户对数据库所做的更改。最后,其它用户也会看到你做的更改,因为动态集在你更改记录时被上载到服务器上。很明显,这种方法要求对服务器的实时访问,它减小了网络总吞吐量并降低了应用程序的性能。这个选项适合于创建用户要花费很多时间来编辑数据的应用程序。同时,它也是大型数据库的最佳选择,原因在于只需下载用户实际需要的信息。 3.5.2 ODBC需导出类

可以应用AppWizard来建立一个ODBC的应用程序框架,也可以直接使用ODBC来进行数据库编程,这时应包括头文件afxdb.h。

应用ODBC编程两个最重要的类是CDatabase和CRecordSet,但在应用程序中,不应直接使用CRecordSet类,而必须从CRecordSet类产生一的数据交换,RFX函数同对话框数据交换(DDX)机制相类似,负责完成数据库与成员个导出类,并添加相应于数据库表中字段的成员变量。随后,重载CRecordset类的成员函数DoFieldExchange,该函数通过使用RFX函数完成数据库字段与记录集域数据成员变量变量间的数据交换。 3.5.3 数据库连接

在CRecordSet类中定义了一个成员变量m_pDatabase。CDatabase *m_pDatabase:它是指向对象数据库类的指针。如果在CRecordSet类对象调用Open()函数之前,将一个已经打开的CDatabase类对象指针传给m_pDatabase,就能共享相同的CDatabase类对象。如:

- 13 -

中北大学成人教育学院2009届本科毕业设计说明书

CDatabase m_db;

CRecordSet m_set1,m_set2;

m_db.Open(_T(\建 立ODBC 连 接

m_set1.m_pDatabase=&m_db; //m_set1 复 用m_db 对 象 m_set2.m_pDatabse=&m_db; // m_set2 复 用m_db 对 象 或如下:

Cdatabase db;

db.Open(“Database”); //建立ODBC连接

CrecordSet m_set(&db); //构造记录集对象,使数据库指向db 3.5.4 查询记录

查询记录使用CRecordSet::Open()和 CRecordSet::Requery()成员函数。在使用CRecordSet类对象之前,必须使用 CRecordSet::Open()函数来获得有效的记录集。一旦已经使用过CRecordSet::Open() 函数,再次查询时就可以应用CRecordSet::Requery()函数。在调用CRecordSet::Open()函数时,如果已经将一个已经打开的CDatabase 对象指针传给CRecordSet类对象的m_pDatabase成员变量,则使用该数据库对象建立ODBC连接;否则如果m_pDatabase为空指针,就新建一个CDatabase类对象并使其与缺省的数据源相连,然后进行CRecordSet类对象的初始化。缺省数据源由GetDefaultConnect()函数获得。你也可以提供你所需要的SQL语句,并以它来调用CRecordSet::Open()函数,例如:m_Set.Open (AFX_DATABASE_USE_DEFAULT,strSQL);如果没有指定参数,程序则使用缺省的SQL语句,即对在GetDefaultSQL()函数中指定的SQL语句进行操作:

CString CTestRecordSet::GetDefaultSQL() {return _T(\

对于GetDefaultSQL()函数返回的表名, 对应的缺省操作是SELECT语句,即: SELECT * FROM BasicData,MainSize

查询过程中也可以利用CRecordSet的成员变量m_strFilter和m_strSort来执行条件查询和结果排序。m_strFilter为过滤字符串,存放着SQL语句中WHERE后的条件串;m_strSort 为排序字符串,存放着SQL语句中ORDERBY后的字符串。 如: m_Set.m_strFilter=\电动机'\ m_Set.m_strSort=\ m_Set.Requery(); 对应的SQL语句为:

SELECT * FROM BasicData,MainSize

- 14 -

中北大学成人教育学院2009届本科毕业设计说明书

WHERE TYPE='电动机' ORDER BY VOLTAGE

除了直接赋值给m_strFilter以外,还可以使用参数化。利用参数化可以更直观,更方便地完成条件查询任务。使用参数化的步骤如下: (1) 声明参变量: Cstring p1; Float p2;

(2) 在构造函数中初始化参变量 p1=_T(\ p2=0.0f; m_nParams=2;

(3) 将参变量与对应列绑定

pFX->SetFieldType(CFieldExchange::param) RFX_Text(pFX,_T(\ RFX_Single(pFX,_T(\

完成以上步骤之后就可以利用参变量进行条件查询了: m_pSet->m_strFilter=\ m_pSet->p1=\电动机\ m_pSet->p2=60.0; m_pSet->Requery();

参变量的值按绑定的顺序替换查询字串中的“?”适配符。

如果查询的结果是多条记录的话,可以用CRecordSet类的函数Move(),MoveNext(),MovePrev(),MoveFirst() 和MoveLast()来移动光标。 3.5.5 增加记录

增加记录使用AddNew()函数,要求数据库必须是以允许增加的方式打开: m_pSet->AddNew(); //在表的末尾增加新记录 m_pSet->SetFieldNull(&(m_pSet->m_type),FALSE); m_pSet->m_type=\电动机\

... //输入新的字段值

m_pSet-> Update(); //将新记录存入数据库

- 15 -

中北大学成人教育学院2009届本科毕业设计说明书

m_pSet->Requery(); //重建记录集 3.5.6 删除记录

直接使用Delete()函数,并且在调用Delete() 函数之后不需调用Update()函数: m_pSet->Delete(); if(!m_pSet->IsEOF()) m_pSet->MoveNext(); else

m_pSet->MoveLast(); 3.5.7 修改记录

修改记录使用

Edit()函数:

m_pSet->Edit(); //修改当前记录

m_pSet->m_type=\发电机\修改当前记录字段值 ...

m_pSet->Update(); //将修改结果存入数据库 m_pSet->Requery(); 3.5.8 统计记录

统计记录用来统计记录集的总数。可以先声明一个

CRecordset对象m_pSet。再绑定一

个变量m_lCount,用来统计记录总数。执行如下语句:

m_pSet->Open(“Select Count(*) from 表名 where 限定条件”); RecordCount=m_pSet->m_lCount; m_pSet->Close();

RecordCount即为要统计的记录数。 或如下:

CRecordset m_Set(&db); //db 为CDatabase对象 CString strValue;

m_Set.Open(Select count(*) from 表名 where 限定条件”); m_pSet.GetFieldValue((int)0,strValue); long count=atol(strValue); m_set.Close(); count为记录总数。 3.5.9 执行SQL语句

- 16 -

中北大学成人教育学院2009届本科毕业设计说明书

虽然通过CRecordSet类,我们可以完成大多数的查询操作,而且在CRecordSet::Open()函数中也可以提供SQL语句,但是有的时候我们还想进行一些其他操作,例如建立新表、删除表、建立新的字段等等,这时就需要使用到CDatabase类的直接执行SQL语句的机制。通过调用CDatabase::ExecuteSQL()函数来完成SQL语句的直接执行: 如下代码所示:

BOOL CDB::ExecuteSQLAndReportFailure(const CString& strSQL) { TRY {

m_pdb->ExecuteSQL(strSQL); //直接执行SQL语句 }

CATCH (CDBException,e) {

CString strMsg;

strMsg.LoadString(IDS_EXECUTE_SQL_FAILED); strMsg+=strSQL; return FALSE; }

END_CATCH return TRUE; }

应当指出的是,由于不同DBMS提供的数据操作语句不尽相同,直接执行SQL语句可能会破坏软件的DBMS无关性。 3.6 系统运行环境 3.6.1 服务器软硬件要求 软件: Windows 2000 (服务器版) MS SQL Server 2000 TCP/IP协议 硬件: CPU:PⅢ 内存:128M

- 17 -


毕业论文样文(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2018-2024年中国航空发动机行业投资分析与投资研究报告(目录)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: