PDA

View Full Version : سوال: ارور not found در رابطه با پارامتر در sp



Yalda2005
دوشنبه 29 تیر 1388, 16:19 عصر
می خواستم ببینم کسی می دونه چرا من اروری دارم مبنی بر این که پارامتری که برای یک sp در sql می فرستم ، پیدا نمی کند . :اشتباه:

پروسیجر من در sql :



ALTER PROCEDURE [dbo].[ins](@stdno int,@stdname nvarchar(30), @stdfamily nvarchar(30), @stdcity nvarchar(30) ,@clgno int) AS BEGIN insert into stdinfo values (@stdno ,@stdname, @stdfamily , @stdcity ,@clgno) END


و فراخوانی :



with Adostoredproc1 do Begin Parameters.Clear; Parameters.CreateParameter('@stdno',ftWideString,p dInput,7,'start'); Parameters.ParamByName('@stdno').Value:=trim(eno.T ext); Parameters.ParamByName('@stdname').Value:=trim(ena me.Text); Parameters.ParamByName('@stdfamily').Value:=trim(e family.Text); Parameters.ParamByName('@stdcity').Value:=trim(eci ty.Text); Parameters.ParamByName('@clgno').Value:=trim(comoc lg.Text); ExecProc; End;


ممنون می شم کمکم کنید

Yalda2005
دوشنبه 29 تیر 1388, 17:23 عصر
کسی نیست بهم کمک کنه ؟؟؟؟

حمیدرضاصادقیان
دوشنبه 29 تیر 1388, 23:41 عصر
سلام یلدا خانم.شما اومدی پارامتر اولی رو فقط ایجاد کردی.پس مابقی پارامترها کجا هستند که شما داری بهش مقدار میدی؟؟
از این کد استفاده کن.


parameters.add.name:='stdno'
,...

شما به ازای هر 5 تا پارامتری که داری این کد رو بنویس.
بعد برای اینکه مطمئن هم باشی sp درسته در query analyzer یکبار اونو صدا کن و بهش مقدار بده ببین کار میکنه یا نه.
موفق باشید.

vcldeveloper
سه شنبه 30 تیر 1388, 02:33 صبح
در دلفی برای تعریف پارامتر در کد SQL باید از پیشوند : استفاده کنید، نه @؛ پس باید مثلا اینطوری بنویسید:


ALTER PROCEDURE [dbo].[ins](:stdno int,:stdname nvarchar(30), :stdfamily nvarchar(30)...

Yalda2005
سه شنبه 30 تیر 1388, 11:12 صبح
با تشکر از راهنمائی هاتون مشکلم با این ارور حل شد به این صورت که بقیه ی پارامترهام رو هم در دلفی ایجاد کردم اما مشکل دیگه ئی که حالا دارم اینه که این ارور رو می ده :



procedure or function has too many arguments specified


کد فراخوانی :



with Adostoredproc1 do
Begin
// Parameters.Clear;
Parameters.CreateParameter('@stdno',ftWideString,p dInput,7,'');
Parameters.ParamByName('@stdno').Value:=trim(eno.T ext);
Parameters.CreateParameter('@stdname',ftWideString ,pdInput,7,'');
Parameters.ParamByName('@stdname').Value:=trim(ena me.Text);
Parameters.CreateParameter('@stdfamily',ftWideStri ng,pdInput,7,'');
Parameters.ParamByName('@stdfamily').Value:=trim(e family.Text);
Parameters.CreateParameter('@stdcity',ftWideString ,pdInput,7,'');
Parameters.ParamByName('@stdcity').Value:=trim(eci ty.Text);
Parameters.CreateParameter('@clgno',ftWideString,p dInput,7,'');
Parameters.ParamByName('@clgno').Value:=trim(comoc lg.Text);
ExecProc;
End;


sp :



set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[sp_ins_std]
@stdno int,
@stdname nvarchar(30),
@stdfamily nvarchar(30),
@stdcity nvarchar(30) ,
@clgno nvarchar(30)
AS
BEGIN
declare @MyVar int
set @MyVar =(select clgno from clginfo where clgname=@clgno)
if @MyVar<>0
begin
insert into stdinfo
values (@stdno ,@stdname, @stdfamily , @stdcity ,@MyVar)
end

END


با تشکر

Yalda2005
سه شنبه 30 تیر 1388, 19:37 عصر
خودم فهمیدم . محض اطلاع دیگرانی که روزی ممکنه گیر کنن می گم که یکی از دلایل این ارور اینه که شما باید برای هر بار اجرا حتما پارامترها رو clear کنید .