各位大虾:
我用VC写了一个DLL需要连接数据库,可是每次都连不上,截取他的代码用在应用程序中就可以,这是为什么?需要怎么做才能连上,最好能有代码?谢谢,实现给分
我用VC写了一个DLL需要连接数据库,可是每次都连不上,截取他的代码用在应用程序中就可以,这是为什么?需要怎么做才能连上,最好能有代码?谢谢,实现给分
解决方案 »
- 为啥MSN这些DirecUI用的图片是png而不是jpg?
- 有两个对话框,互相多次打开,为什么不能一次关闭?
- 关于汇编的JMP方法,内详.高手回答一下
- 请教:双缓冲的问题
- 请教,如何在其它类中给CWinApp类发送消息?
- 有关中程的问题!!
- ATL高手请进:关于ATL做的ActiveX控件的属性页的问题
- 关于函数返回值??(相加共100分!)
- 高手帮忙啊!!VC6.O中使用10G中的occi接口怎么配置环境
- 真心交个懂vc通讯(监视系统、门禁涮卡系统)[email protected] QQ:34533091
- OLE DB 使用 SQL Server 2000 数据库进行查询
- 如何判断ListCtrl控件的是否出现了滚动条
在stdafx.h中
#import "C:\Program Files\Common Files\System\ADO\msado15.dll" named_guids rename("EOF","adoEOF"), rename("BOF","adoBOF")这两个是全局变量
_ConnectionPtr g_pAdoCn;
_RecordsetPtr g_pAdoRs;在工程中的InitInstance()
::CoInitialize(NULL); //初始化OLE/COM库环境
g_pAdoCn.CreateInstance(__uuidof(Connection));
g_pAdoRs.CreateInstance(__uuidof(Recordset));
CString StrCn=_T("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=database.mdb");
g_pAdoCn->PutConnectionTimeout(100);
if (g_pAdoCn->Open(_bstr_t(StrCn),"","",-1))
{
AfxMessageBox("OK");
}
else
AfxMessageBox("NO");得到的结果是NO
static void TESTHR(HRESULT x) { if FAILED(x) _com_issue_error(x); }//
// 创建OLE自动INIT|UNINIT对象
struct StartOle {
StartOle() { CoInitialize(NULL); }
~StartOle() { CoUninitialize(); }
} _inst_StartOle;//
//
int XLSAPI WINAPI xls_CopyRecordsetFromStr( LPCTSTR szConnStr,
LPCTSTR szSQL,
LPCTSTR szTitle,
BOOL bVisible, BOOL bQuit )
{
using namespace Excel;
_RecordsetPtr pRst = NULL;
_ConnectionPtr pConnection = NULL;
FieldPtr _MyPtr= NULL; _ApplicationPtr pXL = NULL;
WorkbooksPtr pBooks = NULL;
_WorkbookPtr pBook = NULL;
_WorksheetPtr pSheet = NULL;
RangePtr pRange = NULL;
// Define string variables.
_bstr_t strCnn( szConnStr );
_bstr_t strSql( szSQL );
_bstr_t str;
HRESULT hr = S_OK; try {
//
// 为什么 try catch 块中,CreateInstance还要加TESTHR来判断
// 因为_com_ptr_t的CreateInstance 是直接返回 HRESULT
// 并非如ADO xxxPtr之类返回值是错误就抛出异常,
// CreateInstace 是不抛的,这个可以说是一BUG,但很多人没注意,以为try就OK了
TESTHR( pXL.CreateInstance(L"Excel.Application")); pXL->Visible = ( (bVisible) ? VARIANT_TRUE : VARIANT_FALSE); pBooks = pXL->Workbooks;
pBook = pBooks->Add((long)xlWorksheet); pSheet = pXL->ActiveSheet; pSheet->Name = szTitle; // open connection and record set TESTHR(pConnection.CreateInstance(__uuidof(Connection)));
pConnection->Open(strCnn,"","",NULL); TESTHR(pRst.CreateInstance(__uuidof(Recordset)));
TESTHR( pRst->Open(strSql,
_variant_t((IDispatch *)pConnection,true), adOpenKeyset,
adLockOptimistic, adCmdText));
for( int i = 0; i < pRst->Fields->Count ; i++ )
{
_get_cellid( str, i );
pSheet->Range[ str ]->Value = pRst->Fields->GetItem( _variant_t((long)i,VT_I4) )->Name;
}
pRange = pSheet->Range["A2"];
pRange->CopyFromRecordset( pRst );
pRst->Close();
pConnection->Close();
if( bQuit )
pXL->Quit();
}
catch(_com_error &e)
{
return -1;
}
return 0;
}