PDA

View Full Version : فرم ورود اطلاعات با Procedure



m0rteza
سه شنبه 10 دی 1387, 17:06 عصر
سلام خدمت دوستان عزیز
من میخوام یک فرم ورود اطلاعات داشته باشم که شامل خصوصیات زیر باشه :

بالا---------------------------------محل آیتم های جستجو------------------------------------

وسط------------------------------محل دیتا گرید-----------------------------------------------

پایین------------------------------محل ورود اطلاعات------------------------------------------
<< < > >> Insert Del return

من همچین فرمی رو نزدیک به یک سال در برنامه هام استفاده کردم و تمامی کوئری ها از داخل کد سی شارپ به SqlServer فرستاده میشه .
اما حالا می خوام فقط از Procedure استفاده کنم . برای Insert و Update و Del خب مشکلی نیست . ولی برای جستجو یک مشکل است
حالا نمی دونم چطور برای جستجو از Procedure استفاده کنم که مثلا بر اساس 4 تا فیلد برای کاربر جستجو بزارم . و اینکه کاربر چگونه بعد جسجو ، بتونه به راحتی به حالت گرید قبل از جستجو بر گردهالبته همه اینا با procedure؟
قبلا من یک کوئری public می گرفتم و برای هر جستجو به where اضافه می کردم و وقتی کاربر به هر دکمه غیر محیط جستجو دست میزد ، دوباره همون کوئری public که چیزی بهش اضافه نشده بود استفاده میشد و گرید به حالت اول بر کی گشت؟ حالا با Procedure نمی دونم چطور این کارو انجام بدم .
می دونم یکم طولانی و گنگ سوال رو مطرح کردم . ولی ممنون می شم راهنمایی کنید
در آخر هم از آقای کرامتی به دلیل procedure Genarator و این بزرگواریشون تشکر میکنم

hdv212
سه شنبه 10 دی 1387, 18:15 عصر
حالا نمی دونم چطور برای جستجو از Procedure استفاده کنم که مثلا بر اساس 4 تا فیلد برای کاربر جستجو بزارم
خب شما میتونید 4 تا پروسیجر بسازید و بر اساس انتخاب کاربران، مورد مناسب رو اجرا کنید.


و اینکه کاربر چگونه بعد جسجو ، بتونه به راحتی به حالت گرید قبل از جستجو بر گردهالبته همه اینا با procedure؟
شما میتونید در فرم خودتون یک Button داشته باشید مثلا به نام Reload All که مجددا داده های شما رو بخونه و دیتاگریدتون رو پر کنه، برای این کار هم میتونید از یک پروسیجر که همه ی رکوردها رو میخونه استفاده کنید.


قبلا من یک کوئری public می گرفتم و برای هر جستجو به where اضافه می کردم و وقتی کاربر به هر دکمه غیر محیط جستجو دست میزد ، دوباره همون کوئری public که چیزی بهش اضافه نشده بود استفاده میشد و گرید به حالت اول بر کی گشت؟ حالا با Procedure نمی دونم چطور این کارو انجام بدم
در Sql Server هم میتونید این کار رو انجام بدید، به این روش Dynamic T-Sql میگن که شما میتونید یک رشته رو که حاوی دستورات T-Sql هست رو اجرا کنید که البته فکر میکنم برای شما یک مقدار سنگین باشه. در زمینه ی Dynamic T-Sql جستجو کنید.

موفق باشید

m0rteza
سه شنبه 10 دی 1387, 18:46 عصر
ممنون آقای وزیری

خب شما میتونید 4 تا پروسیجر بسازید و بر اساس انتخاب کاربران، مورد مناسب رو اجرا کنید.
جستجو کردم . به نظرتون از این دستورات می شه استفاده کرد؟

IF @custno IS NOT NULL
SELECT ... FROM customers WHERE custno = @custno
ELSE IF @natregno IS NOT NULL
SELECT ... FROM customers WHERE natregno = @natregno
ELSE IF @custname IS NOT NULL
SELECT TOP 200 ...
FROM customers
WHERE custname LIKE @custname + '%'
ORDER BY custname
ELSE
RAISERROR('No search condition given!', 16, 1)

شما میتونید در فرم خودتون یک Button داشته باشید مثلا به نام Reload All که مجددا داده های شما رو بخونه و دیتاگریدتون رو پر کنه، برای این کار هم میتونید از یک پروسیجر که همه ی رکوردها رو میخونه استفاده کنید.
چجوری بگم!!! گذاشتن دکمه به نظر شما یکم یه جوری نیست؟


در Sql Server هم میتونید این کار رو انجام بدید، به این روش Dynamic T-Sql میگن که شما میتونید یک رشته رو که حاوی دستورات T-Sql هست رو اجرا کنید که البته فکر میکنم برای شما یک مقدار سنگین باشه. در زمینه ی Dynamic T-Sql جستجو کنید.

میشه یکم بیشتر توضیح بدید. و یه منبع معرفی کنید . من یک لینک پیدا کردم . ببینید ربطی داره ؟
http://www.sommarskog.se/dyn-search-2008.html

و اینکه شما هم در فرم ها تون فقط از Procedure استفاده میکنید؟ به نظر شما این نوع فرم کاربر پسند هست؟ میشه در مورد طراحی فرم خودتون یکم بگید ؟ بعضی ها میگن گرید احتیاج نیست و باید در یک Form دیگه برای جستجو باشه . میشه راهنمایی کنید.

hdv212
سه شنبه 10 دی 1387, 19:07 عصر
جستجو کردم . به نظرتون از این دستورات می شه استفاده کرد؟
چرا که نه عزیز، میشه!


چجوری بگم!!! گذاشتن دکمه به نظر شما یکم یه جوری نیست؟
به هر صورت یک Button ای برای بازگرداندن اطلاعات به حالت قبل باید وجود داشته باشه دیگه، در خیلی از جاها اینطوری استفاده میکنند.


میشه یکم بیشتر توضیح بدید. و یه منبع معرفی کنید . من یک لینک پیدا کردم . ببینید ربطی داره ؟

کد زیر یک مثال ساده از Dynamic T-Sql هست :

DECLARE @cmd NVARCHAR(max)
SET @cmd = N'select * from customers'
EXEC(@cmd)

همانطور که میبینید، دستورات در یک متغیر رشته ای نوشته شده، حالا شما میتونید بر اساس شرایط مختلف این رشته ی متنی رو تغییر بدید، کد زیر یک مثال ساده از اضافه کردن یک آیتم به رشته ی متنی و سپس اجرای اونه :

DECLARE @num INT
DECLARE @cmd NVARCHAR(max)
SET @cmd = N'select * from'
SELECT @num = COUNT(customerid) FROM customers
IF(@num<91)
PRINT N'Smaller'
ELSE
SET @cmd = @cmd + N' customers'

EXEC(@cmd)PRINT @cmd
موفق باشید

m0rteza
سه شنبه 10 دی 1387, 19:20 عصر
چقدر جالبه ، واقعا ممنون .امروز چیزای خیلی جالبی از شما یاد گرفتم.

یه سوال : این دستورات رو کجا بنویسم ؟ توی کد مثل یک Procedure با هاش برخورد کنم ؟

راستی یکی از دلیل هایی که از procedure استفاده می کنیم سرعت اون هست چون از قبل کامپایل شده

آیا Dynamic T_sql هم این قابلیت رو داره؟

از شما به عنوان یک با تجربه میخوام نظرتون رو در باره این نوع فرم ورود اطلاعات بگید. واسم مهم هست.

واقعا ممنون

hdv212
سه شنبه 10 دی 1387, 19:33 عصر
یه سوال : این دستورات رو کجا بنویسم ؟ توی کد مثل یک Procedure با هاش برخورد کنم ؟
شما میتونید این مجموعه دستورات رو در داخل یک پروسیجر بنویسید و با پارامترهای پروسیجرتون که از کاربر میگیرید، رشته ی جستجوی مورد نظرتون رو بسازید.


راستی یکی از دلیل هایی که از procedure استفاده می کنیم سرعت اون هست چون از قبل کامپایل شده
آیا Dynamic T_sql هم این قابلیت رو داره؟
به خودی خود، نه، اما زمانی که در پروسیجر قرار میگیره، طبیعتا تاثیراتی در سرعت اجرا خواهد داشت.


از شما به عنوان یک با تجربه میخوام نظرتون رو در باره این نوع فرم ورود اطلاعات بگید. واسم مهم هست.

خب معمولا فرم ورود اطلاعات، فقط برای ورود اطلاعات هست و بس و معمولا هم از این الگو برای طراحی فرمها استفاده میکنند، اما طراحی ظاهر فرم کاملا بستگی به ذوق و سلیقه و دانش شما و شرایط داره و نمیشه یک قانون و استانداردی رو ارائه داد، به خاطر همین فرم شما هم درسته و مشکلی نداره، منتها باید فکر کنید و ببینید کدوم الگو میتونه بهترین نتیجه رو به شما بده.
موفق باشید