View Full Version : جستجو در جدول به کمک پروسیجر
پوریا_م
شنبه 08 خرداد 1389, 20:45 عصر
با سلام
قصد دارم با استفاده از یک پروسیجر و فرستادن پارامتر آن از طریق یک Editbox روی یک جدول عملیات جستجو را انجام بدهم
کد پروسیجر با شکل زیر است:
create procedure p1 (@a int)
as
Select * from services
where ids = @a
کد دلفی هم یه شکل زیر:
ADOStoredProc1.Parameters.ParamByName('@a') .Value := edit1.Text;
ADOStoredProc1.ExecProc;
ADOTable1.active := false;
ADOTable1.active := true;
لطفا راهنمایی کنید که چرا بدون دادن خطا هیچ اتفاقی در جدول رخ نمیده
با تشکر
حسین شهریاری
شنبه 08 خرداد 1389, 20:52 عصر
سلام
ADOTable1.active := false;
ADOTable1.active := true;
دوست عزیز اگه درست متوجه شده باشم قصد شما از دو خط فوق در اصل نشون دادن تغییرات است درسته؟
باید به عرض برسونم روال شما کارشا درست انجام میده و لی شما درست خروجی اونا دریافت نمیکنید!!
با دستورات فوق در هر بار تمام اطلاعلت جدول لود میشه و عملا روال شما هیچ کاره است.
پوریا_م
شنبه 08 خرداد 1389, 21:02 عصر
بله قصدم از اون 2 خط refresh جدول که فکر میکنم اشتباه هم در همین دو خط چه کدی برای refresh جدول بعد از انجام پرئسیجر بنویسم
حسین شهریاری
شنبه 08 خرداد 1389, 21:43 عصر
جدول شما حاوی تمام اطلاعات شما هست!!
و هر روشی را هم که لحاض کنید فرقی نداره چرا که جدول شما و روال شما از هم کاملا جدا هستند.
پیشنهاد میکنم برای اینگونه از امور Query بزنید:
مثال:
AdoQuery.sql.text:='Select * from services where ids='+Edit1.text;
AdoQuery.close;
AdoQuery.open;
اگه به روش فوق کد بنویسید اون مشکل حل میشه.به شرطی که Grid شما به Query متصل باشه.
موفق باشید
پوریا_م
یک شنبه 09 خرداد 1389, 13:25 عصر
ممنون از راهنمایی تون خودم هین روش ado query رو تست کردم و جواب گرفتم میخواستم انجام این کار با استفاده از پروسیجر را بفهمم که متاسفانه کسی از دوستان نتونست کمکی تو این زمینه بکنه
AmirSky
پنج شنبه 13 خرداد 1389, 18:03 عصر
چرا از این ها استفاده کردی
ADOTable1.active := false;
ADOTable1.active := true;
بجای اونها از همون ADOStoredProc1 استفاده کن.
ADOStoredProc1.active := false;
ADOStoredProc1.Parameters.ParamByName('@a') .Value := edit1.Text;
ADOStoredProc1.ExecProc;
ADOStoredProc1.active := true;
پوریا_م
شنبه 15 خرداد 1389, 13:31 عصر
بجای اونها از همون ADOStoredProc1 استفاده کن.
دوست عزیز ما میخوایم نتیجه اجرای StoredProce رو در Grid ببینیم. چه ربطی به Active کردن ADOStoredProc1 داره ؟؟؟؟!!!!!
دوستان عزیز سوالم رو اینطور بپرسم. من میخوام نتیجه اجرای sp رو در گرید ببینم باید چکار کنم؟؟؟؟؟؟؟؟
ممنووووووون
حسین شهریاری
شنبه 15 خرداد 1389, 14:01 عصر
من این مورد را دیروز امتحان کردم:
کافیه Procedure خودتونا توی SQL بسازید و سپس مثا همون کاری که برای AdoTable یا Adoquery میکردید یعنی ابتدا تنظیم کانکشن دوم در قسمت ProcedureName از لیستی که باز میشه نام روال مورد نظر که قبلا ایجاد شده را انتخاب و سوم خاصیت Active اونا برابر True قرار بدید.حالا اگه AdoProcedure شما به یه Datasource و اون Datasource به یه Dbgrid متصل باشه و به شرطی که اون روال شما خروجی داشته باشه شما میتونی اطلاعات برگشنی اونا ببینی.حتی متدهای Insert,delete,edit,post,.... را هم مشابها دارد.
موفق باشید
پوریا_م
شنبه 15 خرداد 1389, 16:45 عصر
دوسته عزیز من تمام کارهایی رو که گفتیتد انجام دادم ولی بعد از پاس دادن پارامتر به پروسیجر گرید refresh نمیشه تا خروجی جدید رو نشان بده
شما چه کدی برای دکمه نوشتید؟
حسین شهریاری
شنبه 15 خرداد 1389, 17:10 عصر
برای Refresh شدن به قول شما!! یکی از دو کد زیر را بکار ببرید:
ADOStoredProc1.Requery();
یا:
;ADOStoredProc1.close
;ADOStoredProc1.open
در هر صورت Dataset یکبار باید باز و بسته شود تا اطلاعات بروزآوری شوند.که هر دو حالت بالا این کار را میکنن.
پوریا_م
شنبه 15 خرداد 1389, 21:11 عصر
برای Refresh شدنه به قول من این کد جواب نمیده !!
پروسیجر نیاز به روز رسانی نداره Refresh گرید نیازه
حسین شهریاری
شنبه 15 خرداد 1389, 21:41 عصر
دوست عزیز به تعداد پارامترهایی که دارین(توی پروسیجر مربوطه در Sql) عینا توی خاصیت Parameter مربوط به AdoStoredProcedure پارامتر ایجاد کنید و به شکل زیر کد بنویسید.
ADOStoredProc1.Parameters.ParamByName('@a').Value: =Edit1.Text;
ADOStoredProc1.Close;
ADOStoredProc1.Open;
من اینطوری نوشتم جواب هم گرفتم.حالا اگه شما اصرار دارین روش ما درست نیست خودتون یه روش اختراع کنین.تا بوده این شکلی برای پروسیجر پارامتر ارسال میشده.
حسین شهریاری
شنبه 15 خرداد 1389, 21:51 عصر
در ضمن در کد اولیه شما خط زیر اضافی است:چرا که پروسیجر شما حاوی select هست و قراره برای شما مقداری را برگردونه!
ADOStoredProc1.ExecProc;
پروسیجر نیاز به روز رسانی نداره Refresh گرید نیازه
ضمنا اطلاعات توی گرید نیستند که شما بخاین با Refresh کردن گرید تغییرات اونا را مشاهده کنین.اطلاعات توی Dataset هستند و دیتاست هم فقط با باز وبسته شدن یا متد Requery بروز میشه.
اگه بازم شک کردین به یکی از مدیران پیام خصوصی بزنین و بگین فلانی اینطوری میگه درسته یا نه؟
موفق باشید
پوریا_م
شنبه 15 خرداد 1389, 22:59 عصر
آقا ما یه جدول داریم با یه سری اطلاعات میخوایم با دادن یه ورودی از طریق Edit
که پارامتر ورودی یه پروسیجر هم هست روی جدول جستجو رو انجام بدیم
اگه اون چیزی که شما نوشتید و جواب هم گرفتید ! همینه همه مراحل و کدهاش رو بنویسید والا ما که هر کدوم از کداهایی رو
که گفتید تست کردیم جواب نداد!
hossein_h62
شنبه 15 خرداد 1389, 23:07 عصر
یه جدول داریم با یه سری اطلاعات میخوایم با دادن یه ورودی از طریق Edit
که پارامتر ورودی یه پروسیجر هم هست روی جدول جستجو رو انجام بدیم
سلام دوست من
پیشنهاد میکنم برای گرفتن کوئری از خود AdoQuery استفاده کنی و از sp برای موارد پیچیده تر استفاده کنی...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.