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)
;//empSet是从CRecordSet中派生的结果集 当运行上面的代码时,会出现在关键 'INSERT' 附近有语法错误。未能准备语句这样的提示信息 .
    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()方法
有在使用ODBC操作数据库时,需要注意:

对于不返回结果集的SQL语句,我们应该使用CDatabase::ExecuteSQL()来执行,如:删除(DELETE),插入(INSERT),更新(UPDATE). 对于需要返回结果集的SQL语句,我们需要使用CRecordSet::Open()方法来执行,如:查询(SELECT)。

转载于:https://www.cnblogs.com/jcss2008/archive/2009/01/20/1379060.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值