2023年11月23日发(作者:)

MFCAccess(⼀)C++.mdb⽂件

MFC与Access系列

CDaoDatabase

Open

原型:

virtual void Open(

LPCTSTR lpszName,

BOOL bExclusive = FALSE,

BOOL bReadOnly = FALSE,

LPCTSTR lpszConnect = _T(

"" )

);

打开数据库⽂件。

lpszName:数据库⽂件名

bExclusive:是否为独占访问

bReadonly:是否为只读

lpszConnect:不知道是啥

官⽅⽂档的解释是这样的:

字符串表达式⽤于打开该数据库使⽤了。此字符串组合ODBC连接参数。您必须提供独占和只读参数提供源字符串。如果数据库是

Microsoft Jet数据库(.MDB),该字符串为空("")。默认的— _T("")语法—对Unicode以及您的应⽤程序ANSI编译的可移植性。(感

觉是翻译的问题)

Close

原型:

virtual void Close( );

断开数据库连接并关闭任何打开的记录集、tabledefs和querydefs。

CDaoRecordset

原型:

class CDaoRecordset : public CObject

表⽰从数据源中选择的⼀组记录。

在创建对象时,需要提供数据库源的地址。

Open

原型:

virtual void Open(

int nOpenType = AFX_DAO_USE_DEFAULT_TYPE,

LPCTSTR lpszSQL = NULL,

int nOptions = 0

);

获取表格内容。

nOpenType

下列值之⼀:

1. 使⽤双向滚动的dbOpenDynaset 的动态类型的记录集。这是默认设置。

2. 使⽤双向滚动的dbOpenTable 的表类型的记录集。

3. 使⽤双向滚动的dbOpenSnapshot 的快照型记录集。

lpszSQL

包含下列操作之⼀的字符串指针:

1. NULL 指针。

2. ⼀个或多tabledefs和querydefs的名称(以逗号分隔)。

3. SQL SELECT 语句(可选)与SQL WHERE 或 ORDERBY ⼦句)。

4. 传递查询。

nOptions

下⾯列出的⼀个或多个选项卡。默认值为 0。可能值如下:

1. dbAppendOnly 可以仅追加新记录(仅动态类型的记录集)。此选项按原义表⽰记录只能追加。MFC ODBC数据库选件类具有允许记

GetFieldValue

原型:

virtual void GetFieldValue(

LPCTSTR lpszName,

COleVariant& varValue

);

检索记录集中的数据。

pszName

对包含字段名的字符串的指针。

varValue

要存储字段的值 COleVariant 对象的引⽤。

MoveNext

原型:

void MoveNext( );

移动到记录集中的下⼀条。

Close

原型:

virtual void Close( );

关闭 CDaoRecordset 对象打开记录集的集合,并在关联的数据库中移除。

COleVariant

ChangeType

原型:

void ChangeType(

VARTYPE vartype,

#include

#pragma warning(disable:4995) //4995

忽略类型为的警告

.cpp⽂件:

//vectorinclude

使⽤必须先导⼊

vector<vector<CString>> AccessAuxiliary::AccessAuxiliaryRead(CString lib, CString table, vector<CString> name) {

/*

lib

:⽂件名,如

tablemotor

:表格名,如

name*/

:表格的列名

vector<vector<CString>> svec; //

⽤⼀个⼆维容器存放表格数据

svec.reserve(10); //10

预设

CString str = _T("SELECT * FROM ") + table;

CDaoDatabase db;

CDaoRecordset RecSet(&db);

COleVariant var;

int num = 0;

var.ChangeType(VT_BSTR, NULL);

db.Open(lib);

RecSet.Open(AFX_DAO_USE_DEFAULT_TYPE, str, NULL);

while (!RecSet.IsEOF())

{

svec.push_back(vector<CString>()); //

添加新⾏,否则会出现索引溢出

svec[num].reserve(10);

for (short i = 0; i < RecSet.GetFieldCount(); i++)

{

RecSet.GetFieldValue(name[i], var);

svec[num].push_back((LPCTSTR)var.pbstrVal); //COleVariant

强制转换对象的值

}

RecSet.MoveNext();

num++;

}

RecSet.Close();

db.Close();

svec.shrink_to_fit();

return svec; //

获取到最终数据,可以在其他函数中对这些数据进⾏处理。

}