急ADO删除数据库数据的奇怪有关问题,请各位帮忙!调试运行发现赋值有关问题
急!ADO删除数据库数据的奇怪问题,请各位帮忙!调试运行发现赋值问题
用的是SQL2000数据库,现在有一个很奇怪的问题
原来tb_Department里面的DepartmentName里面有两个数据项marketing Department 和purchase Department
当我加入任意新数据 然后删除 只要是开头字母在m字母以前的数据 都可以正常删除 例如a开头 b开头 e开头的等等
可是只要在m之后的 例如n开头的 就删除失败 获取到的错误信息是IDispatch error #3092
急切盼望高手点拨 我用delete函数和sql命令都试过了 一样的错误
用的是DataGrid显示数据
try
{
CString strDep;
strDep=m_DataGrid1Control.GetItem(0);
CString strSQL;
strSQL.Format( _T("delete from tb_Department where departmentname='%s'"),strDep);
_bstr_t sqlSQL=strSQL;
_variant_t RecordsAffect;
m_pRecordset=m_pConnection->Execute(sqlSQL,&RecordsAffect,adCmdText);
m_DataGrid1Control.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_DataGrid1Control.Refresh();
}
刚刚调试运行 发现只要在m字母之后的数据 运行上面的删除命令 调试里面都是报
sqlSQL为{"delete from tb_Department where departmentname='marketing department'" (1)}
不知道为什么
------解决方案--------------------
1.dlgdata.cpp文件出错 ——工程中出现了异常的变量
2.IDispatch error #3092 ——SQL语句格式不当
3.VC向数据库中插入数据只能插入单个字符 ——应该是'%s'而不是'%S',前者代表字符串,后者代表单个字符。
4.IDispatch error #3127 ——检查表名是否写错
5.Unknown error 0x800A0E78 ——记录集指针的赋值出现问题,最好在遍历记录集之前对其重新赋值
6.表达式中的数据类型不匹配 ——SQL语句中的数字及null是不需要用单引号包含的,而字符串则是必不可少的,检查是否未遵循规则。
7.IDispatch error #3088 ——检查字段是否写错
------解决方案--------------------
你删除数据怎么还返回记录集呢?
记录集是在查询 select 的时候才有用的。
在你执行delete的时候直接使用
Execute(_bstr_t("delete from tb_Department where departmentname='%s'"),strDep), NULL, adExecuteNoRecords);
就可以了
------解决方案--------------------
用的是SQL2000数据库,现在有一个很奇怪的问题
原来tb_Department里面的DepartmentName里面有两个数据项marketing Department 和purchase Department
当我加入任意新数据 然后删除 只要是开头字母在m字母以前的数据 都可以正常删除 例如a开头 b开头 e开头的等等
可是只要在m之后的 例如n开头的 就删除失败 获取到的错误信息是IDispatch error #3092
急切盼望高手点拨 我用delete函数和sql命令都试过了 一样的错误
用的是DataGrid显示数据
try
{
CString strDep;
strDep=m_DataGrid1Control.GetItem(0);
CString strSQL;
strSQL.Format( _T("delete from tb_Department where departmentname='%s'"),strDep);
_bstr_t sqlSQL=strSQL;
_variant_t RecordsAffect;
m_pRecordset=m_pConnection->Execute(sqlSQL,&RecordsAffect,adCmdText);
m_DataGrid1Control.SetRefDataSource((LPUNKNOWN)m_pRecordset);
m_DataGrid1Control.Refresh();
}
刚刚调试运行 发现只要在m字母之后的数据 运行上面的删除命令 调试里面都是报
sqlSQL为{"delete from tb_Department where departmentname='marketing department'" (1)}
不知道为什么
------解决方案--------------------
1.dlgdata.cpp文件出错 ——工程中出现了异常的变量
2.IDispatch error #3092 ——SQL语句格式不当
3.VC向数据库中插入数据只能插入单个字符 ——应该是'%s'而不是'%S',前者代表字符串,后者代表单个字符。
4.IDispatch error #3127 ——检查表名是否写错
5.Unknown error 0x800A0E78 ——记录集指针的赋值出现问题,最好在遍历记录集之前对其重新赋值
6.表达式中的数据类型不匹配 ——SQL语句中的数字及null是不需要用单引号包含的,而字符串则是必不可少的,检查是否未遵循规则。
7.IDispatch error #3088 ——检查字段是否写错
------解决方案--------------------
你删除数据怎么还返回记录集呢?
记录集是在查询 select 的时候才有用的。
在你执行delete的时候直接使用
Execute(_bstr_t("delete from tb_Department where departmentname='%s'"),strDep), NULL, adExecuteNoRecords);
就可以了
------解决方案--------------------
- C/C++ code
try { CString strDep; strDep=m_DataGrid1Control.GetItem(0); CString strSQL; // 这里改成这样就可以了。 strSQL.Format( _T("delete from tb_Department where departmentname='%s'" " select @@error as ECount"),strDep); _bstr_t sqlSQL=strSQL; _variant_t RecordsAffect; m_pRecordset=m_pConnection->Execute(sqlSQL,&RecordsAffect,adCmdText); m_DataGrid1Control.SetRefDataSource((LPUNKNOWN)m_pRecordset); m_DataGrid1Control.Refresh(); }