我在用vc6.0连接PostgreSQL数据库时,代码编译没有错误,但是运行时出现了错误,如果我把断开数据库的语句给取消了,程序能够运行,但是有效功能却不行,请各位高手指点一下。
void CADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=PostgreSQL OLE DB Provider;Password=sa;User ID=postgres;Data Source=localhost;Location=central;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}
void CADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}
void CComBoxDlg::AddToCom()
{
//连接数据库
CADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置查询字符串
_bstr_t bstrSQL = "SELECT * FROM Users";
//创建记录集指针对象实例
m_AdoConn.m_pRecordset.CreateInstance(__uuidof(Recordset));
//打开记录集
m_AdoConn.m_pRecordset->Open(bstrSQL,m_AdoConn.m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
while(!m_AdoConn.m_pRecordset->adoEOF)
{
m_ComBox.InsertString(0,(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("UserName"));
//将记录集指针移动到下一条记录
m_AdoConn.m_pRecordset->MoveNext();
}
//断开数据库连接
m_AdoConn.ExitConnect();//就在这一步出现了问题,请大家帮着看一下。
}
void CADOConn::OnInitADOConn()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect = "Provider=PostgreSQL OLE DB Provider;Password=sa;User ID=postgres;Data Source=localhost;Location=central;";
m_pConnection->Open(strConnect,"","",adModeUnknown);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
}
void CADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}
void CComBoxDlg::AddToCom()
{
//连接数据库
CADOConn m_AdoConn;
m_AdoConn.OnInitADOConn();
//设置查询字符串
_bstr_t bstrSQL = "SELECT * FROM Users";
//创建记录集指针对象实例
m_AdoConn.m_pRecordset.CreateInstance(__uuidof(Recordset));
//打开记录集
m_AdoConn.m_pRecordset->Open(bstrSQL,m_AdoConn.m_pConnection.GetInterfacePtr(),adOpenDynamic,
adLockOptimistic,adCmdText);
while(!m_AdoConn.m_pRecordset->adoEOF)
{
m_ComBox.InsertString(0,(char*)(_bstr_t)m_AdoConn.m_pRecordset->GetCollect("UserName"));
//将记录集指针移动到下一条记录
m_AdoConn.m_pRecordset->MoveNext();
}
//断开数据库连接
m_AdoConn.ExitConnect();//就在这一步出现了问题,请大家帮着看一下。
}
void CADOConn::ExitConnect()
{
// 关闭记录集和连接
if (m_pRecordset != NULL)
m_pRecordset->Close();
m_pConnection->Close();
// 释放环境
::CoUninitialize();
}
这个里面, 楼主没办法去顶是那行吗,大多数可能是 ::CoUninitialize()吧?
::CoUninitialize();
是这个语句有错误,去掉这个语句就没有问题了,该怎么办?
1.分别放进构造与析构里面(CComBoxDlg,先用这个)。
2.这样如果你有别的地方用到初始化了,就把这两个去掉吧(前提就是保证执行都成功)。
当然,最好听听快乐鹦鹉的高论,大家都学习下呵呵