PDA

View Full Version : سوال: ثبت رکورد با کمک SP



آوا123
دوشنبه 18 خرداد 1388, 20:33 عصر
با سلام
دوستان اگه ممکنه اشکال منو در ثبت رکورد زیر بگید.
فرض کنید یه Table داریم با دو فیلد id و name .در sql یه Stored Procedure ساختم واسه insert کردن
CREATE PROCEDURE sp_test_insert
@p1 char(10),
@p2 nvarchar(20)

As

begin
insert into T_Person (id,name)
values (@p1,@p2)
end
GO در دلفی هم از Ado command استفاده کردم و کد زیر رو نوشتم :

with ADOCommand1 do
begin
Connection:=ADOConnection1;
CommandType:=cmdStoredProc;
Parameters.ParamValues['@p1']:=Edit1.Text;
Parameters.ParamValues['@p2']:=Edit2.Text;
CommandText:='sp_test_insert' ;
Prepared:=true;
sp_test نام پروسی جر و@p1,@p2 نام پارامتر ها می باشد که از نوع string هستند. با انجام کارهای با فوق رکوردی برای من ثبت نمیشه.چرا؟

adinochestva
دوشنبه 18 خرداد 1388, 20:52 عصر
try :


with ADOCommand1 do
begin
Connection := ADOConnection1;
CommandType:= cmdStoredProc;]
Parameters.ParamValues['@p1']:=edit1.Text;
Parameters.ParamValues['@p2']:=edit2.Text;
CommandText:=sp_test;
Prepared:=true;
Execute;
end

آوا123
دوشنبه 18 خرداد 1388, 23:46 عصر
کار بالا رو انجام دادم یعنی Execute رو اضافه کردم اما error زیر رو گرفت:
Procedure sp_test_insert expect parameter @p1 which was not supplied

zman123456
سه شنبه 19 خرداد 1388, 08:50 صبح
فکر می کنم باید برای sp تعیین کنید که متغیرها از چه نوعی هستن.input یا عادی

آوا123
سه شنبه 19 خرداد 1388, 18:01 عصر
Input رو باید قبل متغیر ها قرار بدم؟؟؟ میشه در مورد Syntax راهنمایی کنید

zman123456
پنج شنبه 21 خرداد 1388, 08:36 صبح
SyntaxCREATE PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ]

آوا123
پنج شنبه 21 خرداد 1388, 10:28 صبح
متاسفانه بازم نشد فقط یه رکورد ثبت شد که مقادیر قیلدهای ان input , input می باشد.

bmanfy
جمعه 22 خرداد 1388, 19:08 عصر
با سلام .
فکر میکنم مشکل از اینجا باشه که :
که شما باید ابتدا پارامتر ها رو با دستور CreateParametr بسازید . بعد مقدار دهی و .....
اگر امکانش هست یه نمونه از برنامتون بزارید . فکر میکنم زودتر به نتیجه برسید .

آوا123
جمعه 22 خرداد 1388, 19:20 عصر
راستش من تا حالا از create param استفاده نکردم کد رو به صورت زیر بنویسم درسته ؟

Parameters.CreateParameter(ftstring,'@p1', ptInput):=edit1.text;

شما یه فرم در نظر بگیر به دو تا Edit و یه btn .فعلا چیزه دیگه ایی نداره که بخوام نمونه قرار بدم :چشمک:

shervin farzin
جمعه 22 خرداد 1388, 20:26 عصر
سلام
چون شما مايليد در زمان RunTime به SP متصل بشيد بايد پارامترهاي مورد نياز SP رو هم خود
شما Create كنيد . به اين ترتيب كدي كه در سمت دلفي بايد داشته باشيد به اين صورته :

with ADOCommand1 do
begin
Connection:=ADOConnection1;
CommandType:=cmdStoredProc;
CommandText:='sp_test_insert';
Parameters.CreateParameter('@p1',ftString,pdInput, 10,edit1.text);
Parameters.CreateParameter('@p2',ftString,pdInput, 20,edit2.Text);
Execute;
end;

موفق باشيد .

zman123456
شنبه 23 خرداد 1388, 09:11 صبح
من تو برنامم از sp به این شکل استفاده کردم که مقادیر ورودی هم می گیره.



SP_Ziro_Morekhasi.Parameters[1].Value:=Strtoint(E_Month.Text);
SP_Ziro_Morekhasi.Parameters[2].Value:=DM.mYear;
SP_Ziro_Morekhasi.ExecProc;

آوا123
شنبه 23 خرداد 1388, 20:48 عصر
درست شد خیلی ممنون.فقط میتونم بپرسم 10 و 20 واسه چیه؟؟

shervin farzin
شنبه 23 خرداد 1388, 22:57 عصر
سلام

فقط میتونم بپرسم 10 و 20 واسه چیه؟؟
10 و 20 مقدار Size براي متغييرهاي P1 و P2 هستند ، همونطور كه شما اونها رو در SP تعريف كرديد .
موفق باشيد .