工具VC++6.0  
数据库 Oracle 11g
我用CRecordset派生类 打开MYEMPWORK 这张表,开始的时候没数据, 然后向这张表添加数据,
表名:MYEMPWORK
字段:
  EMPNO: varchar2 20 char 主键 非空
  EMPNAME: varchar2 20 char   
  ONDUTYTIME varchar2 20 char
  OFFDUTYTIME varchar2 20 char
  (别叫我把ONDUTYTIME 和 OFFDUTYTIME 改成 data型, 现在改不了了....)具体代码:  ....
if( m_dutyRcset.IsOpen() )
{
m_dutyRcset.Close();
}m_dutyRcset.Open(CRecordset::dynaset, _T("Select * from MYEMPWORK"));
m_dutyRcset.Requery();if( m_dutyRcset.IsEOF() )
{
m_dutyRcset.SetFieldNull(NULL);
}if( !m_dutyRcset.CanAppend() )
{
AfxMessageBox("不能添加");
return ;
}m_dutyRcset.AddNew();
m_dutyRcset.m_EMPNO = onDutyMsg.strEmpNo;
m_dutyRcset.m_EMPNAME = onDutyMsg.strEmpName;
m_dutyRcset.m_ONDUTYTIME = onDutyMsg.strTime;
m_dutyRcset.m_OFFDUTYTIME = "";if( !m_dutyRcset.Update() )// Update()时发生Debug 错误
{
m_dutyRcset.Close();
return ;
}m_dutyRcset.Close();
  ....其中 onDutyMsg 是一个这样的结构体:
struct MsgDuty
{
char strEmpNo[21];
char strEmpName[21];
char strTime[21];
};
如果我不用记录集 ,而直接用CDatabase 类,使用SQL语句 不会出错!
如:(这和上面的代码不是同一个工程的)
CString str;
str.Format("insert into YSDUTY(EMPNAME,EMPNO,ONDUTYTIME) values('%s','%s','%s')",  
logins.log_strName, logins.log_strEmpNo, logins.log_strOnDutyTime);
g_DB.ExecuteSQL(str);
问题是关于用CRecordset类 向表里面添加数据 怎么才能不出错(不出像我那样的错误)...
注: 我看一个同学的代码 添加数据的步骤基本和我一样 ,只是他的表的字段有int类型,但是Update没有出错.
求大神解决。

解决方案 »

  1.   

    木有人么~? 今天有点晚了 ,明天来看结果哈!~ 这个问题我以前就出现过,但是在网上查资料一直没解决,没想到又出现了希望能有人给出点建设性的意见或建议. THX
      

  2.   


    执行代码以后 数据库表里面有我添加的数据 但是然后程序就这样了:Debug Error!
     ...
    DAMAGE: after Normal block(#479) at 0x014A9D08然后我调试:
     ORA-00001: 违反唯一约束条件(SCOTT.MYEMPWORK_PK)我刚把代码改了一下 加了
    try
    {
      上面的代码
    }
    catch(CDBException* pe)

      AfxMessageBox(pe->m_strError);
     pe->Delete();
     return ;
      

  3.   

    有点说错了:
     如果表里面没数据的时候 我运行直接Debug错误,
     虽然Debug错误,但是运行后表里面还是被插入了数据.
     
     如果我再次运行程序,就会有  ORA-00001: 违反唯一约束条件(SCOTT.MYEMPWORK_PK)
     这个错误
      

  4.   

    可能在VC++相关版块问比较好,这个问题和CRecordset类的关系很大,主要问题不在数据库上。至于报错违反约束,是因为新增的记录的EMPNO在原表中已经存在了
      

  5.   

    ......
    Loaded 'D:\Windows\System32\psapi.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\version.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\wininet.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\normaliz.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\iertutil.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\urlmon.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\dwmapi.dll', no matching symbolic information found.
    Loaded 'D:\Windows\winsxs\x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16661_none_420fe3fa2b8113bd\comctl32.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\bcrypt.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\bcryptprimitives.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\sqora32.dll', no matching symbolic information found.
    Loaded 'D:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\msvcr80.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oci.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\winmm.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraclient11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oracore11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oranls11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraunls11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orauts.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oracommon11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orasnls11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orageneric11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraxml11.dll', no matching symbolic information found.
    Loaded 'D:\Windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\msvcp80.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oran11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oranl11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orantcp11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oranldap11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orannzsbb11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraldapclnt11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orancrypt11.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\IPHLPAPI.DLL', no matching symbolic information found.
    Loaded 'D:\Windows\System32\winnsi.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orazt11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oranro11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oranhost11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orancds11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orantns11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraztkg11.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\secur32.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\sspicli.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orapls11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\ORASLAX11.DLL', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oravsn11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraplp11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orahasgen11.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\netapi32.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\netutils.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\srvcli.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\wkscli.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\logoncli.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\samcli.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraocr11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraocrb11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraocrutl11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\dbghelp.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oracell11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\orasql11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\oraplc11.dll', no matching symbolic information found.
    Loaded 'F:\app\yinshuai215\product\11.2.0\dbhome_1\BIN\sqresus.dll', no matching symbolic information found.
    Loaded 'D:\Windows\winsxs\x86_microsoft.vc80.mfc_1fc8b3b9a1e18e3b_8.0.50727.4053_none_cbf21254470d8752\mfc80.dll', no matching symbolic information found.
    Loaded 'D:\Windows\winsxs\x86_microsoft.vc80.mfcloc_1fc8b3b9a1e18e3b_8.0.50727.4053_none_03ca5532205cb096\mfc80CHS.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\mswsock.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\wship6.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\odbccp32.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\xunyount.dll', no matching symbolic information found.
    udpagent port 0Loaded 'D:\Windows\System32\dhcpcsvc.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\WSHTCPIP.DLL', no matching symbolic information found.
    Loaded 'D:\Windows\System32\security.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\dsrole.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\cryptsp.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\credssp.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\msv1_0.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\cryptdll.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\cscapi.dll', no matching symbolic information found.
    Loaded 'D:\Windows\System32\cryptbase.dll', no matching symbolic information found.
    The thread 0x458 has exited with code 0 (0x0).
    The thread 0x1264 has exited with code 3 (0x3).
    The thread 0x3C4 has exited with code 1 (0x1).
    memory check error at 0x01726C32 = 0x00, should be 0xFD.
    memory check error at 0x01726C33 = 0x00, should be 0xFD.
    The thread 0x17C0 has exited with code 0 (0x0).
    The thread 0x2D4 has exited with code 0 (0x0).刚才我又调试了一次 发现是Close()错误....太粗心了
    我一直单步跟踪....我自己都不知道到哪里去了。 
    void CRecordset::FreeRowset()
    {
    // Delete the rowset status
    delete [] m_rgRowStatus; // 是这个地方错误
    m_rgRowStatus = NULL; if (m_dwOptions & useMultiRowFetch &&
    !(m_dwOptions & userAllocMultiRowBuffers))
    {
    // Calling virtual function, DoBulkFieldExchange, here is bad
    // because Close then FreeRowset may get called from destructor.
    // There is no simple choice however if RFX_Bulk functions do
    // a memory allocation. The net result is that users MUST call
    // Close explicitly (rather than relying on destructor) if
    // using multi row fetches, otherwise they will get a memory leak.
    // If rowset already allocated, delete old rowset buffers
              ........