由于我的程序只是简单的储存网址和标题,Access小而简单,所以就选择Access作为本小软件的数据库,并采用ADO访问数据库。 以下数据库内容摘自孙鑫老师的VC20讲第20课数据库访问的PPT 数据库访问技术 1. ODBC(Open Database Connectivity),开放数据库互连。O
由于我的程序只是简单的储存网址和标题,Access小而简单,所以就选择Access作为本小软件的数据库,并采用ADO访问数据库。
以下数据库内容摘自孙鑫老师的”VC20讲第20课数据库访问的PPT”
数据库访问技术
1. ODBC(Open Database Connectivity),开放数据库互连。ODBC是上个世纪八十年代末九十年代初出现的技术,它为编写关系数据库的客户软件提供了一种统一的接口。 ODBC提供一个单一的API,可用于处理不同数据库的客户应用程序。使用ODBC API的应用程序可以与任何具有ODBC驱动程序的关系数据库进行通信。
2. DAO(Data Access Object),数据访问对象。DAO就是一组Microsoft Access/Jet数据库引擎的COM自动化接口。 DAO不像ODBC那样是面向C/C++程序员的,它是微软提供给Visual Basic开发人员的一种简单的数据访问方法,用于操纵Access数据库。
3. RDO(Remote Data Object),远程数据对象。由于RDO直接调用ODBC API(而不是像DAO那样通过Jet引擎),所以,可以为使用关系数据库的应用程序提供更好的性能。
4. OLE DB,对象链接与嵌入数据库。 OLE DB在两个方面对ODBC进行了扩展。首先, OLE DB提供了一个数据库编程的COM接口;第二, OLE DB提供了一个可用于关系型和非关系型数据源的接口。 OLE DB的两个基本结构是OLE DB提供程序(Provider)和OLE DB用户程序(Consumer)。
5. ADO(ActiveX Data Object),ActiveX数据对象,它建立在OLE DB之上。ADO是一个OLE DB用户程序。使用ADO的应用程序都要间接地使用OLE DB。ADO简化了OLE DB,提供了对自动化的支持,使得像VBScript这样的脚本语言也能够使用ADO访问数据库。
ADO的三个核心对象
1.Connection对象
Connection对象表示了到数据库的连接,它管理应用程序和数据库之间的通信。 Recordset和Command对象都有一个ActiveConnection属性,该属性用来引用Connection对象。
2.Command对象
Command对象被用来处理重复执行的查询,或处理需要检查在存储过程调用中的输出或返回参数的值的查询。
3.Recordset对象
Recordset对象被用来获取数据。 Recordset对象存放查询的结果,这些结果由数据的行(称为记录)和列(称为字段)组成。每一列都存放在Recordset的Fields集合中的一个Field对象中。
用VC连接Access的方法如下:
1.将msado15.dll动态库拷贝到你应用程序所在的文件夹,msado15.dll一般放在C:/Program Files/Common Files/System/ado目录下,你也可以通过Windows的收搜功能进行收搜。
在头文件StdAfx.h中加上#import "msado15.dll" no_namespace rename ("EOF", "adoEOF")
因为记录集的结尾是EOF,而文件的结尾也是EOF,所以这里为了避免冲突,将其重新命名为adoEOF。编译程序,这时在你的Debug目录下多出现两 个文件:msado15.tlh和msado15.tli,这是msado15.dll在编译时自动生成的,有时候可以帮助你了解一些函数、常数的含义。
2.初始化ADO并连接数据库
Ado实际上是一个COM组件,所以我们在使用它之前要进行初始化,结束后要卸载。
加上一个成员变量 _ConnectionPtr m_pConnection; //连接数据库的智能指针
// 初始化—连接数据库
// 初始化OLE/COM库环境
::CoInitialize(NULL);
……
hr=m_pConnection.CreateInstance(__uuidof(Connection)); //实例化连接对象
……
m_pConnection->ConnectionString= "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=helper.mdb"; //连接数据库
//如果Access数据库中设置了密码,那么此句应为
//m_pConnection->ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=helper.mdb;Persist Security Info=False;Jet OLEDB:Database Password=123456";
还有这里涉及一个字符串过长的问题,该字符串在一行中写不下去,需多行输出。
如CString str=”123456789”; 分两行写为:
Str=”123456”/ //为清楚末尾加 / 在VC中不加也可以,但不要有分号
“789”;
……
m_pConnection->ConnectionTimeout=10; //设置等待连接打开的时间为10秒
hr=m_pConnection->Open("","","",adConnectUnspecified);//打开连接
……(失败、异常处理)
3.数据库读取、修改、删除
……
CString strSQL=”select * from stock”;
_RecordsetPtr pQueryRecordset;
……
hr=pQueryRecordset.CreateInstance(__uuidof(Recordset));
……
pQueryRecordset->Open(_variant_t(strSQL),m_pConnection.GetInterfacePtr(),
adOpenDynamic,adLockOptimistic,adCmdText); //打开数据库
……
if((pQueryRecordset->BOF)&&(pQueryRecordset->adoEOF))//记录集没有记录
{ …… }
else
{
_variant_t var; CString strValue; int curItem;
……
while(!pQueryRecordset->adoEOF)
{
var = pQueryRecordset->GetCollect("title");
strValue = (LPCSTR)_bstr_t(var);
ListCtrl.InsertItem(curItem,strValue);
…… //这里的多少取决你的字段…….
pQueryRecordset->MoveNext();
curItem++;
}
}
……
修改
Recordset->PutCollect("visit", (LPCTSTR)visit );
Recordset->Update();
增加
Recordset->AddNew();
Recordset->PutCollect("visit", (LPCTSTR)visit );
Recordset->Update();
strSQL=”delete from stock”;
Recordset->Open(_variant_t(strSQL),_variant_t((IDispatch*)m_pConnection,true),
adOpenStatic,adLockOptimistic,adCmdText);
4.撤消数据库连接,卸载ADO
m_pConnection->Close(); // 释放环境
::CoUninitialize();
另外,由于Access会对你的数据进行排序,所以你读出的数据次序不一定会跟你写进Access时一致。

命名管道是一种在操作系统中相对比较低级的进程通信方式,它是一种以文件为中介的进程通信方式。在Go语言中,通过os包提供了对命名管道的支持。在本文中,我们将介绍如何在Go中使用命名管道来实现进程间通信。一、命名管道的概念命名管道是一种特殊的文件,可以被多个进程同时访问。在Linux系统中,命名管道是一种特殊的文件类型,它们存在于文件系统的某个位置上,并且可以在

在Go语言中,使用第三方库是非常方便的。许多优秀的第三方库和框架可以帮助我们快速地开发应用程序,同时也减少了我们自己编写代码的工作量。但是如何正确地使用第三方库,确保其稳定性和可靠性,是我们必须了解的一个问题。本文将从以下几个方面介绍如何使用第三方库,并结合具体例子进行讲解。一、第三方库的获取Go语言中获取第三方库有以下两种方式:1.使用goget命令首先

随着传统的多线程模型在高并发场景下的性能瓶颈,协程成为了PHP编程领域的热门话题。协程是一种轻量级的线程,能够在单线程中实现多任务的并发执行。在PHP的语言生态中,协程得到了广泛的应用,比如Swoole、Workerman等框架就提供了对协程的支持。那么,如何在PHP中使用协程呢?本文将介绍一些基本的使用方法以及常见的注意事项,帮助读者了解协程的运作原理,以

变量函数是指可以使用变量来调用函数的一种特殊语法。在PHP中,变量函数是非常有用的,因为它可以让我们更加灵活地使用函数。在本文中,我们将介绍如何在PHP中使用变量函数。定义变量函数在PHP中,变量函数的定义方式非常简单,只需要将要调用的函数名赋值给一个变量即可。例如,下面的代码定义了一个变量函数:$func='var_dump';这里将var_dump函

<p>Windows 系统上的 OneDrive 应用程序允许您将文件存储在高达 5 GB 的云上。OneDrive 应用程序中还有另一个功能,它允许用户选择一个选项,是将文件保留在系统空间上还是在线提供,而不占用您的系统存储空间。此功能称为按需文件。在这篇文章中,我们进一步探索了此功能,并解释了有关如何在 Windows 11 电脑上的 OneDrive 中按需使用文件的各种选项。</p><h2>如何使用 On

近年来,WebSocket技术已经成为了Web开发中不可或缺的一部分。WebSocket是一种在单个TCP连接上进行全双工通信的协议,它使得客户端和服务器之间的通信更加流畅和高效。如今,很多现代的Web应用程序都使用了WebSocket技术,例如实时聊天、在线游戏以及实时数据可视化等。Go语言作为一个现代的编程语言,自然也提供了很好的支持WebSock

随着音频处理在各种应用场景中的普及,越来越多的程序员开始使用Go编写音频处理程序。Go语言作为一种现代化的编程语言,具有优秀的并发性和高效率的特点,使用它进行音频处理十分方便。本文将介绍如何在Go中使用音频处理技术,包括读取、写入、处理和分析音频数据等方面的内容。一、读取音频数据在Go中读取音频数据有多种方式。其中比较常用的是使用第三方库进行读取,比如go-

数据聚合函数是一种用于处理数据库表中多行数据的函数。在PHP中使用数据聚合函数可以使得我们方便地进行数据分析和处理,例如求和、平均数、最大值、最小值等。下面将介绍如何在PHP中使用数据聚合函数。一、介绍常用的数据聚合函数COUNT():计算某一列的行数。SUM():计算某一列的总和。AVG():计算某一列的平均值。MAX():取出某一列的最大值。MIN():


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

SublimeText3汉化版
中文版,非常好用

SublimeText3 Linux新版
SublimeText3 Linux最新版

记事本++7.3.1
好用且免费的代码编辑器

Dreamweaver CS6
视觉化网页开发工具