高手看过来,问了三天了 odbc问题

moisse 2001-04-23 03:55:00
_____________________________________________________________________________________________-__
Apr.23.2001
source code:
try
{
short index=0;
mySet.GetFieldValue(index, varValue);
}
catch( CDBException* e )
{
TCHAR szCause[255];
e->GetErrorMessage(szCause, 255);
cout<<"error:"<<szCause<<end
}
异常讲:无效的描述符索引
我跟踪进去发现在GetFieldValue()函数调用GetData()函数时的
AFX_ODBC_CALL(::SQLGetData(hstmt, nFieldIndex,nFieldType, pvData, nLen, &nActualSize))
抛出的,而且其他CRECORDSET类的函数都可以正确的调用

有何建议
...全文
1911 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
hp1200 2001-07-29
  • 打赏
  • 举报
回复
up
mmhhj 2001-04-23
  • 打赏
  • 举报
回复
my email:mmhjh@263.net
mmhhj 2001-04-23
  • 打赏
  • 举报
回复
从现象上上分析应该是没有足够的结果集返回造成的。也就是说比如在你调用OPenEx之后你希望 返回8列
数据,然而可能一列也没有,这时调用GetFieldValue当然回出错。建议你最好先定义一个CDatabase对象连接到ODBC然后定义一个CRecordset对象
将m_pDatabase指向前者,然后调用在OpenEx函数中加入你想要的SQL语句,一般来说不会出问题。
另外调用GetFieldvalue最好不要用数字而用有意义的字符串段名.
good luck
moisse 2001-04-23
  • 打赏
  • 举报
回复
anyone can help me?
moisse 2001-04-23
  • 打赏
  • 举报
回复
source code:
//my code begin

CDBVariant varValue;
CDatabase db;
db.OpenEx( _T( "DSN=CSelectData;UID=dsfsdwap;PWD=weweap" ),
CDatabase::noOdbcDialog );
SelectSet mySet(&db);
mySet.Open();
if(mySet.IsOpen())
cout<<"succeed open"<<endl;
short nFields = mySet.GetODBCFieldCount( );
cout<<nFields<<endl;
if( mySet.IsBOF( ) )
return nRetCode; // The recordset is empty

mySet.MoveFirst();
if(!mySet.IsFieldNull(NULL))
cout<<"not empty"<<endl;
mySet.MoveNext();
if(!mySet.IsEOF())
{
cout<<"have enter"<<endl;
try
{
short index=8;
mySet.GetFieldValue(index, varValue);
}
catch( CDBException* e )
{
TCHAR szCause[255];
e->GetErrorMessage(szCause, 255);
cout<<"error:"<<szCause<<endl;
}

}
else
{

mySet.MoveLast( );
mySet.MoveFirst( );
}
mySet.Close();

//my code end


sunqi 2001-04-23
  • 打赏
  • 举报
回复
sorry ,你有说了无效的描述符索引
但这个错误应该就是eof引起的,要不把相关代码贴上来?
sunqi 2001-04-23
  • 打赏
  • 举报
回复
我是说你程序引起的m_strError字符串内容。
moisse 2001-04-23
  • 打赏
  • 举报
回复
CDBException::m_strError
Remarks

Contains a string describing the error that caused the exception. The string describes the error in alphanumeric terms. For more detailed information and an example, see m_strStateNativeOrigin.

sunqi 2001-04-23
  • 打赏
  • 举报
回复
e->m_strError是啥?
moisse 2001-04-23
  • 打赏
  • 举报
回复
定义了,
声明;本程序已经通过编译,本程序部分功能也已经实现,仅仅是这里有毛病我才抛出异常的
moisse 2001-04-23
  • 打赏
  • 举报
回复
拜托,有没有其他建议?
sunsong 2001-04-23
  • 打赏
  • 举报
回复
你不会没定义varValue吧?
CDBVariant varValue;
sunqi 2001-04-23
  • 打赏
  • 举报
回复
写错了拉
if(!mySet.IsEOF())
moisse 2001-04-23
  • 打赏
  • 举报
回复
没有可能的我有 if(!mySet.IsEOF)
sunqi 2001-04-23
  • 打赏
  • 举报
回复
是不是eof了?
moisse 2001-04-23
  • 打赏
  • 举报
回复
我index用1,2,3,4,5。。。untill maxlength都是同样的毛病
pyhjy 2001-04-23
  • 打赏
  • 举报
回复
有时index不能为零,可以用字段名代替

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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