能说清楚一点吗,rs.GetRecordCount(); rs是指 _RecordsetPtr m_pRecordset;里的m_pRecordset吗? select * from XX, xx是指要查询的表对吧
CDatabase db; db.Open("你的数据库连接串"); CRecordset rs(&db); rs.Open(CRecordset::forwardOnly,_T("select * from 表") ); int count = rs.GetRecordCount(); rs.close();
db.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\k.mdb","","",adModeUnknown); 你的数据库连接串,这个没问题吧 可是编译有2个错误error C2664: 'Open' : cannot convert parameter 2 from 'char [1]' to 'int' This conversion requires a reinterpret_cast, a C-style cast or function-style cast error C2039: 'close' : is not a member of 'CRecordset' d:\microsoft visual studio\vc98\mfc\include\afxdb.h(564) : see declaration of 'CRecordset' Error executing cl.exe.
rs是指 _RecordsetPtr m_pRecordset;里的m_pRecordset吗?
select * from XX, xx是指要查询的表对吧
CDatabase db;
db.Open("你的数据库连接串");
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly,_T("select * from 表") );
int count = rs.GetRecordCount();
rs.close();
你的数据库连接串,这个没问题吧
可是编译有2个错误error C2664: 'Open' : cannot convert parameter 2 from 'char [1]' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
error C2039: 'close' : is not a member of 'CRecordset'
d:\microsoft visual studio\vc98\mfc\include\afxdb.h(564) : see declaration of 'CRecordset'
Error executing cl.exe.
把 \\ 改成 ./ 再试试Close 字母C得大写
第一个你在检查一下你的串吧
_RecordsetPtr m_pRecordSet;
if (::CoInitialize( NULL ) == E_INVALIDARG)
{
AfxMessageBox(_T("初始化Com失败!"));
exit(1);
} HRESULT hr;
try
{
hr = m_pConnection.CreateInstance(__uuidof (Connection));///创建Connection对象//
if(SUCCEEDED(hr))
{
m_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Program Files\\SmartWorks\\DataBase\\CQ.mdb","","",adModeUnknown);
}
}
catch(_com_error e)///捕捉异常
{
CString errormessage;
errormessage.Format("错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return;
}
try
{
m_pRecordSet.CreateInstance("ADODB.Recordset");
_variant_t cnn;
cnn = (IDispatch*)m_pConnection;
m_pRecordSet->Open("select * from SWCQ",cnn,adOpenStatic,adLockOptimistic,adCmdText);
}
catch (_com_error e)
{
CString errormessage;
m_pConnection->Close();
errormessage.Format("错误信息:%s",e.ErrorMessage());
AfxMessageBox(errormessage);///显示错误信息
return;
}
int count = m_pRecordSet->GetRecordCount();
_ConnectionPtr m_pCon;
_RecordsetPtr m_pRecord;
AfxOleInit();
m_pCon.CreateInstance(__uuidof(Connection));
m_pRecord.CreateInstance(__uuidof(Recordset)); m_pCon->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; \
Data Source=./etwldbs.mdb;Persist Security Info=False"; try
{
m_pCon->Open("","","",-1);
}
catch(...)
{
AfxMessageBox("数据库连接错误",0,0);
return TRUE;
}
程序从数据库中的前20条记录写到新文件中,产生这个新文件。显示出来。
现在我在按钮的消息处理里已经连上了数据库,把它的内容已经输到了文件里了,现在就是想求出数据库表中的记录的个数,帮我看看吧
int n=m_pRecordset->GetRecordCount();
可调式结果n=-858993460
我查了一下说可能是游标的问题,又加了2句
m_pRecordset->CursorType = adOpenStatic;
m_pRecordset->CursorLocation = adUseClient;
可还是不对
如果是这样有一个最笨的办法自己计算记录数.
int i_Count=0;
while (! m_pRecord->ADOEOF && !m_pRecord->BOF)
{
i_Count++;
m_pRecord->MoveNext();
}
int i_Count=0;
while (! m_pRecord->ADOEOF && !m_pRecord->BOF)
{
i_Count++;
m_pRecord->MoveNext();
}
可以得到记录个数,非常感谢