急得生病了。我求您了。我给您跪下了。

Rose1234567890 2002-10-16 11:00:02
这样的存储过程。
CREATE PROCEDURE www
@sun1_1 char(10),
@sun2_1 char(10)
AS
insert into sun
(sun1,sun2)
values
(@sun1_1,@sun2_1)
GO
这样的代码。
procedure TForm1.Button1Click(Sender: TObject);
begin
storedproc1.Active:=false;
storedproc1.DatabaseName:='human';
storedproc1.StoredProcName:='www';
storedproc1.Active:=true;
storedproc1.Close;
storedproc1.Prepare;
storedproc1.ParamByName('@sun1_1').AsString:=edit1.Text;
storedproc1.ParamByName('@sun2_1').AsString:=edit2.Text;
storedproc1.ExecProc;
storedproc1.open;
datasource1.DataSet:=storedproc1;
dbgrid1.DataSource:=datasource1;
end;
运行后提示。
project Project1.exe raised exception class ENoResultSet with
message 'Error creating cursor handle'.
我该怎么办,这是一个很菜的问题。能给我一个清楚的答案吗。不
要敷衍了事。我刚学,帮帮忙吧?
急得生病了。
...全文
24 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuziran 2002-10-16
  • 打赏
  • 举报
回复
何必非要用TStoredProc呢
用Query很容易搞定的
Query.SQL.Text :='exec www :a,:b';
Query.Params[0].Value:=edit1.Text;
Query.Params[1].Value:=edit2.Text;
Query.ExecSQL;
//如果有返回集
Query.Open;
xuejinlong 2002-10-16
  • 打赏
  • 举报
回复
storedproc1.open; 去掉就没问题了。
lyyrw 2002-10-16
  • 打赏
  • 举报
回复
storedproc1.ParamByName('@sun1_1').value:=edit1.Text;
storedproc1.ParamByName('@sun2_1').value:=edit2.Text;
试试。
CloneCenter 2002-10-16
  • 打赏
  • 举报
回复
去掉 Open ,需要结果 DataSet ,需要重新 Select
juntaopeng 2002-10-16
  • 打赏
  • 举报
回复
呵。。。和我以前遇到的问提一模一样
这个不一定是程序代码有问提,可能和你表的结构其它方面有关的
BES 2002-10-16
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
begin
storedproc1.Active:=false;
storedproc1.DatabaseName:='human';
storedproc1.StoredProcName:='www';
storedproc1.Active:=true;

你沒有傳參數進去,設storedproc1.Active:=true;幹什麼?把它去掉
qtercel 2002-10-16
  • 打赏
  • 举报
回复
你的存储过程是对数据库更新还是返回结果集?如果是更新用storedproc1.ExecProc,否则用storedproc1.open,不能两个全写上。
日总是我哥 2002-10-16
  • 打赏
  • 举报
回复
CREATE PROCEDURE www
@sun1_1 char(10),
@sun2_1 char(10)
AS
insert into sun <-----------你使用的是Insert语句!!!所以下面只可以使用ExecProc,一旦使用ExecProc,它将没有数据集返回,所以你也没有必要设置它为别人的DataSet了!!
(sun1,sun2)
values
(@sun1_1,@sun2_1)
GO
这样的代码。
procedure TForm1.Button1Click(Sender: TObject);
begin
storedproc1.Active:=false;
storedproc1.DatabaseName:='human';
storedproc1.StoredProcName:='www';
storedproc1.Active:=true;
storedproc1.Close;
storedproc1.Prepare;
storedproc1.ParamByName('@sun1_1').AsString:=edit1.Text;
storedproc1.ParamByName('@sun2_1').AsString:=edit2.Text;
storedproc1.ExecProc;
//storedproc1.open;<-------去掉
//datasource1.DataSet:=storedproc1;<--没有数据集返回,这些代码没有必要了
//dbgrid1.DataSource:=datasource1;
end;

===============================================================
     ◆◆◆ CSDN查询助手,查询方便快捷 ◆◆◆

下载地址:
 http://CoolSlob.ifood1.com/Download/CSDNFinder.exe
 http://CoolSlob.8u8.com/Download/Tools/CSDNFinder.Slob[更名为.exe即可]
jinlong288 2002-10-16
  • 打赏
  • 举报
回复
把storedproc1.open;去掉就可以了。
爱编程的老五 2002-10-16
  • 打赏
  • 举报
回复
storedproc1.open;
datasource1.DataSet:=storedproc1;
dbgrid1.DataSource:=datasource1;
这三句是干什么用的??

5,392

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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