代码如下:
//写access数据库
long CSysLog::WriteAccessLog(SysLogInfo logInfo)
{

CString strSQL;
_variant_t vtEmpty;
try
{
if (blnConnectDB) 
{
strSQL.Format("Insert into Syslog (USERID,SUBSYSNAME,EXECDEPT,ACTION,INFORMATION) values('%s','%s','%s','%s','%s')",logInfo.USERID,logInfo.SUBSYSNAME,logInfo.EXECDEPT,logInfo.ACTION,logInfo.INFORMATION);
m_adoAccessCN->Execute(strSQL.GetBuffer(),&vtEmpty, adCmdUnknown);
}
}
catch(_com_error &e)
{
                  ::MessageBox(NULL,e.Description,"错误提示")
return 1;
} }
excute时掉进catch中,提示时insert into语句有错误,但我把strSQL抓出来在access中执行确没有问题,这段代码操作oracle数据库也没有问题,不知道哪里错了

解决方案 »

  1.   

    strSQL.Format("Insert into Syslog (USERID,SUBSYSNAME,EXECDEPT,ACTION,INFORMATION) values(\'%s\',\'%s\',\'%s\',\'%s\',\'%s\')",logInfo.USERID,logInfo.SUBSYSNAME,logInfo.EXECDEPT,logInfo.ACTION,logInfo.INFORMATION);
    在替换符号里加"\"
      

  2.   

    找不出原因,又来用recordset和fields做了,一个一个赋值就没有问题了
      

  3.   

    ACTION 是关键字,改成 [ACTION] 试试:strSQL.Format("Insert into Syslog (USERID,SUBSYSNAME,EXECDEPT,[ACTION],INFORMATION) values('%s','%s','%s','%s','%s')",logInfo.USERID,logInfo.SUBSYSNAME,logInfo.EXECDEPT,logInfo.ACTION,logInfo.INFORMATION);
      

  4.   

    字段名用[]括起来。
    另外,m_adoAccessCN是否正确创建了。