使用vc+odbc来操作ms-sql2000数据库在删除时出问题了CString strSql;
strSql="SELECT * FROM PIC WHERE 名称='"+KeyWord+"'";
if(IsOpen())
Close();
try{
Open(CRecordset::dynamic,strSql);
if(IsBOF()|IsEOF())
{
AfxMessageBox("没有找到要删除的数据");
return 0;
}
Delete();
return 1;
}
catch(CDBException *e)
{
e->ReportError();
e->Delete();
Close();
return 0;
}该代码在继承的CRecordset类中,每当执行到Open函数是,就会抛出“无效的描述符索引”这个错误,数据也无法被删除。
请问这是怎么回事啊?该怎么解决?

解决方案 »

  1.   

    strSql="SELECT * FROM PIC WHERE 名称='"+KeyWord+"'";这是什么?
      

  2.   

    错误原因应该是字段名称不正确。
    strSql="SELECT * FROM PIC WHERE 名称='"+KeyWord+"'";
    有字段名称是"名称"的么?
    KeyWord值是多少?什么类型?
      

  3.   

    strSql是sql命令名称 字段是varchar类型的
    KeyWord 是CString 类的KeyWord的值是外部调用是传进来的
    感觉没有什么问题,但不知道为什么就是有错
      

  4.   

    SELECT * FROM PIC WHERE 名称 = 'XXX'这一句在sql server中执行正不正常?
      

  5.   

    可以正常执行而且,如果我在vc中使用 
    SELECT * FROM PIC DELETE FROM PIC WHERE 名称='xxx'虽然也能删除数据,但一样会抛出  “无效的描述符索引” 这个错误
      

  6.   

    SELECT * FROM PIC DELETE FROM PIC WHERE 名称='xxx'
    有这样用的吗?
      

  7.   

    首先,我认为数据库字段名还是不要用中文;
    其次,strSql="SELECT * FROM PIC WHERE 名称='"+KeyWord+"'";中KeyWord的类型要注意;
    最后,把所有"xxx"变成_T("xxx")。
      

  8.   

    情况依旧我重做了个表格,字段用的是英文我发现,如果使用
    Open(CRecordset::dynaset,strSql);
    打开的时候,就能找到数据,但不能进行删除,提示说记录集只读但如果我使用
    Open(CRecordset::dynamic,strSql);
    打开的时候,,就会出错,提示 无效的描述符索引