PDA

View Full Version : Select کردن با مقادیر ورودی در چند Edit



Mahdi_S_T
جمعه 12 آبان 1385, 10:32 صبح
من چند Edit دارم فرضا اطلاعات مربوط به کارمندان : نام - پرسنلی - حقوق - محل کار و ...
حالا میخوام با استفاده ا ز Select و هر کدام از Edit ها که توسط کاربر کامل شده گزارش را نمایش بدم ( این احتمال است که کاربر همه را پر کند یا چند تا را پر کند )
البته من قبلا با Xor نمودن و عمل فیلتر این کارو می کردم .
با تشکر

soroush_vs
جمعه 12 آبان 1385, 11:29 صبح
باید یکی یکی چک کنید
البته ممکنه فکر کنید که کار وقت گیریه اما فقط ممکنه 1 ساعت کار ببره.
با چند تا if تو در تو میتونید این کار رو انجام بدید

ghabil
جمعه 12 آبان 1385, 11:46 صبح
من چند Edit دارم فرضا اطلاعات مربوط به کارمندان : نام - پرسنلی - حقوق - محل کار و ...
حالا میخوام با استفاده ا ز Select و هر کدام از Edit ها که توسط کاربر کامل شده گزارش را نمایش بدم ( این احتمال است که کاربر همه را پر کند یا چند تا را پر کند )
البته من قبلا با Xor نمودن و عمل فیلتر این کارو می کردم .
با تشکر
ببین من اینجا منظور از Selectرو نمیفهمم ! اگر میخوای Editهایی که پرشدند رو پیدا کنی (مطمئنی DBEdit) نیستند ؟ این کد برات این کار رو میکنه :


for i := 0 to Controlscount -1 do
if Controls[i] is TEdit then
with Controls[i] as TEdit
do
if Text = '' then ....حالا دیگه هر کاری که مخیوای بکنی
cegin


این کد همه ادیتهای روی فرم رو برات پیدا میکنه، ما اگر میخوای یک سری ادیتهای خاص رو فرم رو پیدا کنی مثلا میتونی Tag اونها رو مقدار بدی و تو IF کد چک کنی که مقدار Tag مقدار مورد نظر باشه ...

اما اگر دیتاهارو فرستادی توی دیتابیس اما میخوای با Select دوباره بخونیشون اونوقت میتونی مثلا رو فیلدهای دیتاستی که خوندتشون لوپ بزنی .

Mahdi_S_T
شنبه 13 آبان 1385, 11:30 صبح
با تشکر از اهمیت دوستان به این تاپیک
ولی ظاهرا من نتونستم که سوالم رو خوب مطرح کنم . پس شرح مفصل :
من یه جدول دارم شامل نام - فامیل- تاریخ استخدام و یه فرم دارم که شامل سه Edit است با همین عناوین و در فرم یه DBGrid هم وجود داره حالا میخوام دستور اس کیو الی بنویسم در رویداد Change مربوط به Edit ها که هر موقع کاربر در ادیت نام - علی - رو وارد کرد تمام علی ها نمایش داده شود و اگر هم فامیل احمدی وارد شد تمام کسانی که نامشان علی و فامیل احمدی دارند نمایش داده شود .......
البته همانطور که گفتم من قبلا توسط Filter این کارو کردم ولی حالا میخوام توسط دستور Select این کارو بکنم .اگر همه Editها پر باشند مشکلی ندارم ولی اگه یکی خالی باشه اونوقت مشکل دارم چون Edit خالی هم بعنوان یه مقدار محسوب میشه و اطلاعات نمایش داده اشتباه میشه !

arshia_
شنبه 13 آبان 1385, 11:39 صبح
یه شی quary به برنامه اضافه کن و توی رویداد onchange ‌مربوط به باکس مورد نظرت این دستورات رو بنویس


quary.sql.clear
quary.sql.add('select * from tatblename where fledname like :param1');
quary.params.parambynames('param1).value:='%'+trim (edit1.text)+'%';
quary.active:=true;

ghabil
شنبه 13 آبان 1385, 12:02 عصر
var
AwhereClause: String;
begin
if Trim(edtName.Text) <> '' then
AWhereCluase := 'Field1 like ''%' + edtName.Text + ''''; یا QutedStr
if Trim(edtSirName) <> '' then
begin
if AWhereClause <> '' then AwhereClause := AwhereClause + ' and ' ;
AWhereClause := ' Field2 like ''%' + edSirName.Text + '''';
end.
و به همین منوال....

البته کلا من یک تابع AddCond نوشتم که خودش چک میکنه و And رو میزاره، یک تابع هم نوشتم که مقداری که قراره بعنوان نتیجه باشه رو چک میکنه مشکلی نداشته باشه (مثلا اگه توش ' داشت بکندش '' و ...)
البته اگر با پارامتر هم کتپار کنی خیلی خوبه ولی خب پارسر پارامترها خیلی کنده، برای همین زیاد توصیه نمیشه با پارامترها به این روشی که دوستمون کار کرده کار بکنی...

راستی به چی دقت کنه درست میشه؟!!!

zman123456
پنج شنبه 25 آبان 1385, 16:27 عصر
سلام
یک روش راحت اینکه از اولی شروع کنی به if گذاشتن و متن query رو با and شروع کنی به غیر از اولی که باید تشخیص بدی اولی کودوم است .
خیلی راحته و من همیشه از این روش استفاده می کنم و میشه با این روش فرم های گزارش گیری بر اساس فیلد های انتخابی و ترکیبی کاربر رو نوشت .
اگر فکر میکنید این روش به درد شما میخوره میل بزنید براتون یه unit می فرستم که اینطوری کار میکنه.