一个关于在VC中如何获得ACCESS数据库表中的所有记录条数的问题??

时间:2022-04-16 21:40:50
我需要获得表中所有记录的条数,并把条数值赋个一个int变量,希望各位高手帮忙解决一下

12 个解决方案

#1


VC++下使用ADO编写数据库程序

准备:
(1)、引入ADO类 

#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
(2)、初始化COM

在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL);
CoUnInitialize();

(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr

1.连接和关闭数据库 (1)连接 

例子:连接Access数据库
m_pConnection.CreateInstance(__uuidof(Connection));
try                 
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
(2)、关闭 

//如果数据库连接有效
if(m_pConnection->State)
       m_pConnection->Close();
m_pConnection= NULL;  

2.打开一个记录集

(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));

// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

int nCount = m_pRecordset->GetRecordCount();


m_pRecordset->Close();
m_pConnection->Close();



 
 

#2


该回复于2009-05-11 10:12:27被版主删除

#3


1楼的大大写得很详细了

#4


一楼写得是很好,最关键的语句就是用一条
int nCount = m_pRecordset->GetRecordCount(); 
其实,有时不要用这条语句。某些情况会获不到记录条数。
最简单的办法就是去读记录数。
pRs->MoveFirst();
while(!pRs->ADOEOF)
{
   nCount++;
pRs->MoveNext();
}

#5


为了获取记录总数而读取整个表,效率太低;

直接返回记录数好了:

select count(*) from table


var = pRs->GetCollect(0L);



另外,用静态方式打开记录集

int nCount = m_pRecordset->GetRecordCount();

就不会返回 -1 了。

#6


引用 5 楼 zaodt 的回复:
为了获取记录总数而读取整个表,效率太低; 

直接返回记录数好了: 

select count(*) from table 


var = pRs->GetCollect(0L); 


另外,用静态方式打开记录集 

int nCount = m_pRecordset->GetRecordCount(); 

就不会返回 -1 了。

select count(*) from table 
这多省事啊

#7


rs.MoveFirst();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();

#8


引用 7 楼 lizifong 的回复:
rs.MoveFirst();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();


这个好啊,简单实用快速~`~

#9


7楼正解

#10


我用动态的方式打开的,为什么会得到-1啊????

#11


引用 5 楼 zaodt 的回复:
为了获取记录总数而读取整个表,效率太低;

直接返回记录数好了:

select count(*) from table


var = pRs->GetCollect(0L);



另外,用静态方式打开记录集

int nCount = m_pRecordset->GetRecordCount();

就不会返回 -1 了。


还是带星星的强。

#12


使用四楼的方法,安全可靠。。。
哈哈
虽然笨一点,但是我刚好要遍历数据库。。。
谢谢哈!!!

#1


VC++下使用ADO编写数据库程序

准备:
(1)、引入ADO类 

#import "c:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename ("EOF", "adoEOF")
(2)、初始化COM

在MFC中可以用AfxOleInit();非MFC环境中用: CoInitialize(NULL);
CoUnInitialize();

(3)#import 包含后就可以用3个智能指针了:_ConnectionPtr、_RecordsetPtr和_CommandPtr

1.连接和关闭数据库 (1)连接 

例子:连接Access数据库
m_pConnection.CreateInstance(__uuidof(Connection));
try                 
{
// 打开本地Access库Demo.mdb
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;DataSource=Demo.mdb",
"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox("数据库连接失败,确认数据库Demo.mdb是否在当前路径下!");
return FALSE;
}
(2)、关闭 

//如果数据库连接有效
if(m_pConnection->State)
       m_pConnection->Close();
m_pConnection= NULL;  

2.打开一个记录集

(1)打开,首先创建一个_RecordsetPtr实例,然后调用Open()得到一条SQL语句的执行结果
_RecordsetPtr m_pRecordset;
m_pRecordset.CreateInstance(__uuidof(Recordset));

// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,
// 因为它有时会经常出现一些意想不到的错误。jingzhou xu
try
{
m_pRecordset->Open("SELECT * FROM DemoTable",// 查询DemoTable表中所有字段
m_pConnection.GetInterfacePtr(),  // 获取库接库的IDispatch指针
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error *e)
{
AfxMessageBox(e->ErrorMessage());
}

int nCount = m_pRecordset->GetRecordCount();


m_pRecordset->Close();
m_pConnection->Close();



 
 

#2


该回复于2009-05-11 10:12:27被版主删除

#3


1楼的大大写得很详细了

#4


一楼写得是很好,最关键的语句就是用一条
int nCount = m_pRecordset->GetRecordCount(); 
其实,有时不要用这条语句。某些情况会获不到记录条数。
最简单的办法就是去读记录数。
pRs->MoveFirst();
while(!pRs->ADOEOF)
{
   nCount++;
pRs->MoveNext();
}

#5


为了获取记录总数而读取整个表,效率太低;

直接返回记录数好了:

select count(*) from table


var = pRs->GetCollect(0L);



另外,用静态方式打开记录集

int nCount = m_pRecordset->GetRecordCount();

就不会返回 -1 了。

#6


引用 5 楼 zaodt 的回复:
为了获取记录总数而读取整个表,效率太低; 

直接返回记录数好了: 

select count(*) from table 


var = pRs->GetCollect(0L); 


另外,用静态方式打开记录集 

int nCount = m_pRecordset->GetRecordCount(); 

就不会返回 -1 了。

select count(*) from table 
这多省事啊

#7


rs.MoveFirst();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();

#8


引用 7 楼 lizifong 的回复:
rs.MoveFirst();
rs.MoveLast();
int nCount = (int)rs.GetRecordCount();


这个好啊,简单实用快速~`~

#9


7楼正解

#10


我用动态的方式打开的,为什么会得到-1啊????

#11


引用 5 楼 zaodt 的回复:
为了获取记录总数而读取整个表,效率太低;

直接返回记录数好了:

select count(*) from table


var = pRs->GetCollect(0L);



另外,用静态方式打开记录集

int nCount = m_pRecordset->GetRecordCount();

就不会返回 -1 了。


还是带星星的强。

#12


使用四楼的方法,安全可靠。。。
哈哈
虽然笨一点,但是我刚好要遍历数据库。。。
谢谢哈!!!