难道真的没有人知道吗?请大家指点一下里边的一段程序为什么执行不下去。

freeghost 2002-01-17 11:33:23
CDatabase database;


database.Open(NULL,false,false,_T(ODBC;DRIVER={SQL Server};Server=Abc;DATABASE=zcg;UID=sa;PWD=),true);
//确定以上连接数据库可以成功

CRecordset recordset(&database);
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from printdata order by a1",CRecordset::readOnly);
...
...

请问这一段程序为什么在执行recordset.open时一直停在那里没有返回?该如何解决?
...全文
184 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
supperapplication 2002-01-18
  • 打赏
  • 举报
回复
BOOL CConnectDB::ConnectDatabase(CString Dsn, CString UID, CString PWD)
{
int dbConnect = 0;
m_pDatabase = new CDatabase;
sDsn = Dsn;
sUID = UID;
sPWD = PWD;
try
{
dbConnect = m_pDatabase->OpenEx("DSN="+sDsn+";UID="+sUID+";PWD="+sPWD+"",CDatabase::noOdbcDialog);
}
catch(CDBException* e)
{
dbConnect = 0;
e->Delete();
}
return dbConnect;
}


int dbConnect;
sqlStr = str;
m_pSet = new CRecordset(m_pDatabase);
try
{
dbConnect = m_pSet->Open(AFX_DB_USE_DEFAULT_TYPE,sqlStr,CRecordset::none);
}
catch(CDBException* e)
{
dbConnect = 0;
// MessageBox("连接记录集错误");
e->Delete();
}
return dbConnect;
}
你试试这一段代码/
freeghost 2002-01-18
  • 打赏
  • 举报
回复
你能把你的从数据库的打开,到表的打开贴给我看吗?还有没有别的什么特殊的设置呢,你的recs是怎么处理的。
robothn 2002-01-18
  • 打赏
  • 举报
回复
我的有15000000 条,照样跑的好,没索引太慢

sSqlString.Format("SELECT t856,t970,num FROM wopac.dbo.tt970 where book_id='%s' order by num",sTemp);

recs.Open(CRecordset::forwardOnly,sSqlString,CRecordset::readOnly);
freeghost 2002-01-18
  • 打赏
  • 举报
回复
不好意思是40个数据表。
freeghost 2002-01-18
  • 打赏
  • 举报
回复
我现在不要索引了,改这句话为。
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from printdata",CRecordset::readOnly);
也不行呀。
做计有40个数据库。每个数据库有上数千条记录呀。
robothn 2002-01-18
  • 打赏
  • 举报
回复
另外:确认a1 有索引
robothn 2002-01-18
  • 打赏
  • 举报
回复
你有多少条数据?
freeghost 2002-01-18
  • 打赏
  • 举报
回复
可是我的对象不只一个呀,有几十个。
freeghost 2002-01-18
  • 打赏
  • 举报
回复
可是怎么才能解决呢?
freeghost 2002-01-18
  • 打赏
  • 举报
回复
它提示说:
{"在调用 SQLFetchScroll/SQLExtendedFetch 之前列没有绑定数据列
"}
是这个错误。
eion 2002-01-17
  • 打赏
  • 举报
回复
不会
chasedreamer 2002-01-17
  • 打赏
  • 举报
回复
你可以先利用ClassWizard生成一个基于你将访问的表的一个CRecordset类,然后利用该类进行目标表的操作,这样非常方便。
乔乔公爵 2002-01-17
  • 打赏
  • 举报
回复
补充一句这是一个
MFC ODBC程序中的用法
乔乔公爵 2002-01-17
  • 打赏
  • 举报
回复
你这么写
if (m_pSet->Open(CRecordset::snapshot,NULL,CRecordset::readOnly))
{
//...
}
就成了
剩下的ORDER BY 什么的用上面的方法写
这样不就打开记录集了吗
anson_program 2002-01-17
  • 打赏
  • 举报
回复
今天在QQ教你的方法可以了吗?可以了吗?
kingchar 2002-01-17
  • 打赏
  • 举报
回复
是个问题!
你把打开的方式改一下也许有用!!如:CRecordset::dynaset
freeghost 2002-01-17
  • 打赏
  • 举报
回复
可是我把程序改成如下一句也不行呀。问题依旧。
recordset.Open(AFX_DB_USE_DEFAULT_TYPE,"select * from ",CRecordset::readOnly);
...
...
乔乔公爵 2002-01-17
  • 打赏
  • 举报
回复
SQL 语句写错了
如果要用ORDER BY 应这样写
recordset.m_strSort = "a1 DESC";
这样就行了,这就是排序记录集,而不是你那样写
你可以参考一下参数化记录集部分

例子
CMySet rs(NULL); // 创建记录集对象
//设置排序字符串
rs.m_strSort = "a1 DESC,a2 DESC";
//执行排序查询
rs.Open();



明白了吗?请参考MFC ODBC 部分
freeghost 2002-01-17
  • 打赏
  • 举报
回复
ji_hui(阿辉)
ado怎么用呀?用什么类?
freeghost 2002-01-17
  • 打赏
  • 举报
回复
我这一句在SQL Client 中执行没问题的。可以选出数据来,上面就是我的原程序了,这个函数中也就只有这几条语句。
加载更多回复(2)

16,551

社区成员

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

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

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