小弟,我的程序是采用ADO封装操作access数据库,单独在一个对话框中编译通过,能够实现功能。
但是把它引入到一个含有多个对话框(一个主对话框和四个子对话框)时{方法一样先定声明,后引用},一直提示连接、记录指针无效:[color=#800000]error C2146: syntax error : missing ';' before identifier 'm_pConnection'和error C2501: '_ConnectionPtr' : missing storage-class or type specifiers。。
我也仔细检查了#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库,路径正确,
没有问题。单独在一个主对话框中没有问题,一引入到多个对话框中就不行了。我现在怀疑:是不是需要加入什么头文件之类的东西??我真的无奈了,也请教过师兄,但是还是没有找出原因。有没有高人愿意帮忙,最少100分(莫嫌少我只有这么多)。先谢谢了!!(在线等待)
但是把它引入到一个含有多个对话框(一个主对话框和四个子对话框)时{方法一样先定声明,后引用},一直提示连接、记录指针无效:[color=#800000]error C2146: syntax error : missing ';' before identifier 'm_pConnection'和error C2501: '_ConnectionPtr' : missing storage-class or type specifiers。。
我也仔细检查了#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库,路径正确,
没有问题。单独在一个主对话框中没有问题,一引入到多个对话框中就不行了。我现在怀疑:是不是需要加入什么头文件之类的东西??我真的无奈了,也请教过师兄,但是还是没有找出原因。有没有高人愿意帮忙,最少100分(莫嫌少我只有这么多)。先谢谢了!!(在线等待)
[size=10px]一.class ADO
{
public:
_ConnectionPtr m_pConnection; //连接对象指针
_RecordsetPtr m_pRecordset; //记录集对象指针
public:
ADO();
virtual ~ADO(); void OnInitADOConn(); //连接数据库
_RecordsetPtr& OpenRecordset(CString sql); //打开记录集
void CloseRecordset(); //关闭记录集
void CloseConn(); //关闭数据库连接
UINT GetRecordCount(_RecordsetPtr pRecordset); //获得记录数
};
二.#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace\
rename("EOF","adoEOF")rename("BOF","adoBOF") //导入ADO动态链接库[/size]
三.
ADO::ADO()
{}ADO::~ADO()
{}
void ADO::OnInitADOConn()
{
::CoInitialize(NULL);
try
{
m_pConnection.CreateInstance("ADODB.Connection"); //创建连接对象实例
_bstr_t strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ=ABC.mdb;";
m_pConnection->Open(strConnect,"","",adModeUnknown); //打开数据库
}
catch(_com_error e)
{
AfxMessageBox(e.Description()); //弹出错误处理
}
}_RecordsetPtr& ADO::OpenRecordset(CString sql)
{
ASSERT(!sql.IsEmpty()); //SQL语句不能为空
try
{
m_pRecordset.CreateInstance(__uuidof(Recordset)); //创建记录集对象实例
m_pRecordset->Open(_bstr_t(sql), m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText); //执行SQL得到记录集
}
catch(_com_error e) //捕获可能的异常
{
AfxMessageBox(e.Description());
}
return m_pRecordset;
}void ADO::CloseRecordset()
{
if(m_pRecordset->GetState() == adStateOpen) //判断当前的记录集状态
m_pRecordset->Close(); //关闭记录集
}void ADO::CloseConn()
{
m_pConnection->Close(); //关闭数据库连接
::CoUninitialize(); //释放COM环境
}UINT ADO::GetRecordCount(_RecordsetPtr pRecordset)
{
int nCount = 0; //声明保存记录数的变量
try{
pRecordset->MoveFirst(); //将记录集指针移动到第一条记录
}
catch(...) //捕捉可能出现的错误
{
return 0; //产生错误时返回0
}
if(pRecordset->adoEOF) //判断记录集中是否没有记录
return 0; //无记录时返回0
while (!pRecordset->adoEOF) //当记录集指针没有指向最后时
{
pRecordset->MoveNext(); //将记录集指针移动到下一条记录
nCount = nCount + 1; //记录个数的变量加1
}
pRecordset->MoveFirst(); //将记录集指针移动到第一条记录
return nCount; //返回记录数
}
rename("EOF","adoEOF")rename("BOF","adoBOF") 这就话加在Stdafx.h文件中