gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx

上传人:b****6 文档编号:3619517 上传时间:2022-11-24 格式:DOCX 页数:10 大小:86.41KB
下载 相关 举报
gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx_第1页
第1页 / 共10页
gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx_第2页
第2页 / 共10页
gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx_第3页
第3页 / 共10页
gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx_第4页
第4页 / 共10页
gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx

《gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx》由会员分享,可在线阅读,更多相关《gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx(10页珍藏版)》请在冰豆网上搜索。

gVC中ODBC数据库技术应用源程序详解串口数据保存相关.docx

gVC中ODBC数据库技术应用源程序详解串口数据保存相关

VC中ODBC数据库技术应用源程序详解(串口数据保存相关)

摘要:

本文通过实例详细介绍了VC中ODBC数据库技术的编程应用,数据库源为ACCESS。

    本文源程序下载 

database1.zip47KBVC6.0Win9X/2000

我们在编程时要保存各种实时接收的数据,并为以后的数据再现回放,就应该建立数据文件,而这种数据文件可以用普通文件读写方式,但当数据类型较多且要求随时回放数据时,要求编程时设置较大的动态数组,这会占用较多的系统资源,甚至导致程序崩溃;而利用数据库则可以较好地解决这个问题,我们将数据放到数据源文件中,通过编程接口对其进行访问。

ODBC(开放的数据库连接:

OpenDatabaseConnectivity)为各种类型的数据库管理系统提供了统一的编程接口,我们在下面的几篇文章中,首先通过实例说明ODBC技术的应用方法,然后说明如何将串口数据实时保存在数据源文件中,这一方面介绍VC中ODBC技术的应用(前面的例子不涉及串口技术,以方便只想了解ODBC技术的读者,又为利用ODBC技术保存串口编程数据提供范例,虽然前面几个例程与串口通讯不相关,但如果对使用数据库不熟悉,也请从前面有耐心地看下去。

1.首先在控制面板中,打开ODBC数据源,点击用户DSN选项,在出现的界面中点击添加,如下图所示:

然后,点击完成按钮,出现下图,填入数据源名(可随意取名,本处设为biao)

点击确定即可。

2.在ACCESS中创建数据库,本例中为data(只包含number,name,score三列),可从我提供的这个例子下COPY

3.建立应用程序项目

(1)打开File菜单的New选项,选取Projects,

选择MFCAppWizard(exe),填入工程名,本例为DATA1

(2)把数据库文件data拷入新建的工程目录。

(3)应用程序的类型指定为SDI,在Step2对话框中选择HeaderFilesOnly选项,在Step6是将视图基类指定为CScrollView。

(4)用ClassWizard创建记录集类。

从AddClass菜单中选择New,并按下图填充对话框:

(说明:

一个CRecordset对象代表从数据源中查询的一个记录集。

(5).点击OK,进入DataSource,选择biao数据源,并选择Dynast选项,如下图所示:

在选择了数据源之后,ClassWizard提示我们选择一个表。

如下图所示:

(6)在ClassWizard中,针对新产生的CDataSet类,单击MemberVariables标签。

此时ClassWizard应按照数据库列的名称产生了如下的数据成员:

(7)在CData1View类中添加数据成员

(8)在Cdata1Doc中添加如下成员:

(9)编辑DATA1View.cpp中的OnDraw()和OnInitialUpdate()函数:

voidCDATA1View:

:

OnDraw(CDC*pDC)

{

CDATA1Doc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

//TODO:

adddrawcodefornativedatahere

TEXTMETRICtm;

pDC->GetTextMetrics(&tm);

intnLineHeight=tm.tmHeight+tm.tmExternalLeading;

CPointpText(0,0);

inty=0;

CStringstr;

if(m_pSet->IsBOF()){//detectsemptyrecordset

return;

}

m_pSet->MoveFirst();//failsifrecordsetisempty

while(!

m_pSet->IsEOF()){

pDC->TextOut(pText.x,pText.y,m_pSet->m_number);

pDC->TextOut(pText.x+1000,pText.y,m_pSet->m_name);

pDC->TextOut(pText.x+4000,pText.y,m_pSet->m_score);

m_pSet->MoveNext();

pText.y-=nLineHeight;

}

}

voidCDATA1View:

:

OnInitialUpdate()

{

CScrollView:

:

OnInitialUpdate();

CSizesizeTotal(8000,10500);

SetScrollSizes(MM_HIENGLISH,sizeTotal);

m_pSet=&GetDocument()->m_dataSet;

if(m_pSet->IsOpen()){

m_pSet->Close();

}

m_pSet->Open();

}

(10)data1View.cpp中加入#include"dataSet.h"

(11)编译结果应如下所示:

请继续看一篇如何在在数据库中动态修改数据库记录。

摘要:

本文先按一般方法详述如何动态在数据库中添加、删除记录,然后说明如何将串口实时接收的数据加入数据库中。

数据库源为ACCESS。

    本文源程序下载 

database2.zip51KBVC6.0Win9X/2000

 

首先,按上一篇文章步骤一二,分别安装注册数据源及创建数据库。

然后开始以下的步骤:

1.建立一个基于单文档的应用程序。

生成新的工程名,本例为data2,在Step1中选择SDI,Step2中选择DatabaseViewWithoutFileSupport,同时在Step2对话框中,单击DataSource按钮,与上一篇文章一样,为CData2Set类选择注册数据库的SCORE表。

在这里作点说明:

CDATA2Set类由MFC自动添加,这与上篇文章中在Step2中选择Headfilesonly是不同的,CrecordView对象是一个视图,是数据库应用程序的用户界面,由它来完成用户与数据库的交互工作,CrecordView视图对象是基于对话框模板资源来创建的,并由对话框模板中的控件来显示CrecordSet对象的数据记录。

CrecordView视图对象使用对话框数据交换机制(DDX)和记录字段交换机制(RFX)来实现表单控件和记录集字段之间的数据移动,并且自动为用户提供了记录集指针的移动(移向第一个记录、最后一个记录、下一个记录、上一个记录)和记录更新的操作。

最终选择和默认应如下图所示:

2.打开RESOURCEVIEW在IDD_DATA2_FORM模板中加入编辑控制。

分别为三个编辑控件(IDC_EDIT_NUMBER,IDC_EDIT_NAME,IDC_EDIT_SCORE),三个按钮控件。

3.使用ClassWizard把编辑控制与记录集数据成员连接起来,注意加入变量时不需自己键入,只需在MemberViriablename的下拉列表中选择,最后结果应如下图所示:

4.编译并测试应用程序,应该得到一个可工作的只有读操作的数据库应用程序

5.加入菜单命令,为前面的三个按钮添加相应的成员函数。

分别为OnButtonAdd、OnButtonClear、OnButtonDelete

6.在CData2View类中重载OnMove函数(先要在ClassWizard中映射该函数)

BOOLCData2View:

:

OnMove(UINTnIDMoveCommand) 

{

//TODO:

Addyourspecializedcodehereand/orcallthebaseclass

switch(nIDMoveCommand)

{

caseID_RECORD_PREV:

m_pSet->MovePrev();

if(!

m_pSet->IsBOF())

break;

caseID_RECORD_FIRST:

m_pSet->MoveFirst();

break;

caseID_RECORD_NEXT:

m_pSet->MoveNext();

if(!

m_pSet->IsEOF())

break;

if(!

m_pSet->CanScroll()){

//Clearoutscreensincewe'resittingonEOF

m_pSet->SetFieldNull(NULL);

break;

}

caseID_RECORD_LAST:

m_pSet->MoveLast();

break;

default:

//unexpectedcasevalue

ASSERT(FALSE);

}

//showresultsofmoveoperation

UpdateData(FALSE);

returnTRUE;

//returnCRecordView:

:

OnMove(nIDMoveCommand);

}

7.编辑按钮控制函数,分别加入下列代码:

voidCData2View:

:

OnButtonAdd() 

{

//TODO:

Addyourcontrolnotificationhandlercodehere

m_pSet->AddNew();

UpdateData(TRUE);

if(m_pSet->CanUpdate()){

m_pSet->Update();

}

if(!

m_pSet->IsEOF())

{

m_pSet->MoveLast();

}

//m_pSet->Requery();//forsortedsets

UpdateData(FALSE);

}

voidCData2View:

:

OnButtonClear() 

{

//TODO:

Addyourcontrolnotificationhandlercodehere

m_pSet->SetFieldNull(NULL);

UpdateData(FALSE);

}

voidCData2View:

:

OnButtonDelete() 

{

//TODO:

Addyourcontrolnotificationhandlercodehere

CRecordsetStatusstatus;

try{

m_pSet->Delete();

}

catch(CDBException*e){

AfxMessageBox(e->m_strError);

e->Delete();

m_pSet->MoveFirst();//lostourplace!

UpdateData(FALSE);

return;

}

m_pSet->GetStatus(status);

if(status.m_lCurrentRecord==0){

//Wedeletedlastof2records

m_pSet->MoveFirst();

}

else{

m_pSet->MoveNext();

}

UpdateData(FALSE);

}

8.再次编译并测试应用程序,现在可以加入、修改以及删除记录。

打开ACCESS数据库,可以看到文件已作为相应的改动。

9.最后,我们来看看如何与串口数据关联起来,方法应该是在串口的接收事件驱动函数OnCommunication()中将串口接收数据送到数据库的成员保存,相当于在OnCommunication()函数中调用OnButtonAdd()函数,具体方法我们将在下一篇关于CserialPort类的应用中详细说明。

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

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

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

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