我开发一个数据库程序执行select * from 1没问题
但执行select fcjsl from 1 等语句就报(无效的描述器索引),部分代码如下:
CString strSQL1;
CDBVariant varValue1;
strSQL1.Format("select fcjsl from 1");
// strSQL1.Format("select * from 1");
m_database.Close();
m_database.Open(NULL,FALSE,FALSE,"1",FALSE);
CMyset m_recordset(&m_database);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL1);
但执行select fcjsl from 1 等语句就报(无效的描述器索引),部分代码如下:
CString strSQL1;
CDBVariant varValue1;
strSQL1.Format("select fcjsl from 1");
// strSQL1.Format("select * from 1");
m_database.Close();
m_database.Open(NULL,FALSE,FALSE,"1",FALSE);
CMyset m_recordset(&m_database);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL1);
m_database.Close();
m_database.Open(NULL,FALSE,FALSE,"1",FALSE);
CMyset m_recordset(&m_database);
// m_database.ExecuteSQL(strSQL1);
m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL1);
补全代码
VC用MFC ODBC
另外注意检查是不是fcjsl写错了。
如果还是不行,你检查一下那条语句到底执行了吗?如果执行了,并且系统没有给你报如"语法错误"或"数据库引擎....“值类的错误,那么。没办法了。我想估计是那条语句没有执行
给你一段代马看看:
void CWinApiView::OnCsCustomize()
{
//监测dao数据库对象的有效性,并在纪录集对象打开时关闭该记录集
if(!m_pDatabase->IsOpen())
return;
if(!m_pRecordset)
return;
if(m_pRecordset->IsOpen())
m_pRecordset->Close();
CCusomizeFind dlg;
if(dlg.DoModal()!=IDOK)
return;
//////////////////////////start///////////////////////////////////
CString strSql,str,str1,str2;
if(dlg.m_bSame==TRUE)//如果按"完全相等"来进行查询
strSql.Format("select * from winapi where WinApi函数名='%s'",dlg.m_strFunName);
else
{
str=dlg.m_strFunName+"*";
str1="*"+dlg.m_strFunName+"*";
AfxMessageBox(str);
if(dlg.m_bAscend==TRUE)//安升序
{
strSql.Format("select * from winapi where WinApi函数名 like '%s' or WinApi函数名 like '%s' order by WinApi函数名 ASC",str,str1);
//AfxMessageBox(strSql);
}
else//降序
strSql.Format("select * from winapi where WinApi函数名 like '%s' or WinApi函数名 like '%s' order by WinApi函数名 DESC",str,str1); } /////////////////////////////end/////////////////////////////
m_pRecordset->Open(dbOpenDynaset,strSql);
ListRecord(); //显示纪录
m_pRecordset->Close();
}