描述:
我刚开始学习ATL编写组件.
GetRecordSet InitADO 是我加入到组件中两个函数(有别人提供).
完成初始化,和取得数据的问题.
InitADO
{
USES_CONVERSION; // Enables OLE2T macro
HRESULT hr = S_OK;
_bstr_t bstrConnectString;
_bstr_t bstrUserID;
_bstr_t bstrPassword;
try
{
bstrConnectString ="driver={SQL SERVER}; \
Server=lipsh;\
id=;pwd=; \
database=MIS";
bstrUserID = "";
bstrPassword = "";
hr = m_spADOConnection.CreateInstance(__uuidof(Connection), NULL);
hr = m_spADOConnection->Open(bstrConnectString, bstrUserID,
bstrPassword, adOptionUnspecified);
hr = m_spADORecordset.CreateInstance(__uuidof(Recordset), NULL);
_bstr_t bstrQuery(L"SELECT * FROM S_Info");
_variant_t vQuery(bstrQuery);
_variant_t vDispatch((IDispatch*)m_spADOConnection);
m_spADOConnection->AddRef();
hr = m_spADORecordset->Open(vQuery,
vDispatch,
adOpenDynamic,
adLockOptimistic,
adCmdText);
}
catch(_com_error &err)
{
TCHAR szBuf[2056];
_tcscpy(szBuf, _T(""));
_tcscat(szBuf, err.ErrorMessage());
_bstr_t bstrSource(err.Source());
_bstr_t bstrDesc(err.Description());
_tcscat(szBuf, (char*)bstrSource);
_tcscat(szBuf, (char*)bstrDesc);
#ifdef _DEBUG
OutputDebugString(szBuf);
#endif // _DEBUG
return E_FAIL;
}
}
GetRecordSet(IUnknown **NativeRecordSet)
{
if (NativeRecordSet == NULL)
return E_INVALIDARG;
ADORecordsetConstructionPtr spConsPtr;
spConsPtr = m_spADORecordset;
spConsPtr->get_Rowset(NativeRecordSet);
return S_OK;
}
测试部分如下:
void CTestDlg::OnTest()
{
CoInitialize(NULL);
IDataAccessorPtr pPtr;
IUnknown **NativeRecordSet;
HRESULT hr=pPtr.CreateInstance(__uuidof(DataAccessor));
if (FAILED(hr))
{
_com_error err(hr);
AfxMessageBox(err.ErrorMessage());
return;
}
pPtr->InitializeADO();
HRESULT hr2=pPtr->GetRecordSet();
if (FAILED(hr2))
{
AfxMessageBox("Failure");
}
else
{
AfxMessageBox("Success");
}
CoUninitialize();
}
问题: 1,GetRecordSet函数在组件里面明明设置了一个参数,可是
在测试端出现错误,把参数去掉为空,就没有问题了.
2,参数IUnknown **NativeRecordSet;是为了取得数据.但是这种方式
怎么能得到具体的返回来的数据呢?
3,这样访问数据库还要注意些什么问题,以及了解哪些东西
在此先多谢大家.
您可能想查找下面的文章:
- 200-300分求《ProgrammingServer-SideApplicationsforMicrosoftWindows2000》随书源码
- 300分求无窗口控件windowless怎么使用对话框??
- 十万火急!!!!!有谁知道那里有控件支持USB设备数据的读取?兄弟有300分奉上!
- 为什么没人回答,同样的问题(ActiveX,vc,dephi我第三次问了,答对了给300分
- 300分征求报表OCX\ACTIVEX控件,要求是正规版且无LICENSE问题!能转换为EXCEL文件更好,欢迎有经验者提供,可加到1000分!
- 在线等,急呀,谁能给我发一个WEB中用ActiveX嵌WORD的例子,送上300分,
- 300分求:软件做好了,想找个好用的能加入注册码功能的软件,哪位大虾有?
- 300分相送!!我自己搞的SearchHook为什么有些机能实用,而一些却不行!帮忙搞好的300分相送,另开贴送!
- !!!另送300分求助!!!在COM+中频繁调用结果集RST操作与XML解析DOM对象,为何内存狂涨不能释放?(跟帖有分)
- 300分,来者有分:将问题一问到底,关于COM组件访问数据库问题,分不够另给