用Visual C开发数据库应用程序解析Word格式文档下载.docx

上传人:b****1 文档编号:15343475 上传时间:2022-10-29 格式:DOCX 页数:7 大小:18.95KB
下载 相关 举报
用Visual C开发数据库应用程序解析Word格式文档下载.docx_第1页
第1页 / 共7页
用Visual C开发数据库应用程序解析Word格式文档下载.docx_第2页
第2页 / 共7页
用Visual C开发数据库应用程序解析Word格式文档下载.docx_第3页
第3页 / 共7页
用Visual C开发数据库应用程序解析Word格式文档下载.docx_第4页
第4页 / 共7页
用Visual C开发数据库应用程序解析Word格式文档下载.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

用Visual C开发数据库应用程序解析Word格式文档下载.docx

《用Visual C开发数据库应用程序解析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《用Visual C开发数据库应用程序解析Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。

用Visual C开发数据库应用程序解析Word格式文档下载.docx

更重要的是,要告诉你从这个选项可以获得更快的速度还是更多

的特征。

1、Snapshot(快照这个选项要VisualC++在一次快照中下载整个查询。

言之,及时快速地给数据库内容拍照,并把它作为未来工作的基础。

这种方法

有三个缺点。

第一,你看不到别人在网络上做的更新,这可能意味着你的决定

是建立在老信息的基础上。

第二,一次就下载所有这些记录,这意味着在下载

期间给网络增加了沉重的负担。

第三,记录下载时用户会结束等待,这意味着

网络的呼叫性能变得更低。

然而这种方法也有两个优点。

第一,记录一旦被下

载,该工作站所需的网络活动几乎就没有了棗这为其它请求释放了带宽。

总之,你会看到网络的吞吐量增大了。

第二,因为所有被申请的记录都在用户的机器

上,所以用户实际上会得到应用程序更佳的总体性能。

你可能想把快照的方法

限制在较小的数据库上使用,原因在于快照适用于用户请求信息而不适用于数

据编辑会话。

2、Dynaset(动态集使用这个选项时,VisualC++创建指向所请求的每个记

录的实际指针。

另外,只有填充屏幕时实际需要的记录是从服务器上下载来的。

这种方法的好处很明显。

几乎马上就能在屏幕上看到记录。

而且还会看到其它

用户对数据库所做的更改。

最后,其它用户也会看到你做的更改,因为动态集

在你更改记录时被上载到服务器上。

很明显,这种方法要求对服务器的实时访

问,它减小了网络总吞吐量并降低了应用程序的性能。

这个选项适合于创建用

户要花费很多时间来编辑数据的应用程序。

同时,它也是大型数据库的最佳选

择,原因在于只需下载用户实际需要的信息。

3.2应用ODBC编程

可以应用AppWizard来建立一个ODBC的应用程序框架,也可以直接使用

ODBC来进行数据库编程,这时,应包括头文件afxdb.h。

应用ODBC编程两个最重要的类是CDatabase和CRecordSet,但在应用程序中,不应直接使用CRecordSet类,而必须从CRecordSet类产生一个导出类,并添加相应于数据库表中字段的成员变量。

随后,重载CRecordset类的成员函数DoFieldExchange,该函数通过使用RFX函数完成数据库字段与记录集域数据成员变量的数据交换,RFX函数同对话框数据交换(DDX机制相类似,负责完成数据库与成员变量间的数据交换。

下面举例说明在VisualC++环境中ODBC的编程技巧:

3.21数据库连接

在CRecordSet类中定义了一个成员变量m_pDatabase:

CDatabase*m_pDatabase;

它是指向对象数据库类的指针。

如果在CRecordSet类对象调用Open(函数之

前,将一个已经打开的CDatabase类对象指针传给m_pDatabase,就能共享相同的CDatabase类对象。

如:

CDatabasem_db;

CRecordSetm_set1,m_set2;

m_db.Open(_T("

Super_ES"

;

//建立ODBC连接

m_set1.m_pDatabase=&

m_db;

//m_set1复用m_db对象

m_set2.m_pDatabse=&

//m_set2复用m_db对象

或如下:

Cdatabasedb;

db.Open(“Database”;

//建立ODBC连接

CrecordSetm_set(&

db;

//构造记录集对象,使数据库指向db

3.22查询记录

查询记录使用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语句进行操作:

CStringCTestRecordSet:

GetDefaultSQL(

{return_T("

[BasicData],[MainSize]"

}

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

SELECT*FROMBasicData,MainSize

查询过程中也可以利用CRecordSet的成员变量m_strFilter和m_strSort来执行条件查询和结果排序。

m_strFilter为过滤字符串,存放着SQL语句中WHERE后的条件串;

m_strSort为排序字符串,存放着SQL语句中ORDERBY后的字符串。

m_Set.m_strFilter="

TYPE='

电动机'

"

m_Set.m_strSort="

VOLTAGE"

m_Set.Requery(;

对应的SQL语句为:

SELECT*FROMBasicData,MainSize

WHERETYPE='

ORDERBYVOLTAGE

除了直接赋值给m_strFilter以外,还可以使用参数化。

利用参数化可以更直观,更方便地完成条件查询任务。

使用参数化的步骤如下:

(1.声明参变量:

Cstringp1;

Floatp2;

(2.在构造函数中初始化参变量

p1=_T("

p2=0.0f;

m_nParams=2;

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

pFX->

SetFieldType(CFieldExchange:

param

RFX_Text(pFX,_T("

P1"

p1;

RFX_Single(pFX,_T("

P2"

p2;

完成以上步骤之后就可以利用参变量进行条件查询了:

m_pSet->

m_strFilter="

TYPE=?

ANDVOLTAGE=?

p1="

电动机"

p2=60.0;

Requery(;

参变量的值按绑定的顺序替换查询字串中的“?

”适配符。

如果查询的结果是多条记录的话,可以用CRecordSet类的函数Move(,

MoveNext(,MovePrev(,MoveFirst(和MoveLast(来移动光标。

3.23增加记录

增加记录使用AddNew(函数,要求数据库必须是以允许增加的方式打开:

AddNew(;

//在表的末尾增加新记录

SetFieldNull(&

(m_pSet->

m_type,FALSE;

m_type="

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

Update(;

//将新记录存入数据库

//重建记录集

3.24删除记录

直接使用Delete(函数,并且在调用Delete(函数之后不需调用Update(函数:

m_pSet->

Delete(;

if(!

IsEOF(

MoveNext(;

else

MoveLast(;

3.25修改记录

修改记录使用Edit(函数:

Edit(;

//修改当前记录

发电机"

//修改当前记录字段值

...

Update(;

//将修改结果存入数据库

3.26统计记录

统计记录用来统计记录集的总数。

可以先声明一个CRecordset对象m_pSet。

再绑定一个变量m_lCount,用来统计记录总数。

执行如下语句:

Open(“SelectCount(*from表名where限定条件”;

RecordCount=m_pSet->

m_lCount;

Close(;

RecordCount即为要统计的记录数。

CRecordsetm_Set(&

//db为CDatabase对象

CStringstrValue;

m_Set.Open(Selectcount(*from表名where限定条件”;

m_pSet.GetFieldValue((int0,strValue;

longcount=atol(strValue;

m_set.Close(;

count为记录总数。

3.27执行SQL语句

虽然通过CRecordSet类,我们可以完成大多数的查询操作,而且在

Open(函数中也可以提供SQL语句,但是有的时候我们还想进行一些其他操作,例如建立新表,删除表,建立新的字段等等,这时就需要使用到CDatabase类的直接执行SQL语句的机制。

通过调用

CDatabase:

ExecuteSQL(函数来完成SQL语句的直接执行:

如下代码所示

BOOLCDB:

ExecuteSQLAndReportFailure(constCString&

strSQL

{

TRY

m_pdb->

ExecuteSQL(strSQL;

//直接执行SQL语句

CATCH(CDBException,e

CStringstrMsg;

strMsg.LoadString(IDS_EXECUTE_SQL_FAILED;

strMsg+=strSQL;

returnFALSE;

END_CATCH

returnTRUE;

应当指出的是,由于不同DBMS提供的数据操作语句不尽相同,直接执行SQL语句

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1