1.我已经在stdafx.h中加了如下:
#import "C:\\program files\\common files\\system\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")2.在程序的主类里已有如下代码:if(!AfxOleInit())//这就是初始化COM库
{
AfxMessageBox("OLE初始化出错!");
return FALSE;
}
3.在我的类实现文件里有个GetDataTableBySQL函数,想返回_RecordsetPtr
// ZAdoDB.cpp: implementation of the ZAdoDB class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "TestVC.h"
#include "ZAdoDB.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////_RecordsetPtr & ZAdoDB::GetDataTableBySQL(CString strSql,CString strConn)
{
_RecordsetPtr pRec=NULL;
_ConnectionPtr pconn=NULL; CString strSRC="Provider=SQLOLEDB.1;Password=A78U86M02D20SS;Persist Security Info=True;User ID=sa;Initial Catalog=LanMsg;Data Source=A78U86M02D20SS\\SQLEXPRESS";
_variant_t varSRC(strSRC);
_bstr_t bstrSRC(varSRC); if(FAILED(pconn.CreateInstance("ADODB.Connection")))
{
AfxMessageBox("Create Connection Failed !");
return pRec;
} if(FAILED(pconn->Open(bstrSRC,"","",-1)))
{
AfxMessageBox("Open Database Failed !");
return pRec;
}
if(FAILED(pRec.CreateInstance("ADODB.Recordset")))
{
AfxMessageBox("Create Recordset object failed!");
return pRec;
} _variant_t varSQL(strSql); try
{ if(FAILED(pRec->Open(varSQL,varSRC,adOpenDynamic,adLockOptimistic,adCmdText)))//运行到这一句出错不知为什么,也没有抱什么错,反正就是出错,并且不能捕获?其上面的代码都没有问题,说明连接字符串没有错啊
{
AfxMessageBox("Open Recordset Failed!");
pRec.Release();
return pRec;
}
}
catch(CException ex)
{
LPTSTR LPTSTR1="";;
UINT ERRNUM=0;
AfxMessageBox(ex.GetErrorMessage(LPTSTR1,ERRNUM,NULL));
} //LONG RecCount=pRec->RecordCount();
//RecordList data[]=new RecordList[];
//while(!pRec->GetadoEOF())
//{
// _variant_t strData=pRec->GetCollect("id");
// AfxMessageBox(_bstr_t(strData));
// pRec->MoveNext();
//}
_RecordsetPtr retValue=pRec->Clone(adLockReadOnly);
pRec->Close();
pRec.Release();
return retValue;
}烦劳高手帮忙,看是什么问题?
#import "C:\\program files\\common files\\system\\ado\\msado15.dll" no_namespace rename("EOF","adoEOF")2.在程序的主类里已有如下代码:if(!AfxOleInit())//这就是初始化COM库
{
AfxMessageBox("OLE初始化出错!");
return FALSE;
}
3.在我的类实现文件里有个GetDataTableBySQL函数,想返回_RecordsetPtr
// ZAdoDB.cpp: implementation of the ZAdoDB class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "TestVC.h"
#include "ZAdoDB.h"#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////_RecordsetPtr & ZAdoDB::GetDataTableBySQL(CString strSql,CString strConn)
{
_RecordsetPtr pRec=NULL;
_ConnectionPtr pconn=NULL; CString strSRC="Provider=SQLOLEDB.1;Password=A78U86M02D20SS;Persist Security Info=True;User ID=sa;Initial Catalog=LanMsg;Data Source=A78U86M02D20SS\\SQLEXPRESS";
_variant_t varSRC(strSRC);
_bstr_t bstrSRC(varSRC); if(FAILED(pconn.CreateInstance("ADODB.Connection")))
{
AfxMessageBox("Create Connection Failed !");
return pRec;
} if(FAILED(pconn->Open(bstrSRC,"","",-1)))
{
AfxMessageBox("Open Database Failed !");
return pRec;
}
if(FAILED(pRec.CreateInstance("ADODB.Recordset")))
{
AfxMessageBox("Create Recordset object failed!");
return pRec;
} _variant_t varSQL(strSql); try
{ if(FAILED(pRec->Open(varSQL,varSRC,adOpenDynamic,adLockOptimistic,adCmdText)))//运行到这一句出错不知为什么,也没有抱什么错,反正就是出错,并且不能捕获?其上面的代码都没有问题,说明连接字符串没有错啊
{
AfxMessageBox("Open Recordset Failed!");
pRec.Release();
return pRec;
}
}
catch(CException ex)
{
LPTSTR LPTSTR1="";;
UINT ERRNUM=0;
AfxMessageBox(ex.GetErrorMessage(LPTSTR1,ERRNUM,NULL));
} //LONG RecCount=pRec->RecordCount();
//RecordList data[]=new RecordList[];
//while(!pRec->GetadoEOF())
//{
// _variant_t strData=pRec->GetCollect("id");
// AfxMessageBox(_bstr_t(strData));
// pRec->MoveNext();
//}
_RecordsetPtr retValue=pRec->Clone(adLockReadOnly);
pRec->Close();
pRec.Release();
return retValue;
}烦劳高手帮忙,看是什么问题?
解决方案 »
- Tinyxml的一个问题
- 大家提提意见
- 为什么CEdit赋值没有显示出来????
- 请问如何让没有TitleBar的对话框,能响应任务栏左键最小化事件?多谢啊~
- 如何得到切分视图窗口的视图句柄?
- unsigned char Data[t];如何知道t的大小?
- 用ado连接SQL Server出现的错误,错误码是3149
- 在学校系统的学过c/c++以及其相关知识,没用过vc这,如果现在想学,多久可以上手啊?
- 如何在字符串中加回车
- 谁能让中文简体WIN-ME与日文98(或日文98+中文简体98)共存呢
- 在VC2005里在,代码怎么分块
- 自绘菜单对于位图菜单是不是Windows不发送WM_MEASUREITEM消息?
{
LPTSTR LPTSTR1="";;
UINT ERRNUM=0;
AfxMessageBox(ex.GetErrorMessage(LPTSTR1,ERRNUM,NULL));
} 改成这个试试,看能否跳到catch里头
==>
catch(...)
{
AfxMessageBox("error!");
}另外第二个参数有问题,应该为pconn.GetInterface()
pRec->Open(varSQL,varSRC,adOpenDynamic,adLockOptimistic,adCmdText))
//strSql的值?
catch(_com_error)
{
}
catch(...)
{
}//至于第二个参数
ActiveConnection 可选。变体型,计算有效 Connection 对象变量名;或字符串,包含 ConnectionString 参数。
所以只要连接字符串不错,应该没有问题。
TO fantuan:
pRec->Open的原形里第二个参数是const _variant_t &类型啊?我用你的方法GetInterface是不是应该是GetInterfacePtr?用了还是报原来的错误.TO lfchen:
strSql="select * from MsgInfo";
我初学VC,有时基本的语法错误或许不知道,劳烦大家写标准点的VC代码,我直接替换;另外,我引用OELDB的前提条件是否够了(贴子里的1,2两条) ?
{pRec->Open(varSQL,varSRC,adOpenDynamic,adLockOptimistic,adCmdText)));}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
这种用法有人用过吗,现在这里出错。
我的目的是返回一个数据集的拷贝,而将原来的记录集在函数结束前关闭(模拟原来VB的用法)。
retValue CreateInstance //先创建接口。