存储过程:请教"语法错误或违反访问规则"是怎么回事啊?

sandian 2006-05-24 04:22:59
偶刚使用存储过程
数据库是sqlserver

create procedure st_addproduct
@pro_code varchar(50)
AS
insert into s_product(pro_code,pro_loger) values(@pro_code,2)
GO

在查询分析器中输入@pro_code的值可以得到正确的结果,即表s_product插入了一行.

在delphi的BitBtn1Click事件代码如下:

begin
u2_datamodule.DataModulesys.addSP.Close;
u2_datamodule.DataModulesys.addSP.ProcedureName:='st_addproduct1,1';
u2_datamodule.DataModulesys.addSP.Parameters.CreateParameter('@pro_code',ftstring,pdinput,50,'');
u2_datamodule.DataModulesys.addSP.Parameters.ParamByName('@pro_code').Value:=edit1.Text;
u2_datamodule.DataModulesys.addSP.Prepared;
u2_datamodule.DataModulesys.addSP.ExecProc;
end;
点击bitbtn1后出现对话框:project project1.exe raised exception class EOloException with message '语法错误或违反访问规则'.process stopped.Use Step or Run to continue.

网上搜索了好久,没找到解决的办法,请各位高手帮忙!谢谢!
...全文
323 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sandian 2006-05-25
  • 打赏
  • 举报
回复
我晕,可以了
u2_datamodule.DataModulesys.addSP.ProcedureName:='st_addproduct1,1';
这句应该是u2_datamodule.DataModulesys.addSP.ProcedureName:='st_addproduct1;1';
倒了
折磨了我两天...
ffg_alin 2006-05-25
  • 打赏
  • 举报
回复
就是要@pro_code这个参数
返回参数不管他
设置@pro_code的类型就好了
Rubi 2006-05-25
  • 打赏
  • 举报
回复
我以前碰见过那样的情况的
Rubi 2006-05-25
  • 打赏
  • 举报
回复
看看随风的吧,你直接设置存储过程名字,然后把值传给参数,不需要创建什么参数了,应该可以的,对了,你还要记得一点,在界面上的adoProcedure控件,你要把参数给点击出来
sandian 2006-05-25
  • 打赏
  • 举报
回复
ffg_alin(随风) :
我点击存储过程的图标,在他的属性中ProcedureName中选中存储过程名st_addproduct1;1后,点Parameters里面已经有两个参数了,一个就是@pro_code,还有个是@Return_Value
我试着把@pro_code从参数列表里删除,还是不行...
ffg_alin 2006-05-25
  • 打赏
  • 举报
回复
你点击存储过程的图标,在他的属性中ProcedureName中选中存储过程名st_addproduct1;1,在Parameters中点击参数设置起类型,然后在程序中写:
u2_datamodule.DataModulesys.addSP.Close;

u2_datamodule.DataModulesys.addSP.Parameters.ParamByName('@pro_code').Value:=edit1.Text;
u2_datamodule.DataModulesys.addSP.ExecProc;
sandian 2006-05-25
  • 打赏
  • 举报
回复
gwbasic(笑笑):
谢谢,不过也不行
还是那个错误'语法错误或违反访问规则',我郁闷了鸟
sandian 2006-05-25
  • 打赏
  • 举报
回复
谢谢楼上的,不过还是不行啊
我注销掉了u2_datamodule.DataModulesys.addSP.Parameters.CreateParameter('@pro_code',ftstring,pdinput,50,'');

出现错误 project project1.exe raised exception class EDatabaseError with message 'addSP:parameter '@pro_code' not found'.process stopped.Use Step or run to continue.

应该参数还是要的吧,但不知道'语法错误或违反访问规则'算是什么样的错误提示啊?
gwbasic 2006-05-25
  • 打赏
  • 举报
回复
u2_datamodule.DataModulesys.addSP.ProcedureName:='dbo.st_addproduct';
Rubi 2006-05-25
  • 打赏
  • 举报
回复
你这个存储过程如果存在,你就不要创建它的什么参数值,你直接用就可以了
Rubi 2006-05-25
  • 打赏
  • 举报
回复
begin
u2_datamodule.DataModulesys.addSP.Close;
u2_datamodule.DataModulesys.addSP.ProcedureName:='st_addproduct1,1';
u2_datamodule.DataModulesys.addSP.Parameters.ParamByName('@pro_code').Value:=edit1.Text;
u2_datamodule.DataModulesys.addSP.ExecProc;
end;
sandian 2006-05-25
  • 打赏
  • 举报
回复
顶的也送分啊,大家帮忙!

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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