我测试过,象这样写是可以的:
CREATE PROCEDURE aa AS
select*from atable但是象这样就错了:
CREATE PROCEDURE aa AS
insert into atable values(2)
select*from atable
仅仅添加了一条记录,VC用ADO调用时
strcpy(sql,"aa");
try
{
hr = m_rs->Open((_bstr_t)(sql),m_cn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdStoredProc);
while(!m_rs->EndOfFile)//这儿错了,提示"对象关闭时,不能操作"
{
vFieldValue=m_rs->GetCollect("AlarmName");
strcpy(sql,(char*)_bstr_t(vFieldValue));
m_rs->MoveNext();
}
}
catch(_com_error e){
strcpy(sql,e.Description());
}atable只一个字段,没任何限制.
谁知道为什么呀?
在VB里用ADO这样调用很正常呀.
CREATE PROCEDURE aa AS
select*from atable但是象这样就错了:
CREATE PROCEDURE aa AS
insert into atable values(2)
select*from atable
仅仅添加了一条记录,VC用ADO调用时
strcpy(sql,"aa");
try
{
hr = m_rs->Open((_bstr_t)(sql),m_cn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdStoredProc);
while(!m_rs->EndOfFile)//这儿错了,提示"对象关闭时,不能操作"
{
vFieldValue=m_rs->GetCollect("AlarmName");
strcpy(sql,(char*)_bstr_t(vFieldValue));
m_rs->MoveNext();
}
}
catch(_com_error e){
strcpy(sql,e.Description());
}atable只一个字段,没任何限制.
谁知道为什么呀?
在VB里用ADO这样调用很正常呀.
解决方案 »
- microsoft web browser控件怎么样禁止右键菜单?
- 线程安全问题。
- 请问在MFC的线程中如何使用控件的成员变量?
- 请教保存图片到数据库的问题,回答的都给分!
- 巨难问题:如何通过运行期间动态定义函数指针,来实现变参的dll调用?
- 在修改DLL时候遇到一个问题:新编译的DLL拷贝到运行目录下用EXE调用运行时提示:无法定位程序输入点与:xxx在xxx.dll上.
- 如果一个线程把自己的 HANDLE 给 Close 掉了会有什么后果?
- Visual C++用户体验调查
- 如何计算某一天是该年的第几个星期?
- ****谁用ibm viavoice作过二次开发****,请谈谈经验
- 用什么方法可以获得用户名称
- vc中控件窗口怎么调出来??
判断一下 hr为多少,是否open成功.
跟数据库应该没关系.
你使用什么数据库呢?
应该是存储过程写错了,没有定义返回记录。oracle的如下:
create or replace package aa is
type curtype is ref cursor;
procedure go(retcur out curtype);
end aa;
/
create or replace package body aa is
procedure go(retcur out curtype)is
strsql varchar2(2000);
begin
strsql := 'insert into atable values(2)';
execute immediate strsql;strsql := 'commit';
execute immediate strsql;open retcur for
select*from atable;end go;
end aa;
/参考:http://www.cnxuexi.com/computer/chengxusheji/shujuku/4368.htmlms sql server应该这样吧
CREATE PROCEDURE dbo.aa
as
set nocount on
begin
insert into dbo.atable values(2)
select*from dbo.atable
end
go
参考:
http://dev.yesky.com/web/42/2261542.shtmloracle的我写过类似代码,不过ms sql server的没有写过。见谅!
在存储过程中,象create table返回了记录集,而且连insert into语句也返回了记录集,不过该记录集得一种特别的记录集(没有字段,不能对该记录集进行任何操作), OLEDB和ODBC存在一个很大的差别,向odbc取记录集时,odbc过滤了上面所称的特殊记录集(那种只占位置但不能进行任何操作的记录集——多由create table或insert into产生),而向oledb取记录集时,oledb并没有将特殊记录集过滤。所以在使用存储过程返回记录集时,在不希望返回记录的地方,应该使用set nocount on禁止存储过程返回记录集。
你使用的是ADO,是基于oledb的,所以需要设置一下。
http://down.dvbbs.net/InfoView/Article_2926.html