我的程序如下:
void CAccountDBSSDlg::OnBtnIncomeAdd()
{
// TODO: Add your control notification handler code here if(!UpdateData())
return;
CString txtType = m_dcIncome.GetText();
if(txtType.IsEmpty()){
AfxMessageBox("类型不能为空");
return;
}
//获取收入时间;
CString strDate = m_oleIncome.Format("%Y-%m-%d");
try
{
// _RecordsetPtr m_pRecordset;
m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
m_pRecordset.CreateInstance("ADODB.Recordset");//初始化Recordset指针
m_pRecordset->Open("Select seq_income_id.NEXTVAL from dual",(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
int id = 1;
if(!m_pRecordset->adoEOF)
{
_variant_t TheValue;
//从系列中获取新的收入ID值;
TheValue = m_pRecordset->Fields->GetItem((short)0)->Value;
if(TheValue.vt != VT_NULL)
id = TheValue.iVal;
}
m_pRecordset->Close(); _variant_t RecordsAffected;
//插入新的收入信息记录;
CString sql;
sql.Format("insert into income_info_tab(income_id,""income_date,income_type,money,""description) values(""%d,""to_date('%s','yyyy-mm-dd'),""'%s',%.2f,'%s')",id,strDate,txtType,m_dbIncomeMoney,m_strIncome);
TRACE(sql);
m_pConnection->Execute(_bstr_t(sql),&RecordsAffected,adCmdText);
//刷新ADO数据控件的数据,从而更新数据显示
m_adoIncomeDataCtrl.Refresh ();
InitControl();
}
catch(_com_error e)//异常处理;
{
AfxMessageBox(e.ErrorMessage());
AfxMessageBox("测试");
}
编译是能通过的,但是运行出来后操作就出现有“0x800A0E7D”这些字符的提示框,谢谢高手指教
void CAccountDBSSDlg::OnBtnIncomeAdd()
{
// TODO: Add your control notification handler code here if(!UpdateData())
return;
CString txtType = m_dcIncome.GetText();
if(txtType.IsEmpty()){
AfxMessageBox("类型不能为空");
return;
}
//获取收入时间;
CString strDate = m_oleIncome.Format("%Y-%m-%d");
try
{
// _RecordsetPtr m_pRecordset;
m_pConnection.CreateInstance(_uuidof(Connection)); //初始化Connection指针
m_pRecordset.CreateInstance("ADODB.Recordset");//初始化Recordset指针
m_pRecordset->Open("Select seq_income_id.NEXTVAL from dual",(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
int id = 1;
if(!m_pRecordset->adoEOF)
{
_variant_t TheValue;
//从系列中获取新的收入ID值;
TheValue = m_pRecordset->Fields->GetItem((short)0)->Value;
if(TheValue.vt != VT_NULL)
id = TheValue.iVal;
}
m_pRecordset->Close(); _variant_t RecordsAffected;
//插入新的收入信息记录;
CString sql;
sql.Format("insert into income_info_tab(income_id,""income_date,income_type,money,""description) values(""%d,""to_date('%s','yyyy-mm-dd'),""'%s',%.2f,'%s')",id,strDate,txtType,m_dbIncomeMoney,m_strIncome);
TRACE(sql);
m_pConnection->Execute(_bstr_t(sql),&RecordsAffected,adCmdText);
//刷新ADO数据控件的数据,从而更新数据显示
m_adoIncomeDataCtrl.Refresh ();
InitControl();
}
catch(_com_error e)//异常处理;
{
AfxMessageBox(e.ErrorMessage());
AfxMessageBox("测试");
}
编译是能通过的,但是运行出来后操作就出现有“0x800A0E7D”这些字符的提示框,谢谢高手指教
应用程序通过引用关闭或无效的 Connection 对象来请求对对象的操作。
可以检查一下连接后的返回码是否正常。
应用程序通过引用关闭或无效的 Connection 对象来请求对对象的操作。
---------------------------------
这个解释我也知道,可是就是找不出原因出在哪里了
我弄了好久,都没有成效:(
adOpenDynamic, adLockOptimistic, adCmdUnknown);
if (FAILED(hr = pRs->QueryInterface(__uuidof(IADORecordBinding),
(LPVOID*)&picRs)))
_com_issue_error(hr);
if (FAILED(hr = picRs->BindToRecordset(&rs)))
_com_issue_error(hr);
我在msdn中找到的,不知打是否正确。
请赐教:
)
{
// Initialize OLE libraries
SetDialogBkColor(RGB(0,200,200),RGB(255,0,0));
AfxEnableControlContainer();//初始化COM库
if (!AfxOleInit())
{
AfxMessageBox("OLE初始化出错");
return FALSE;
}
m_pConnection.CreateInstance(_uuidof(Connection));
try
{
m_pConnection.CreateInstance("ADODB.Connection");//创建Connection对象
_bstr_t strConnect="Provider=OraOLEDB.Oracle.1;Password=dbaccount;User ID=dbaccount;Data Source=ORADB;Persist Security Info=True";
//连接参数可以不需要用户ID或密码;
m_pConnection->Open(strConnect,"","",-1);
AfxMessageBox("欢迎使用家庭理财管理系统");
}
catch (_com_error e) //异常处理
{
AfxMessageBox(e.ErrorMessage());
}这个函数里调用了你好像没有调用m_pConnection.Open(...)。,应该没有什么问题了吧?可是程序操作还是会出错