SQL> create procedure add_customer_info_tab(
2 param1 in customer_info_tab.customer_id%type,
3 param2 in customer_info_tab.name%type,
4 param3 in customer_info_tab.address%type,
5 param4 in customer_info_tab.code%type,
6 param5 in customer_info_tab.profession%type,
7 param6 in customer_info_tab.company%type,
8 param7 in customer_info_tab.email%type,
9 param8 in customer_info_tab.phone%type,
10 param9 in customer_info_tab.mobile%type,
11 param10 in customer_info_tab.meet_time%type,
12 param11 in customer_info_tab.memo%type
13 )as
14 begin
15 delete from customer_info_tab where customer_id=param1;
16 insert into customer_info_tab(customer_id,name,address,code,profession,comp
any,email,phone,mobile,meet_time,memo)values(param1,param2,param3,param4,param5,
param6,param7,param8,param9,param10,param11);
17 end;
18 /
过程已创建。
下面是添加操作的代码
void CCRDBSDlg::OnBtnCustomerAdd()
{
// TODO: Add your control notification handler code here
if(!UpdateData())
return;
if(m_strCustomerName.IsEmpty()){
AfxMessageBox("客户姓名不能为空");
return;
}
CString strDate=m_oleMeetDate.Format("%Y-%m-%d")
+" "+m_oleMeetTime.Format("%H:%M:%S");
try
{
m_pRecordset->Open("Select seq_customer_id.NEXTVAL from dual"
,(IDispatch*)m_pConnection,adOpenDynamic,adLockOptimistic,adCmdText);
int id=1;
if(!m_pRecordset->adoEOF)
{
_variant_t TheValue;
TheValue=m_pRecordset->Fields->GetItem((short)0)->Value;
if(TheValue.vt!=VT_NULL)
id=TheValue.iVal;
}
m_pRecordset->Close();
_variant_t vNULL;
vNULL.vt=VT_ERROR;
vNULL.scode=DISP_E_PARAMNOTFOUND;
CString sql;
sql.Format("call add_customer_info_tab(%d,'%s','%s','%s,'%s','%s','%s,'%s','%s',"
"to_date('%s','yyyy-mm-dd hh24:mi:ss'),"
"'%s')",id,m_strCustomerName,m_strAddress,
m_strCode,m_strProfession,m_strCompany,
m_strEmail,m_strPhone,m_strMobile,strDate,m_str_CustomerMemo);
TRACE(sql);
//利用命令对象完成sql命令的执行
m_pCommand->ActiveConnection=m_pConnection;
m_pCommand->CommandText=_bstr_t(sql);
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
InsertCustomerInfoItem(id,m_strCustomerName,m_strAddress,
m_strCode,m_strProfession,m_strCompany,
m_strEmail,m_strPhone,m_strMobile,strDate,m_str_CustomerMemo);
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
}
}
这是单击“添加”按钮时候的响应函数,我设断点调试,在执行完
m_pCommand->ActiveConnection=m_pConnection;
m_pCommand->CommandText=_bstr_t(sql);
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
之后,在往下执行就出现了一个对话框提示说“IDispatch error #3092”InsertCustomerInfoItem函数没有执行,执行了catch中的代码。查了一下MSDN,还是不懂。大虾们帮我看看,谢了。
补充:运行有一个警告:c:\documents and settings\李金探\桌面\myproject\debug\msado15.tlh(407) : warning C4146: unary minus operator applied to unsigned type, result still unsigned。
警告指向的代码
enum RecordCreateOptionsEnum
{
adCreateCollection = 8192,
adCreateStructDoc = -2147483648,
adCreateNonCollection = 0,//就是这里
adOpenIfExists = 33554432,
adCreateOverwrite = 67108864,
adFailIfNotExists = -1
};
4 个解决方案
#1
// 单步调试,看看什么错误
// 把ADO操作放到try{}catch(_com_error e){}块中
// 可以在catch块中打印 e.ErrorMessage()和e.Description()查看具体ADO错误
// 那个警告不用管,凡是ADO1.5编程都有那个警告。
// 把ADO操作放到try{}catch(_com_error e){}块中
// 可以在catch块中打印 e.ErrorMessage()和e.Description()查看具体ADO错误
// 那个警告不用管,凡是ADO1.5编程都有那个警告。
#2
我回去试试,上面调试的结果也就是我单步调试的结果了
#3
dddddd
#4
一、跟踪到
m_pCommand->CommandText=_bstr_t(sql)
将sql的内容直接到数据库管理器中执行一下,看是否SQL或存储过程有错
二、
看m_pConnection是否为NULL
三、
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
不用这么麻烦,直接
m_pCommand->Execute(NULL,NULL,adCmdText);
即可
我用自己封装的CAdoCommand测试过(WIN2003、VC6、MSSQL2005)
m_pCommand->CommandText=_bstr_t(sql)
将sql的内容直接到数据库管理器中执行一下,看是否SQL或存储过程有错
二、
看m_pConnection是否为NULL
三、
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
不用这么麻烦,直接
m_pCommand->Execute(NULL,NULL,adCmdText);
即可
我用自己封装的CAdoCommand测试过(WIN2003、VC6、MSSQL2005)
#1
// 单步调试,看看什么错误
// 把ADO操作放到try{}catch(_com_error e){}块中
// 可以在catch块中打印 e.ErrorMessage()和e.Description()查看具体ADO错误
// 那个警告不用管,凡是ADO1.5编程都有那个警告。
// 把ADO操作放到try{}catch(_com_error e){}块中
// 可以在catch块中打印 e.ErrorMessage()和e.Description()查看具体ADO错误
// 那个警告不用管,凡是ADO1.5编程都有那个警告。
#2
我回去试试,上面调试的结果也就是我单步调试的结果了
#3
dddddd
#4
一、跟踪到
m_pCommand->CommandText=_bstr_t(sql)
将sql的内容直接到数据库管理器中执行一下,看是否SQL或存储过程有错
二、
看m_pConnection是否为NULL
三、
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
不用这么麻烦,直接
m_pCommand->Execute(NULL,NULL,adCmdText);
即可
我用自己封装的CAdoCommand测试过(WIN2003、VC6、MSSQL2005)
m_pCommand->CommandText=_bstr_t(sql)
将sql的内容直接到数据库管理器中执行一下,看是否SQL或存储过程有错
二、
看m_pConnection是否为NULL
三、
m_pCommand->Execute(&vNULL,&vNULL,adCmdText);
不用这么麻烦,直接
m_pCommand->Execute(NULL,NULL,adCmdText);
即可
我用自己封装的CAdoCommand测试过(WIN2003、VC6、MSSQL2005)