60分求救一个问题:关于VC与ODBC数据库相连.(不然老板要把我炒了),谢谢! 用Wizard帮你根据具体数据表格派生一个CYourRecordset类不显示登陆框只要在m_db.Open加上一个参数,CDatabase::noOdbcDialog就行了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CDatabase * AppConnectToDatabase(CDatabase* pAppDb,CString g_strDSN){ BOOL b_Ret=TRUE; CDatabase * pDb; if (pAppDb == NULL) return NULL; else pDb = pAppDb; pDb->SetLoginTimeout(1000); if (pDb->IsOpen()) { pDb->SetQueryTimeout(1000); return pDb; } try { pDb->OpenEx(g_strDSN, CDatabase::noOdbcDialog); //pDb->OpenEx(g_lpszDSN, CDatabase::useCursorLib|CDatabase::noOdbcDialog); b_Ret = TRUE; } catch(CDBException * e) { b_Ret = FALSE; TCHAR szErrMsg[127]; _sntprintf(szErrMsg,127,_T("无法连接数据库,原因(%s)!"),(LPCTSTR)e->m_strError); ::MessageBox(NULL,(LPCTSTR)szErrMsg,"警告",MB_ICONWARNING); e->Delete(); } catch(CMemoryException * e) { b_Ret = FALSE; e->Delete(); } if (b_Ret) { //pDb->SetQueryTimeout(10); return pDb; } else { //if connection failed if (pAppDb) delete pAppDb; return NULL; //ok }}void AppDisconnectFromDatabase(CDatabase * pAppDb){ CDatabase *pDb; pDb = pAppDb; if (pDb->IsOpen()) pDb->Close(); if (pAppDb) { delete pAppDb; pAppDb = NULL; }}使用CString g_strDSN="DSN=yourdsn;UID=uid;PWD=password";m_pDb = new CDatabase;m_pDb=AppConnectToDatabase(m_pDb,g_strDSN);CString strSql; strSql.Format("select count(*) from tab"); CRecordset * pSet=new CRecordset(m_pDb); try { pSet->Open(AFX_DB_USE_DEFAULT_TYPE,(LPCTSTR)strSql); } catch(CDBException* e) { ... } pCustInfoSet->MoveFirst(); int nIndex=0; while(!pCustInfoSet->IsEOF()) { ... }AppDisconnectFromDatabase(m_pDb); 从不从CRecordSet 类派生自已的类没关系首先,在stdafx.h 中加入#include <afxdao.h>然后在你想使用数据库的地方声明CDatabase m_db;m_db.OpenEx("connect str",); //connect str 为( DNS="你建的ODBC DNS 名称"UID=SA;PWD=abc123)然后建一个CRecordset 类的实例;CRecordset * pSet = new CRecordset(&m_db);然后使用pSet 这个指针就OK最后别忘记加上if (pSet->IsOpen()) pSet->Close();delete pSet; 上面给错了一个是#include <afxdb.h> 如果要说好的话,不如用oledb的好。当然会麻烦些 .net效率如此低,为什么微软还坚持在新一代操作系统中用.net库. 真的是最后20分了求用点画椭圆的方法,以后不想来CSDN了,太慢了。。。。 急救信号!!请把.net中这段发送消息的代码给我换vc6.0++!高分感激! (虚心求教)有关数据包截获,请进来指导一下 一个关于字体大小的问题 帮我分析下这句话! vc++控件的使用!!!!100分求教!!!!! 请问在定义COM的方法时,如何才能让参数有却省值? 请问有打开vc集成环境窗口系统菜单的快捷键么?如果有,是什么键呢? 请问IE里面的超时设置默认为多少秒? 关于delete 大家帮我看看这个warning是怎么回事?
{
BOOL b_Ret=TRUE;
CDatabase * pDb;
if (pAppDb == NULL)
return NULL;
else
pDb = pAppDb; pDb->SetLoginTimeout(1000);
if (pDb->IsOpen())
{
pDb->SetQueryTimeout(1000);
return pDb;
} try
{
pDb->OpenEx(g_strDSN, CDatabase::noOdbcDialog);
//pDb->OpenEx(g_lpszDSN, CDatabase::useCursorLib|CDatabase::noOdbcDialog);
b_Ret = TRUE;
}
catch(CDBException * e)
{
b_Ret = FALSE;
TCHAR szErrMsg[127];
_sntprintf(szErrMsg,127,_T("无法连接数据库,原因(%s)!"),(LPCTSTR)e->m_strError);
::MessageBox(NULL,(LPCTSTR)szErrMsg,"警告",MB_ICONWARNING);
e->Delete();
}
catch(CMemoryException * e)
{
b_Ret = FALSE;
e->Delete();
} if (b_Ret)
{
//pDb->SetQueryTimeout(10);
return pDb;
}
else
{
//if connection failed
if (pAppDb)
delete pAppDb;
return NULL; //ok
}
}
void AppDisconnectFromDatabase(CDatabase * pAppDb)
{
CDatabase *pDb;
pDb = pAppDb; if (pDb->IsOpen())
pDb->Close();
if (pAppDb)
{
delete pAppDb;
pAppDb = NULL;
}
}使用
CString g_strDSN="DSN=yourdsn;UID=uid;PWD=password";
m_pDb = new CDatabase;
m_pDb=AppConnectToDatabase(m_pDb,g_strDSN);
CString strSql;
strSql.Format("select count(*) from tab");
CRecordset * pSet=new CRecordset(m_pDb);
try
{
pSet->Open(AFX_DB_USE_DEFAULT_TYPE,(LPCTSTR)strSql);
}
catch(CDBException* e)
{
...
}
pCustInfoSet->MoveFirst();
int nIndex=0;
while(!pCustInfoSet->IsEOF())
{
...
}
AppDisconnectFromDatabase(m_pDb);
首先,在stdafx.h 中加入
#include <afxdao.h>然后在你想使用数据库的地方声明
CDatabase m_db;
m_db.OpenEx("connect str",); //connect str 为( DNS="你建的ODBC DNS 名称"UID=SA;PWD=abc123)
然后建一个CRecordset 类的实例;
CRecordset * pSet = new CRecordset(&m_db);
然后使用pSet 这个指针就OK
最后别忘记加上
if (pSet->IsOpen())
pSet->Close();
delete pSet;
#include <afxdb.h>