CRecordSet 插入
'INSERT'
从错误的字面意思看的话,当然就是SQL 语句有语法错误,如果SQL语句INSERT附近有语法错误,那么也同样会报这样的错误,可是在有的时间,SQL语法是没有一点问题,但仍然会报出这样的让人不知所措的错误。代码片断如下: CodeSection: strSQL.Format("INSERT INTO LOG_Employee (Employee_Name, Employee_Sex, Employee_Duty, Employee_Tel, Employee_MobilePhone,Employee_Email, Employee_Remark,Department_Id) VALUES('%s', '%s', '%s','%s', '%s', '%s','%s', %d)", m_EmpName, strSex, m_EmpDuty, m_EmpTel, m_EmpMTel, m_EmpEmail, m_EmpRemark, DepartId); empSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL) ; strSQL用来保存格式化后的SQL语句,在这里,SQL语句是没有问题,有这方面经验的朋友可能这会儿已经注意到了问题的所在,但是对于像我一样的,半路出家的朋友来讲,或许就这一断小程序就能折腾你老半天。 那么问题究竟出在哪呢?问题就在:empSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)这条语句,大家要注意CRecordSet类中的Open方法。在执行不返回结果集的SQL语句是,不能使用CRecordSet类,而应该改用CDatabase::ExecuteSQL来执行。 修改后的正确代码片断如下: CodeSection: strSQL.Format("INSERT INTO LOG_Employee (Employee_Name, Employee_Sex, Employee_Duty, Employee_Tel, Employee_MobilePhone,Employee_Email,Employee_Remark,Department_Id) VALUES('%s', '%s', '%s', '%s', '%s','%s','%s',%d)",m_EmpName,strSex,m_EmpDuty,m_EmpTel,m_EmpMTel,m_EmpEmail,m_EmpRemark,DepartId); m_database.ExecuteSQL(strSQL);// 注意这里。不是使用empSet.Open()方法 所 对于不返回结果集的SQL语句,我们应该使用CDatabase::ExecuteSQL()来执行,如:删除(DELETE),插入(INSERT),更新(UPDATE). 对于需要返回结果集的SQL语句,我们需要使用CRecordSet::Open()方法来执行,如:查询(SELECT)。 |