SEG1:这是自定义函数,取得指定列光标所在处的单元值。
  CString CDataGrid::GetItem(int ColNum)
{
CColumns cols=GetColumns();// first get the set of columns
VARIANT v_ColNum,v_Value; v_ColNum.vt=VT_I2; //A 2-byte integer value is stored in iVal
v_ColNum.iVal=ColNum;  //give the integer value to int style.
CColumn col=cols.GetItem(v_ColNum);
v_Value=col.GetValue(); //get the value of the present column
return v_Value.bstrVal;  //turn the value into string style and return it}
        SEG2:  这是删除数据的代码。
void CStudentDlg::OnButtonDelete() 
{
CEditDelete dlg;
// TODO: Add your control notification handler code here
if(m_adodc.GetRecordset().GetEof()==1)
{
MessageBox("请选择要删除的数据");
return ;
}

if((MessageBox("是否删除当前记录","请确认",MB_YESNO))==IDYES)
{
CStudent stu;
stu.sql_delete(m_datagrid.GetItem(1));
RefreshData();
}

               SEG3:这是执行删除的代码
void CStudent::sql_delete(CString str)
{ ADOConn m_AdoConn;
m_AdoConn.InitDBConnect();
_bstr_t vSQL;
vSQL="DELETE FROM Students WHERE F2="+str;
m_AdoConn.ExecuteSQL(vSQL);
m_AdoConn.ExitConnect();
}
}
在查询分析器执行下面语句是可以成功删除的。
delete from Students
where F2='翟与'
表结构:列名:StuNum,F2,F3 (分别是学号,姓名,性别)           我的问题是:当我在SEG2代码里将GetItem(1)里参数换为0,SEG3里将F2换成StuNum,数据就删除成功
                若用上面那种,就提示“列名某某无效”,按我理解无非就是换一种删除方式而已啊,为何不能删掉?
          难道一定要根据关键字来删?我这里StuNum是主码。不知道是否此愿意,特此愿闻其详

解决方案 »

  1.   

    vSQL="DELETE FROM Students WHERE F2="+str;字符串要用单引号括起来哈,应该是vSQL="DELETE FROM Students WHERE F2=" + "'" + str + "'";
      

  2.   

    都是String类型,直接相加没错啊。而且如果是你说的那个错误,那对于StuNum来删除应该也不行的。
      

  3.   

    字符串在SQL语句中需要加单引号括起来。
      

  4.   

    单步调试一下
    把你程序中生成的sql语句考出来在查询分析器里执行
    看看报什么错
      

  5.   

    在SQL查询分析器中直接单步执行SEG3,把自定义取值的部分赋值试试有没有报错