急!ADO删除数据库数据的奇怪问题,请各位帮忙!调试运行发现赋值问题

SLEEPDANCER 2010-04-09 04:26:30
用的是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)}
不知道为什么
...全文
129 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SLEEPDANCER 2010-04-12
  • 打赏
  • 举报
回复
问题在另外的地方 结贴
Dingnifei123 2010-04-10
  • 打赏
  • 举报
回复
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();
}
zhaohongbo83 2010-04-10
  • 打赏
  • 举报
回复
你删除数据怎么还返回记录集呢?
记录集是在查询 select 的时候才有用的。

在你执行delete的时候直接使用
Execute(_bstr_t("delete from tb_Department where departmentname='%s'"),strDep), NULL, adExecuteNoRecords);
就可以了
SLEEPDANCER 2010-04-10
  • 打赏
  • 举报
回复
回楼上 我debug发现问题在前面就出现了
Dingnifei123 2010-04-10
  • 打赏
  • 举报
回复

strSQL.Format( _T("delete from tb_Department where departmentname='%s'"
" select @@error as ECount"),strDep);
//这样也不行吗?
// 不可能吧?!
SLEEPDANCER 2010-04-10
  • 打赏
  • 举报
回复
m_pRecordset->Delete(adAffectCurrent);
m_pRecordset->MovePrevious();
m_pRecordset->Update();
一开始我使用delete这个方法 直接删除当前行 但是不知道为何 也是在m之后的选项报错IDispatch error #3092
SLEEPDANCER 2010-04-10
  • 打赏
  • 举报
回复
CString CDataGrid::GetItem(int ColNum)
{
CColumns cols = GetColumns();
VARIANT v_ColNum, v_Value;
v_ColNum.vt = VT_I2;
v_ColNum.iVal = ColNum;
CColumn col = cols.GetItem(v_ColNum);
v_Value = col.GetValue();
return v_Value.bstrVal;
}
SLEEPDANCER 2010-04-10
  • 打赏
  • 举报
回复
谢谢各位 昨晚查错的时候发现在GetItem的时候出现了问题 获取不到当前的行的首项数据 GetItem函数有问题
我用的是微软自带的DataGrid
SLEEPDANCER 2010-04-10
  • 打赏
  • 举报
回复
楼上 你发的这个我也找到的
可是我的原帖里面也说了 一些数据可以删除 就是只要排在marketing department前的数据都可以删除 说明SQL语句没有错误啊
精锐掷矛手 2010-04-09
  • 打赏
  • 举报
回复
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 ——检查字段是否写错

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧