PDA

View Full Version : سوال: صدا زدن SP دارای خروجی در دلفی !



ali_kolahdoozan
دوشنبه 14 بهمن 1392, 09:28 صبح
سلام،

من دلفی بلد نیستم و با NET. کار میکنم . الان به سورسی نیاز دارم که بتوانم یک Stored Procedure را که خروجی هم دارد دلفی صدا بزنم و خروجی را بگیرم . آیا کسی کمکی میتواند بکند ؟


با تشکر

hp1361
دوشنبه 14 بهمن 1392, 12:00 عصر
سلام

این نمونه کدیه که من با مجموعه کامپوننت FireDac انجام دادم. فک میکنم واضح باشه. هرجاشو متوجه نشدی بپرس


with ADStoredProc_Pcc do
try
Close;
StoredProcName := 'INSERT_NEW_LOGCONNECTION';
FetchOptions.Items := FetchOptions.Items - [fiMeta];
Params.Clear;
Params.Add('SESSIONID', ftInteger, 0, ptInput);
Params.Add('IP', ftWideString, 15, ptInput);
Params.Add('USERNAME', ftWideString, 20, ptInput);
Params.Add('CONNECTDATETIME', ftDateTime, 0, ptInput);
Params.Add('RESULT', ftInteger, 0, ptOutput);
ParamByName('SESSIONID').AsInteger := MySession.Id;
ParamByName('IP').AsWideString := DSConnectEventObject.ChannelInfo.ClientInfo.IpAddr ess;
ParamByName('USERNAME').AsWideString := MySession.UserName;
ParamByName('CONNECTDATETIME').AsDateTime := Now;
Prepare;
ExecProc;
ConnectionID := IntToStr(ParamByName('RESULT').AsInteger);
MySession.PutData('CONNECTIONID', ConnectionID);
except
on E: System.SysUtils.Exception do
begin
//
end;
end;


در این خط من دارم نتیجه رو استفاده میکنم

ConnectionID := IntToStr(ParamByName('RESULT').AsInteger);


موفق باشیم

یوسف زالی
دوشنبه 14 بهمن 1392, 13:34 عصر
سلام.
برای گرفتن خروجی از SP سه تا راه دارید:
1- استفاده از SP به عنوان دیتاست، که همون سلکت خودمونه، در اینجا SP نقش کوئری رو بازی می کنه، باید Close و Open استفاده بشه.
2- استفاده از پارامتر Return_Value@ که بصورت پیش فرض همه SP ها دارند، نوع این دیتا عددی است و در SP با Return کردن فرستاده می شود. با هر دو متد Open و Execute کار می کنه.
3- استفاده از پارامتر های خروجی یا همون Output که نمونش رو در بالا دیدید.
4- استفاده از دستور Print در اس پی و گرفتن خروجی اون در دلفی

نکته: می تونید بیش از یک مقدار، در روش های 1 و 3 و 4 رو با تنها یک بار اجرا از اس پی بفرستید و در دلفی بگیرید.

firststep
دوشنبه 14 بهمن 1392, 18:18 عصر
سلام فکر کنم چون شما .net بودید دوست عزیزمون اینشکلی گفتش
شما ado connection رو بزارید روی فرمتون
connectione string اش رو تنظیم کنین
active اش کنین
adostoreprocedure رو روی فرم قرار بدین
connection رو نتظیم کنین
نام sp رو درون لیست procedurename پیدا و انتخاب کنینن به محض انتخاب تمامی پارامترها درون خصوصیت parametrs ساخته می شوند می تونید ببینیدشون یکی شون @result_value همان طور که یوسف جان درون متد دومیشون عرض کردن خدمتتون


حالا فقط کافی اول مقدارشون رو بدین و بعد execute کنین( البته اگر جدولی در خروجی نداره در غیر اینصورت open) حالا مقدار پارامتر result رو بخون
نمونمه
توی رویداد Onclick یک دکمه

ADOStoredProc1.Parameters.ParamByName('@p1').Value :=مقردار ورودی;
ADOStoredProc1.ExecProc;
مقدار خروجی:=ADOStoredProc1.Parameters.ParamByName( '@RETURN_VALUE').Value;