文档库 最新最全的文档下载
当前位置:文档库 › VC++使用ADO开发ACCESS数据库

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

VC++使用ADO开发ACCESS数据库
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(),需要加入

//#include "Shlwapi.h"

//#pragma comment(lib,"shlwapi.lib")

if(PathFileExists(str))

{

CString strTemp;

strTemp.Format("%s已存在!",str);

AfxMessageBox(strTemp);

return ;

}

//定义ADOX对象指针并初始化为NULL

//用ADOX创建access数据库方法很简单,

//只需要新建一个Catalog对象,然后调用它的Create方法就可以了。

//Catalog是 ADOX 的一个对象,它包含描述数据源模式目录的集合。

//在这里,您只需知道创建数据库时使用这个对象就可以了。

//注意用try...catch组合捕捉错误

_CatalogPtr m_pCatalog = NULL;

CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=";

DBName=DBName+str;

try

{

m_pCatalog.CreateInstance(__uuidof(Catalog));

m_pCatalog->Create(_bstr_t((LPCTSTR)DBName));

}

catch(_com_error &e)

{

AfxMessageBox(e.ErrorMessage());

return ;

}

}

使用ADOX,需要引入ADOX的动态链接库msadox.dll,即在stdafx.h中加入如下语句:

#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace rename("EOF","adoEOF")

另外,ADOX属于COM对象,所以要在CADOXCreateDatabaseApp::InitInstance()函数中加入:

if(!AfxOleInit())

{

AfxMessageBox("OLE初始化出错!");

return FALSE;

}

初始化COM。

好了,编译并运行该例程,对于编译过程中弹出的4146号警告不要理会。

在编辑框中输入一个数据库名称,点击“创建数据库”按钮,该数据库将在d 盘根目录下创建,再次输入该数据库名称并点击“创建数据库”按钮,将弹出警告对话框。

在vc中使用ADO的时候会得到4146号警告信息,我们可以不去理会,也可以通过#pragma warning指令解决,方法为:

将在stdafx.h中加入的语句:

#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace rename("EOF","adoEOF")

前后再加一条语句,修改后为:

#pragma warning (disable:4146)

#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace rename("EOF","adoEOF")

#pragma warning (default:4146)

指令#pragma warning (disable:4146) 暂时屏蔽编译时4146警告信息

指令#pragma warning (default:4146) 重置编译器的4146警告到默认状态

第三部分 ADO创建ACCESS数据库的表

我们一般用ADOX创建数据库,然后再用ADO创建数据库的表。

例程CREATE_DB_AND_TABLE演示如何使用ADO创建ACCESS数据库的表。

打开VC++ 6.0,新建一个基于对话框的工程CREATE_DB_AND_TABLE。在对话框IDD_CREATE_DB_AND_TABLE_DIALOG中添加如下控件:

使用ClassWizard给两个编辑框创建CString变量:

双击IDC_BTN_CREATE按钮,并编辑OnBtnCreate()函数如下:

void CADOXCreateDatabaseDlg::OnBtnCreate()

{

UpdateData(TRUE);

CString str;

str="d:\\"+m_dbName+".mdb";

if(PathFileExists(str))

{

CString strTemp;

strTemp.Format("%s已存在!",str);

AfxMessageBox(strTemp);

return ;

}

_CatalogPtr m_pCatalog = NULL;

CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source=";

DBName=DBName+str;

try

{

m_pCatalog.CreateInstance(__uuidof(Catalog));

m_pCatalog->Create(_bstr_t((LPCTSTR)DBName));

}

catch(_com_error &e)

{

AfxMessageBox(e.ErrorMessage());

return ;

}

}

以上代码例程ADOXCreateDatabase中已经详细叙述。

双击IDC_BTN_CREATE_TABLE按钮,并编辑OnBtnCreateTable()函数如下:

void CCREATE_DB_AND_TABLEDlg::OnBtnCreateTable()

{

//先判断表名编辑框是否为空

UpdateData(TRUE);

if(!m_tableName.IsEmpty())

{

ADOX::_CatalogPtr m_pCatalog=NULL;

ADOX::_TablePtr m_pTable=NULL;

CString str;

str="d:\\"+m_dbName+".mdb";

CString DBName="Provider=Microsoft.JET.OLEDB.4.0;Data source="; DBName=DBName+str;

//这段代码先检查表是否已经存在,如果表已经存在,不再创建,直接返回。

//其实这段代码不必深入研究,只需知道它的功能,直接拿来使用即可try

{

m_pCatalog.CreateInstance(__uuidof(ADOX::Catalog));

m_pCatalog->PutActiveConnection(_bstr_t(DBName));

int tableCount=m_pCatalog->Tables->Count;

int i=0;

while(i

{

m_pTable=(ADOX::_TablePtr)m_pCatalog->Tables->GetItem((long)i);

CString tableName=(BSTR)m_pTable->Name;

if(tableName==m_tableName)

{

AfxMessageBox("该表已经存在!");

return;

}

i++;

}

}

catch(_com_error &e)

{

AfxMessageBox(e.Description());

return;

}

ADODB::_ConnectionPtr m_pConnection;

//创建表

_variant_t RecordsAffected;

try

{

m_pConnection.CreateInstance(__uuidof(ADODB::Connection));

//Open方法的原型:

//Open(_bstr_t ConnectionString,_bstr_t UserID,_bstr_t Password,long Options)

//ConnectionString为连接字串,UserID是用户名,Password是登陆密码

//Options是连接选项,可以是如下几个常量:

//adModeUnknown 缺省,当前的许可权未设置

//adModeRead 只读

//adModeWrite 只写

//adModeReadWrite 可以读写

//adModeShareDenyRead 阻止其它Connection对象以读权限打开连接

//adModeShareDenyWrite 阻止其它Connection对象以写权限打开连接

//adModeShareExclusive 阻止其它Connection对象打开连接

//adModeShareDenyNone 阻止其它程序或对象以任何权限建立连接

m_pConnection->Open(_bstr_t(DBName),"","",ADODB::adModeUnknown);

}

catch(_com_error e)

{

CString errormessage;

errormessage.Format("连接数据库失败!\r错误信息:%s",e.ErrorMessage());

AfxMessageBox(errormessage);

return;

}

try

{

CString strCommand;

/*

执行SQL命令:CREATE TABLE创建表格

该表包含三个字段:记录编号INTEGER,姓名TEXT,出生年月DATETIME

SQL语言中的create table语句被用来建立新的数据库表格。

create table语句的使用格式如下:

create tablename (column1 data type,column2 data type,column3 data type);

如果用户希望在建立新表格时规定列的限制条件,可以使用可选的条件选项

create table tablename

(column1 data type[constraint],

column2 data type[constraint],

column3 data type[constraint]);

举例:

create table employee

(firstname varchar(15),

lastname varchar(20),

age number(3),

address varchar(30),

city varchar(20));

简单来说,创建新表格时,在关键词create table后面加入所要建立的表格的名称,

然后在括号内顺次设定各列的名称,数据类型,以及可选的限定条件等。

使用SQL语句创建的数据库表格和表格中列的名称必须以字母开头,

后面可以使用字母,数字或下划线,名称的长度不能超过30个字符,

注意,用户在选择表格名称时不要使用SQL语言中的保留关键字,

如select,create,insert等,作为表格或列的名称

*/

strCommand.Format("CREATE TABLE %s(记录编号INTEGER,姓名TEXT,出生年月 DATETIME)",m_tableName);

//Execute(_bstr_t CommandText,VARIANT* RecordsAffected,long Options)

//其中CommandText是命令字串,通常是SQL命令,

//参数RecordsAffected是操作完成后所影响的行数

//参数Options表示CommandText中内容的类型,可以取下列值之一:

//adCmdText 表明CommandText是文本命令

//adCmdTable 表明CommandText是一个表名

//adCmdProc 表明CommandText是一个存储过程

//adCmdUnknown 未知

m_pConnection->Execute(_bstr_t(strCommand),&RecordsAffected,ADODB ::adCmdText);

if(m_pConnection->State)

m_pConnection->Close();

}

catch(_com_error &e)

{

AfxMessageBox(e.Description());

}

}

}

这段代码先用ADOX的Catalog对象检查表是否已经存在,如果该表已经存在,直接返回;如果还没有该表,使用ADO的Connection对象的Execute函数创建表。

Connection对象的用法:首先定义一个Connection类型的指针,然后调用CreateInstance()来创建一个连接对象的实例,再调用Open函数建立与数据源的连接。最后使用Execute()函数执行SQL语句创建表。

关于调用CreateInstance()来创建连接对象的实例,还需作一点说明。ADO库包含三个基本接口:_ConnectionPtr接口,_RecordsetPtr接口和_CommandPtr接口。其分别对应Connection对象(完成应用程序对数据源的访问连接),Recordset对象(将查询的结果以记录集的方式存储)和Command对象(对已连接的数据源进行命令操作)。

_ConnectionPtr m_pConnection;

_RecordsetPtr m_pRecordset;

_CommandPtr m_pCommand;

而这三个对象实例的创建,可以使用如下语句:

m_pConnection.CreateInstance(__uuidof(Connection));

或者:

m_pConnection.CreateInstance(“ADODB.Connection”);

m_pRecordset.CreateInstance(__uuidof(Recordset));

或者:

m_pRecordset.CreateInstance(“ADODB.Recordset”);

m_pCommand.CreateInstance(__uuidof(Command));

或者:

m_pCommand.CreateInstance(“https://www.wendangku.net/doc/286352262.html,mand”);

两种方法的作用完全相同,使用哪种方法,完全是您的个人爱好问题。

如例程ADOXCreateDatabase,在BOOL CCREATE_DB_AND_TABLEApp::InitInstance()函数中加入:

if(!AfxOleInit())

{

AfxMessageBox("OLE初始化出错!");

return FALSE;

}

在stdafx.h中加入如下语句:

#import "C:\Program Files\Common Files\system\ado\msadox.dll"

#import "C:\Program Files\Common Files\system\ado\msado15.dll" rename("EOF","adoEOF")

关于这两条语句,需要进行特别说明:

由于该例程同时使用ADOX和ADO,需要同时引入msado15.dll和msadox.dll 两个库。这两个库的名字空间是不同的,msado15.dll的名字空间是ADODB,

msadox.dll的名字空间是ADOX。在使用ADO所属的名字空间的变量,函数时,在前面加上ADODB::,在使用ADOX所属的名字空间的变量,函数时,在前面加上ADOX::。

另外,一般ADOX和ADO分开操作。您也可以在ADOX操作部分使用using namespace ADOX::,而在ADO操作部分使用using namespace ADO:,以区分名字空间。这样,您就不必再使用ADOX::和ADODB::了。

rename(“EOF”,”adoEOF”) //重命名EOF是必要的,因为典型的VC应用都已经定义了EOF作为常数-1,为了避免冲突,将ADO中的EOF重命名为adoEOF。

#import中有一个属性为no_namespace,这是告诉编译器该类不在一个单独的名字空间中,使用no_namespace意味着你不需要在初始化变量的时候引用名字空间。当然如果在您的应用中需要导入多个类型库的话,不要使用no_namespace,以免引起名字冲突。

再通俗一点讲,就是只导入一个类型库的话,可以在#import语句中加入no_namespace属性,您的程序可以直接使用这个类型库的名字空间的内容,而不必使用using namespace XXX;或XXX::,这是因为no_namespace属性告诉编译器该类型库不再名字空间,而是在全局空间上工作;如果您导入几个类型库,而这几个类型库之间没有定义冲突,您也可以在使用no_namespace属性;但如果两个类型库中有定义冲突,就不能使用no_namespace属性,如果使用no_namespace属性,就会在全局空间产生定义冲突。

对于本例程,您可以把stdafx.h中的

#import "C:\Program Files\Common Files\system\ado\msadox.dll"

#import "C:\Program Files\Common Files\system\ado\msado15.dll" rename("EOF","adoEOF")

改为

#import "C:\Program Files\Common Files\system\ado\msadox.dll"

#import "C:\Program Files\Common Files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")

这样改动后,void CCREATE_DB_AND_TABLEDlg::OnBtnCreateTable()中的ADODB::需要完全省略掉。

当然,您也可以把这两行改为:

#import "C:\Program Files\Common Files\system\ado\msadox.dll" no_namespace

#import "C:\Program Files\Common Files\system\ado\msado15.dll" rename("EOF","adoEOF")

但这样改动后,void CCREATE_DB_AND_TABLEDlg::OnBtnCreateTable()中的ADOX::需要完全省略掉。

由于ADOX和ADO有定义冲突,也就是说,msado15.dll和msadox.dll有相同的定义部分,所以在一个程序中,不允许同时使用no_namespace。

第四部分使用_ConnectionPtr接口开发ACCESS数据库ADO中最重要的对象有三个:Connection、Recordset和Command,分别表

示连接对象、记录集对象和命令对象。三个对象对应的智能指针分别是:_ConnectionPtr、_RecordsetPtr、_CommandPtr。ADO使用_ConnectionPtr这个指针来操纵Connection对象,类似地,后面用到的_CommandPtr和_RecordsetPtr 分别表示命令对象指针和记录集对象指针。

Connection对象是这三个对象的基础,它的主要作用是建立与数据库的连接,建立了与数据库的连接后,才能进行其它有关数据库的访问和操作。

也就是说,使用ADO操作数据库,通常先用Connection对象的Open方法打开一个库连接,然后才能进行数据库的操作。操作完成后,要关闭这个库连接。

本文只讲述Connection对象最常用的Open方法和Execute方法。Open方法用于打开一个库连接,而Execute方法一般用于执行一条SQL语句。

_ConnectionPtr智能指针的用法:

首先定义一个Connection类型的指针,然后调用CreateInstance()来创建一个连接对象的实例,再调用Open函数建立与数据源的连接。在建立连接对象后,可以使用连接对象的Execute()函数来执行SQL命令。

_ConnectionPtr智能指针Open方法的原型:

Open(_bstr_t ConnectionString,_bstr_t UserID,_bstr_t Password,long Options)

ConnectionString为连接字串,UserID是用户名,Password是登陆密码

Options是连接选项,可以是如下几个常量:

adModeUnknown 缺省,当前的许可权未设置

adModeRead 只读

adModeWrite 只写

adModeReadWrite 可以读写

adModeShareDenyRead 阻止其它Connection对象以读权限打开连接

adModeShareDenyWrite 阻止其它Connection对象以写权限打开连接

adModeShareExclusive 阻止其它Connection对象打开连接

adModeShareDenyNone 阻止其它程序或对象以任何权限建立连接

_ConnectionPtr智能指针Execute方法的原型:

_RecordsetPtr Connection15::Execute(_bstr_t CommandText,VARIANT* RecordsAffected,long Options)

其中CommandText是命令字串,通常是SQL命令,

参数RecordsAffected是操作完成后所影响的行数

参数Options表示CommandText中内容的类型,可以取下列值之一:adCmdText 表明CommandText是文本命令

adCmdTable 表明CommandText是一个表名

adCmdProc 表明CommandText是一个存储过程

adCmdUnknown 未知

Execute执行完后返回一个指向记录集的指针。

例程CREATE_DB_AND_TABLE中已经使用了_ConnectionPtr指针的Open方法和Execute方法,在后面的例程我们将进一步详细说明。

我们先讲解几条最常用的SQL语句。

SELECT查询语句

我们希望用各种不同的方法来查看和分析数据,SELECT语句就是我们要使用的语句,用于有选择的从数据库返回我们需要的数据,也就是查询。

最基本的SELECT语句仅有两个部分:要返回的列和这些列源于的表

为了便于讲解演示,我们使用如下Northwind 示例数据库中的 Employees 表

如果我们希望检索Employees表中所有客户的所有信息,我们可以使用星号(*)来简单地表示所有列,查询语句如下所示:

SELECT * FROM Employees

如果我们只需要特定列,我们应该在逗号分隔的列表中显式指定这些列,如下所示:

SELECT EmployeeID, FirstName,LastName,HireDate FROM Employees

结果会显示该表中所有行的指定字段的数据。

显式指定所需字段还允许我们控制字段返回的顺序,如果我们希望LastName 显示在FirstName之前,我们可以编写以下语句:

SELECT EmployeeID, LastName,FirstName,HireDate FROM Employees

WHERE子句

接下来我们要做的是开始限制或筛选从数据库提取的数据。通过向SELECT 语句添加WHERE子句,我们可以添加一个(或多个)条件,所选数据必须满足这些条件,这将限制答复查询的行数也就是被提取的行数。

我们可以在上一个查询的基础上,将其限制为City为London的员工

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE City = 'London'

如果您希望返回相反条件的员工,即返回那些不住在伦敦的员工,您应该编写以下语句:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE City <> 'London'

您也可以使用大于、小于、大于等于、小于等于等运算符。例如,若要获取其雇佣日期等于某个给定日期或大于该日期的员工列表,您可以编写以下语句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE HireDate >= '1-july-1993'

您可以得到以下结果行:

当然,我们可以编写更复杂的条件:在 WHERE 子句中加入多个条件。如果我们希望了解哪些员工是在两个给定日期之间雇佣的,我们可以编写以下语句:SELECT EmployeeID, FirstName, LastName, HireDate, City

FROM Employees

WHERE (HireDate >= '1-june-1992') AND (HireDate <=

'15-december-1993')

结果如下:

SQL 还有一个BETWEEN 运算符,用于检查某个值是否在两个值之间(包括等于两端的值)。这使我们可以将以前的查询重新编写为:

SELECT EmployeeID, FirstName, LastName, HireDate, City

FROM Employees

WHERE HireDate BETWEEN '1-june-1992' AND '15-december-1993' 我们也可以使用 NOT 运算符来提取那些不在指定日期之间的行:

SELECT EmployeeID, FirstName, LastName, HireDate, City

FROM Employees

WHERE HireDate NOT BETWEEN '1-june-1992' AND '15-december-1993' 如果我们希望检查一个列值是否等于多个值,那该怎么办呢?如果只是两个值,则很容易对每个值进行测试,方法是,使用 OR 运算符将它们连接在一起,则编写的语句如下所示:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE City = 'London' OR City = 'Seattle'

但是,如果您希望与三个、四个或更多值进行比较,则上述方法就行不通了。在这种情况下,我们可以使用 IN 运算符来对一组值进行测试。如果我们希望查看 City 是否为 Seattle、Tacoma 或 Redmond,我们可以编写以下语句:SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE City IN ('Seattle', 'Tacoma', 'Redmond')

显示以下结果:

我们也可以获得所含结果的相反条件下的结果,即查询那些 City 不在指定列表中的行:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE City NOT IN ('Seattle', 'Tacoma', 'Redmond')

最后要说明的是,LIKE 运算使我们可以使用通配符来执行基本的模式匹配。在 Microsoft SQL Server 中,定义的通配符包含以下字符:

以下一些示例可以帮助阐明上述规则。

此处我们也选择使用 NOT 运算符:若要找到所有名字不以 M 或 A 开始的员工,我们可以编写以下语句:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees WHERE (FirstName NOT LIKE 'M%') AND (FirstName NOT LIKE 'A%')

结果如下:

ORDER BY 子句

直到现在我们一直在讨论筛选数据:即定义一些条件,来确定哪些行将包括在从数据库提取并返回的最终行集中。一旦我们确定了哪些列和行将包括在SELECT 查询的结果中,我们可能就希望控制这些行显示的顺序:对数据排序。

若要对数据行排序,我们需要 ORDER BY 子句。ORDER BY 子句包括了一个或多个用于指定排序顺序的列名。如果返回至第一批 SELECT 语句中的某条语句,我们可以用以下语句按 City 对其结果排序:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees ORDER BY City

默认情况下,列的排序顺序为升序(从最小值到最大值),上述查询的结果如下所示:

如果我们希望列的排序顺序为降序,我们可以在列名后包括 DESC 关键字。ORDER BY 子句支持使用多列。您可以包括以逗号分隔的多个列以按其排序:行将先按指定的第一列进行排序,然后再按指定的下一列进行排序。如果我们向SELECT 子句添加 Country 字段并希望按 Country 和 City 排序,我们可以编写以下语句:

SELECT EmployeeID, FirstName, LastName, HireDate, Country, City FROM Employees ORDER BY Country, City DESC

请注意,为了使语句显得更有趣,我们已经指定了 City 列的排序顺序为降序(从最大值到最小值)。Country 列的排序顺序仍为升序。为了更清楚地了解到这一点,我们可以把语句编写为:

SELECT EmployeeID, FirstName, LastName, HireDate, Country, City FROM Employees ORDER BY Country ASC, City DESC

但是,默认情况下,列的排序顺序为升序。所以,加上ASC不是必要的,并且很少这么做。此查询返回的结果如下所示:

重要的是要注意要在 ORDER BY 子句中使用某一列时,并不需要在选定的(返回的)多个列中包括这一列。如果我们不需要查看Country 值,只是对于将其作为主排序字段感兴趣,可以编写以下查询:

SELECT EmployeeID, FirstName, LastName, HireDate, City FROM Employees ORDER BY Country ASC, City DESC

所得结果的排序顺序与上一个查询所得结果的排序顺序相同:

INSERT INTO语句

INSERT INTO语句用于新增一个记录。该语句的格式:

INSERT INTO 表 [(字段1[,字段2[, ...]])] VALUES (值1[,值2[, ...]) 新增的记录,将依照指定字段排列的顺序插入对应的值,譬如,值1将被插入至字段1,值2将被插入至字段2,依此类推。

若未指定 (字段1[,字段2[, ...]]) ,将依照表所定义的字段排列的顺序插入对应的值,在VALUES 子句必须包含表中的每一字段值。

值间须使用逗点分隔,文字字段须使用单用引号 ('值') 括起来。

例如,向Employees表中插入一条记录。

INSERT INTO Employees (EmployeeID, FirstName, LastName,HireDate ,City , Country) VALUES (10,‘Mary’‘Williams’,’15/4/1993 12:00:00’,’New York’,’USA’)

Update语句

用途:更新表中原有数据

语法:

Update table_name Set column_name = new_value Where

column_name = some_value

例:

把EmployeeID为10的记录改为:FirstName是Bill,LastName是Clinton,HireDate 是25/11/1994 12:00:00,City是Los Angeles,Country不变,还是USA

UPDATE Employees SET FirstName = 'Bill', LastName=’Clinton’, HireDate =’25/11/1994 12:00:00’,City = 'Los Angeles' WHERE EmployeeID=10

好了,SQL命令我们先介绍这几条,下面,我们通过例程ConnPtr_Open_Exe 演示_ConnectionPtr的Open函数建立与数据源的连接并使用Execute()函数来执行SQL命令。

例程ConnPtr_Open_Exe

打开VC++ 6.0,新建一个基于对话框的工程ConnPtr_Open_Exe。在对话框IDD_CONNPTR_OPEN_EXE_DIALOG中进行编辑:

使用三个Group Box分成三个部分,第一部分演示使用Execute()函数来执行INSERT INTO命令;第二部分演示使用Execute()函数来执行Update命令;第三部分演示使用Execute()函数来执行SELECT命令。其中,第一部分和第二

部分不需要返回记录集,第三部分演示返回记录集显示结果。

该对话框几个控件如下:

使用ClassWizard给列表框IDC_LIST1创建CListBox变量m_list1:

双击IDC_BTN_INSERT_INTO按钮,并编辑OnBtnInsertInto()函数如下:

void CConnPtr_Open_ExeDlg::OnBtnInsertInto()

{

_ConnectionPtr m_pConnection;

_variant_t RecordsAffected;

try

{

m_pConnection.CreateInstance(__uuidof(Connection));

m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

}

catch(_com_error e)

{

CString errormessage;

errormessage.Format("连接数据库失败!\r错误信息:%s",e.ErrorMessage());

AfxMessageBox(errormessage);

return;

}

try

{

_bstr_t strCmd="INSERT INTO Employees(EmployeeID,FirstName,LastName,HireDate,City,Country) VALUES(10,'Mary','Williams','15/4/1993 12:00:00','New York','USA')";

m_pConnection->Execute(strCmd,&RecordsAffected,adCmdText);

}

catch(_com_error &e)

{

AfxMessageBox(e.Description());

}

if(m_pConnection->State)

m_pConnection->Close();

}

双击IDC_BTN_UPDATE按钮,并编辑OnBtnUpdate()函数如下:

void CConnPtr_Open_ExeDlg::OnBtnUpdate()

{

_ConnectionPtr m_pConnection;

_variant_t RecordsAffected;

try

{

m_pConnection.CreateInstance(__uuidof(Connection));

m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

}

catch(_com_error e)

{

CString errormessage;

errormessage.Format("连接数据库失败!\r错误信息:%s",e.ErrorMessage());

AfxMessageBox(errormessage);

return;

}

try

{

_bstr_t strCmd="UPDATE Employees SET FirstName='Bill',LastName='Clinton',HireDate='25/11/1994

12:00:00',City='Los Angeles' WHERE EmployeeID=10";

m_pConnection->Execute(strCmd,&RecordsAffected,adCmdText);

}

catch(_com_error &e)

{

AfxMessageBox(e.Description());

}

if(m_pConnection->State)

m_pConnection->Close();

}

双击IDC_BTN_SELECT按钮,并编辑OnBtnSelect()函数如下:

void CConnPtr_Open_ExeDlg::OnBtnSelect()

{

_ConnectionPtr m_pConnection;

_variant_t RecordsAffected;

_RecordsetPtr m_pRecordset;

try

{

m_pConnection.CreateInstance(__uuidof(Connection));

m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Northwind.mdb","","",adModeUnknown);

}

catch(_com_error e)

{

CString errormessage;

errormessage.Format("连接数据库失败!\r错误信息:%s",e.ErrorMessage());

AfxMessageBox(errormessage);

return;

}

try

{

m_pRecordset.CreateInstance("ADODB.Recordset"); //为Recordset 对象创建实例

_bstr_t strCmd="SELECT EmployeeID,FirstName,LastName,HireDate,City FROM Employees WHERE City='London'";

m_pRecordset=m_pConnection->Execute(strCmd,&RecordsAffected,adCmd Text);

}

catch(_com_error &e)

{

AfxMessageBox(e.Description());

}

_variant_t vEmployeeID,vFirstName,vLastName,vHireDate,vCity;

try

{

while(!m_pRecordset->adoEOF)

{

vEmployeeID=m_pRecordset->GetCollect(_variant_t((long)0));

//取得第1列的值,从0开始计数,你也可以直接列出列的名称,如下一行

vFirstName=m_pRecordset->GetCollect("FirstName");

vLastName=m_pRecordset->GetCollect("LastName");

vHireDate=m_pRecordset->GetCollect("HireDate");

vCity=m_pRecordset->GetCollect("City");

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文件中加入如下语句:

直接通过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.遍历数据库中的所有表名

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 预览版中,可轻松地在两种模式之间切换滚动条的行为。在栏模式中,可更直接地查看脱字号位置等注释、更改所在位置和跟踪错误。在图模式下,滚动条显示源代码的实时预览,而将鼠标悬停

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(),需要加入

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 \

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

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接口里直接使用连接串。一次或少量数据库访问操作,一般是

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为要连接的数据库的字段名。如果数据库中有字段,会让你选择。

MFC通过ADO操作Access数据库

MFC通过ADO操作Access数据库 我在《VC知识库在线杂志》第十四期和第十五期上曾发表了两篇文章——“直接通过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 \ rename ("EOF", "adoEOF") 其中路径名可以根据自己系统安装的ADO支持文件的路径来自行设定。当编译器遇到#import语句时,它会为引用组件类型库中的接口生成包装类,#import语句实际上相当于执行了API涵数LoadTypeLib()。#import语句会在工程可执行程序输出目录中产生两个文件,分别为*.tlh(类型库头文件)及*.tli(类型库实现文件),它们分别为每一个接口产生智能指针,并为各种接口方法、枚举类型,CLSID等进行声明,创建一系列包装方法。语句no_namespace说明ADO对象不使用命名空间,rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。 其次,在程序初始过程中需要初始化组件,一般可以用CoInitialize(NULL);来实现,这种方法在结束时要关闭初始化的COM,可以用下面语句CoUnInitialize();来实现。在MFC中还可以采用另一种方法来实现初始化COM,这种方法只需要一条语句便可以自动为我们实现初始化COM和结束时关闭COM 的操作,语句如下所示: AfxOleInit(); 接着,就可以直接使用ADO的操作了。我们经常使用的只是前面用#import 语句引用类型库时,生成的包装类.tlh中声明的智能指针中的三个,它们分别是_ConnectionPtr、_RecordsetPtr和_CommandPtr。下面分别对它们的使用方法进行介绍: 1、_ConnectionPtr智能指针,通常用于打开、关闭一个库连接或用它的Execute

MFC使用ADO读写Access数据库

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

2、用#import指令引入ADO类型库 为了引入ADO类型库,需要在项目的stdafx.h文件中加入如下语句: 这一语句有何作用呢?其最终作用同我们已经十分熟悉的#include类似,编译的时候系统会为我们生成msado15.tlh,ado15.tli两个C++头文件来定义ADO库。 需要读者朋友注意的是:您的开发环境中msado15.dll不一定在这个目录下,请按实际情况修改;在编译的时候可能会出现如下警告,对此微软在MSDN中作了说明,并建议我们不要理会这个警告:msado15.tlh(405) : warning C4146: unary minus operator appli ed to unsigned type, result still unsigned。 3、创建Connection对象并连接数据库 为了首先我们需要添加一个指向Connection对象的指针_ConnectionPtr m_pConnect ion,下面的代码演示了如何创建Connection对象实例及如何连接数据库并进行异常捕捉:

Visual C++环境下ADO控件访问access数据库

Visual C++环境下ADO控件访问数据库 DBGrid数据表格控件以其短小精悍而深受大家的喜爱,但其如何在Visual C++中使用 却很少有文章提及,本文将VC下使用DBGrid的具体步骤简要地介绍给大家。一.前期准备 为了实现DBGrid控件的自动捆绑,我们需要建立一个数据库和与之关联的数据源,本例中我们用Access建立数据库mydata.mdb,在数据库中新建一张表users,包含三个字段username,address,email,并输入多条记录。 在控制面板ODBC数据源中建立名称为test的系统DSN(注意是系统DNS非用户DNS),并将其指向mydata.mdb 二.创建工程 新建一个基于对话框的MFC AppWizard(exe)工程,取名为GridTest,并在AppWizard 的第2步中确认已经提供ActiveX控件支持。 三.插入控件 我们需要插入Microsoft RemoteData Control与DBGrid Control两个控件,方法如下: 1)选择菜单->Project->Add to Project->Components and Controls Gallery 2)在部件选择对话框中进入Registered ActiveX Controls 3)选择Microsoft RemoteData Control,单击Insert按钮,确认后对类进行配置(可以按 默认),我们不做任何修改单击OK按钮,插入完成。 以同样的步骤,插入DBGrid Control控件。 4)回到VC工作区,我们在ResourceView中选择GridTest对话框模板(即ID号为IDD_GRIDTEST_DIALOG的对话框模板)此时我们发现在Controls工具条中已经新增了两个按钮,分别表示刚才插入的两个控件。 5)现在我们在模板中画出这两个控件,如图所示:

VC之ADO访问ACCESS数据库

1.引入ADO类 #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \rename ("EOF", "adoEOF") 2.在资源视图里面添加按钮(如图,并设置相应的ID)及其他资源: 方法:打开Dialog对话框IDD_XPDLG_DIALOG 并加入一个Button,双击这个Button,生成该按钮单击处理 函数。 3.编辑CMyAccessApp类: A.在CMyAccessApp类里面初始化COM AfxOleInit(); m_pConnection.CreateInstance(__uuidof(Connection)); 在ADO操作中建议语句中要常用try...catch()来捕获错误信息 try { // 打开本地Access库db1.mdb m_pConnection->ConnectionTimeout =5; m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb","","",adModeUnknown); } catch(_com_error e) { AfxMessageBox(TEXT("数据库连接失败,确认数据库db1.mdb是否在当前路径下!"));// //VS2005编译器只能写成AfxMessageBox(_T("test"));才能使用 return FALSE; } (其中我的数据库的表名是dbtable,数据库是db1) 附:常用的数据库连接方法: (1)通过JET数据库引擎对ACCESS2000数据库的连接 m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\test.mdb","","",adModeUnknown); (2)通过DSN数据源对任何支持ODBC的数据库进行连接: m_pConnection->Open("Data Source=adotest;UID=sa;PWD=;","","",adModeUnknown); (3)不通过DSN对SQL SERVER数据库进行连接: m_pConnection->Open("driver={SQL

vb连接access数据库常用的方法两种示例

这里以链接access数据库为例。 第一部分是通过语句链接,第二部分是通过控件链接 一、 通过语句链接数据库,然后把相应的数据赋值给某个文本框就行了。 1.首先定义几个全局变量 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim constr As String 2.给这些变量赋值,方便链接数据库 constr = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=D:\EffectSolution\科学效应数据库.mdb" 红色部分写你自己的数据库路径。 3.打开数据库 cn.open constr 打开表 rs.open “select * from 效应表where id=5“,cn 取字符串并赋值给相应的文本 Text1.text=rs.fields(“效应和现象名称”) Text2.text=rs.fields(“文字解说”) 关闭表 rs.close 关闭数据库 cn.close 注意,最后两步骤一定要有,不然下次打开数据库的时候会提示出错的,这样的话,在窗口上建立两个文本框就够了。但是,在此之前还有一步一定要做,

点"工程"-"引用"-找到"Microsoft ActiveX Data Object 2.6 ",如图所示: 显示的结果如下图所示:

通过与效应表对比发现显示正确。 总体代码如下: Private Sub Form_Load() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim constr As String constr = "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=D:\EffectSolution\科学效应数据库.mdb" '空格加短下划线表示续行 cn.open constr rs.open "select * from 效应表where id =5", cn Text1.Text = rs.fields("效应和现象名称") Text2.Text = rs.fields("文字解说")

VB6连接ACCESS数据库

1:首先肯定是建立数据库(设置数据库名和密码,要将数据库文件和VB中创建的工程文件放在同一目录下。) 2:呵呵~~你要知道的关键的问题:如何连接Access数据库(方法有:数据控件、数据对象、数据环境设计器等)我都不想写得详细拉.(楼主你想知道多一点加我Q:413237613) 你可以参考一下我在网站查找到相关的资料啊.看看对你有没帮助啊:再不明白加我Q拉. 1、使用控件 ①Data控件 Data控件是Visual Basic6.0中的一个内置数据控件,可以通过设置Data控件的connect、DatabaseName、RecordSource属性实现对数据库的连接和访问。通过Data控件连接加密的数据库的方法有两种: 一种方法是在设计状态时,在“属性窗口”中将Data控件的connect属性的缺省值”Access”改为”;pwd=1234”即可,其它属性的设置方法与没有加密的Access数据库的连接相同。 另一种方法是在运行时,通过代码对connect属性赋值来实现。如: Data1.connect=”;pwd=1234” Data1.DatabaseName=APP.path+“\ssgl.mdb” 其中,”1234”为Access数据库文件ssgl.mdb的密码,下同。 ②Adodc控件 Adodc控件是一个ActiveX控件,它使用Microsoft ActiveX Data Objects(ADO)创建到数据库的连接。使用Adodc控件之前,要先将Adodc控件添加到控件工具箱中。方法如下:在VB 6.0种选择“工程”菜单,再点击“部件”菜单项,在弹出的“部件”对话框中选中“Microsoft ADO Data Control6.0(OLEDB)”选项即可。 通过Adodc控件连接加密的数据库的方法也有两种: 一种方法是在设计状态时,在“属性窗口”中,对Adodc控件的ConnectionString属性设置一个有效的连接字符串,并在连接字符串后增加上”;Jet OLEDB:DataBase password=1234”,再设置Adodc控件的CommandType、RecordSource的属性就可以创建到加密的数据库的连接了。 另一种方法是在运行时,通过代码动态地设置ConnectionString、CommandType和RecordSource属性来创建连接。只要在ConnectionString属性的有效连接字符串后增加上”; Jet OLEDB:DataBase password=1234”即可。 2、使用数据对象

用ado连接access

用ado连接access 及相应的一些处理收藏 vc知识库 用ado对数据库access的连接 11)用控制面板中的管理工具添加.mdb的access数据库在系统DSN中添加Driver do Microsoft access (*。mdb) 1)-----------------------------------加入ADO支持库---------------------------- 在StdAfx.h中 //加入ADO支持库 #import "c:\program files\common files\system\ado\msado15.dll" \ no_namespace \ rename ("EOF", "adoEOF") 2)--------------------------------初始化com,创建ado连接等操作----------------------------- 在CWinApp.h即 在class CAdoRW AccessApp : public CWinApp中 // 定义ADO连接变量指针 _ConnectionPtr m_pConnection; 在CWinApp.h即 在BOOL CAdoRW AccessApp::InitInstance()中 声明AfxOleInit();//初始化com,创建ado连接等操作 m_pConnection.CreateInstance(__uuidof(Connection)); 3)--------------------打开本地Access库Demo.mdb-------------------------- 在BOOL CAdoRW AccessApp::InitInstance()中 try { //打开本地Access库Demo.mdb m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Demo.mdb", "","",adModeUnknown);//注意代码的拼写错误!!! } catch(_com_error e) { AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!"); return FALSE; } 4)-----------------------------------创建记录集对象--------------------------------------- 在newadoDlg.h中 即class CAdoRW AccessDlg : public CDialog中声明 _RecordsetPtr m_pRecordset;// 定义记录集变量指针

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 \

使用ADO操作Access数据库

使用ADO操作Access数据库 2018/10/23 ADO对象 1、Access内嵌的VBA是用ADO技术开发数据库应用的主要工具,ADO是目前Microsoft通用的数据访问技术; 2、ADO对象模型包括:Connection、Recordset、Record、Command、Parameter、Field、Property、Stream、Error九个对象; 3、主要的ADO对象介绍: 1)Connection对象:ADO对象模型中的最高级对象,用来实现应用程序与数据源的连接; 2)Command对象:主要在VBA中使用SQL语句访问、查询和修改数据库中的数据,实现Recordset对象无法实现的操作(数据表级别的操作),可以使用DoCmd代替; 3)Recordset对象:ADO最为常用的、重要的对象,可以访问表和查询对象,返回的记录储存在Recorderset对象中,主要执行的操作: ①查询数据表中的数据; ②在数据表中添加数据; ③更新数据表中的数据; ④删除数据表中的特定数据; 在Access中引用ADO对象 1、Access引用ADO的步骤: ①声明、初始化Connection对象; ②创建Recordset对象,编程完成各种操作; ③关闭ADO对象; 2、声明、初始化Connection对象 '声明Connection对象:一般使用cn做为变量的命名前缀; Dim coName As ADODB.Connection '初始化Connection对象,连接当前数据库; Set cnName = CurrentProject.Connection 3、声明和打开Recordset对象 1)声明、初始化Recordset对象 Dim rsName As ADODB.Recoreset set rsName = new ADODB.Recordset 2)打开一个Recordset对象 使用Recordset的Open方法可以打开数据表、查询对象、或直接引用SQL查询语句 rsName.Open source, ActiveConnection, CursorType,LockType,Option

mfc使用ado连接access数据库

1.设置数据源 打开控制面板--->系统和安全--->管理工具--->ODBC Data Sources(32 bit) 这里需要注意的是,vc6.0是32位的,因此这里的数据源也必须是32位的,否则是连接不上的, 这里我使用的是ACCESS数据库,数据源的配置如下: 2.创建包含数据库的MFC对话框(其它也可以)工程,新建ADOConn类 在工程中我们需要新建一个普通类ADOConn

然后在ADOConn类头文件中加入以下导入声明和变量、函数声明:ADOConn.h--------------------------------------------------------------------------------- #import "c:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","adoEOF")//引入ADO库文件 public: _ConnectionPtr m_pConnection;//连接对象指针 _RecordsetPtr m_pRecordset;//记录集对象指针 _CommandPtr m_pCommand;//命令对象指针 ADOConn(); virtual ~ADOConn(); BOOL OnInitADOConn(CString Connstr);//初始化连接数据库 BOOL ExecuteSQL(CString strSQL);//执行SQL语句 BOOL ExecuteProc(CString ProcName);//执行存储过程 BOOL GetCollect(CString FieldName,CString & strDest);//获得某个字段的值 BOOL GetRecordSet(CString strSQL);//获得记录集 int GetRecordCount();//获得记录数 //判断表TableName中是否存在字段KeyName的值为KeyValue的记录 BOOL RecordExist(CString TableName,CString KeyName,CString KeyValue); BOOL MoveFirst();//移动到第一条记录 BOOL MoveNext();//移动到下一条记录 BOOL Close();//关闭记录集 BOOL CloseADOConnection();//关闭连接 void dump_com_error(_com_error &e);//错误详细信息 ADOConn.h---------------------------------------------------------------------------------

相关文档
相关文档 最新文档