2023年11月23日发(作者:)
MFC与Access(⼀)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; //
获取到最终数据,可以在其他函数中对这些数据进⾏处理。
}
发布评论