sql.Format("insert into tbkind(name,value) values(%s,%s)",name,s);
pRec->Open((_variant_t)sql,(_variant_t)pConn,adOpenStatic,
adLockOptimistic,adCmdText);
我用如上语句不能插入记录,为什么?
有的地方不写(_variant_t)sql而只写sql,这里若不写的话就提示错误,不知道为什么?请各大夹帮忙看一看
沒寫過ADO的程序,但是記得在ODBC中用Insert語句插入數據時,用CDatabase比用CRecordset好一些吧.我還在學習數據庫編程,大家有興趣的話,探討一下
你的这个sql又不返回结果集的,干吗用_RecordsetPtr
用 pConn-> ExcSQL z之类的
_variant_t RecordsAffected;
m_pConn->Execute(sql,&RecordsAffected,adCmdText);
我一般是用
CString m_SqlStr;
mSqlStr.Format(....);
m_Conn->Execute(m_SqlStr.AllocSysString(),NULL,adCmdText);
m_pConn->Execute(szSQL,NULL,adCmdText|adExecuteNoRecords);
哪句出错?Execute?错误是什么?
可以用
try
{
pConn->Execute(....);
}
catch(_com_error &e)
{
CString m_err;
m_err = e.ErrorMessage(); //好像是这个
AfxMessageBox(m_err);
}
看看能不能捕到错误
你可以先进行DEBUG,把sql的内空取出来,然后在Sql的查询分析器中(如果你用的是Sql Server)或其他数据库的相应工具中执行一下,先确认一下你的当前要执行的Sql语句是对的
有没有在查询分析器等地运行过,有时语法对不一定执行就对,比如说建立了各个约束的表进行相应的操作时会失败等。
DeleteString
看看我写的,我直接用connection对象执行sql语句的,环境和你差不多,access数据库,98,2000都运行过没问题的。
//生成插入记录的SQL字符串
CString strNum;
CString cmd1=""; //字符串过长,需要连接两个CString对象
CString cmd="Update Measure Set ";
cmd+="[StartX]=" + m_StartX + ", ";
cmd+="[StartY]=" + m_StartY + ", ";
cmd+="[EndX]=" + m_EndX + ", ";
cmd+="[EndY]=" + m_EndY + ", ";
cmd+="[LenPixel]=" + m_Pixel + ", ";
cmd+="[LenMM]=" + m_mm + ", ";
cmd+="[LenInch]=" + m_Inch + ", ";
cmd+="[AreaRectPixel]=" + m_AreaRect_Pixel + ", ";
cmd+="[AreaRectMM]=" + m_AreaRect_MM + ", ";
cmd+="[AreaRectInch]=" + m_AreaRect_Inch + ", ";
cmd1+="[AreaCirPixel]=" + m_AreaCir_Pixel + ", ";
cmd1+="[AreaCirMM]=" + m_AreaCir_MM + ", ";
cmd1+="[AreaCirInch]=" + m_AreaCir_Inch + ",";
COleDateTime current;
current = COleDateTime::GetCurrentTime();
cmd1+="[SaveDate]=" + current.Format("%Y-%m-%d %H:%M:%S") + " ";
strNum.Format("%d",m_ID);
cmd1+="Where ID=" + strNum;
//插入记录
m_pConnection->Execute((_bstr_t)(cmd+cmd1),NULL,adCmdText);
呵呵,多给点分于我噢
sql.Format("insert into tbkind(name,value) values(%s,%s)",name,s);
pRec->Open((_variant_t)sql,(_variant_t)pConn,adOpenStatic,
adLockOptimistic,adCmdText);
要想写入数据,就用_RecordsetPrt的Open()
我在程序里是这样用的
strsql="select语句"
pRs->Open(strsql,pConn.GetInterfacePtr,动态集,悲观锁定,adCmdText);
commandText="Insert语句"
pCommand->Execute(NULL,NULL,-1);