PDA

View Full Version : نمایش + اضافه شدن فیلد به کمبو در صورت وجود نداشتن



حمید محمودی
سه شنبه 27 بهمن 1388, 01:49 صبح
سلام


یه مشکلی توی دلفی با Adoquery داشتم.یه برنامه ای رو پیوست کردم. توی برنامه دو تا فیلد name,fname هست .فیلد نام به DBCombobox1 و فیلد fname به dbcombobox2 مرتبط است. میخام وقتی دکمه اد DBNavigator1 رو کلیک کردم تا یه رکورد جدید به بانک اضافه بکنم ، زمانیکه روی DBcombobox1 و DBCombobox2 کلیک کردم مقادیری که قبلا در بانک است در لیست آیتم هایش بیاید و اگر ما دوباره مقدار قبلی رو خاستیم اضافه بکنیم پیغام بده و اجازه به کاربر رو نده!!

یعنی مثلا توی برنامه دکمه اد (+) DBNavigator1 رو کلیک کردیم و در DBcombobox1 حرف R رو نوشتیم خودکار لیستش باز بشه و تمامی فیلد ها توش نمایش داده بشه و اسم Reza انتخاب بشه ( یعنی ما متوجه بشیم قبلا Reza در بانک بوده ) البته من خودم با Autocompelete و autodropdown امتحان کردم ولی یه مشکلاتی پیش اومد که ولش کردم.

برای فیلد fname و DBcombobox2 هم به همین ترتیب.

به همین ترتیب اگه کلمه Reza rezaee رو دوباره خاستیم به بانک اد بکنیم اجازه به کاربر رو نده

دوستان ببینین میشه برنامه رو کامل بکنین.

متشکرم

hossein_h62
سه شنبه 27 بهمن 1388, 08:21 صبح
دوست عزیز یه تغییر کوچیک دادم ببین کارتو راه میندازه !!

pezhvakco
سه شنبه 27 بهمن 1388, 08:25 صبح
درود :
1) DBNavigator رو به Table متصل کن تا بشه دستورات را مستقیم با بانک بدی .
2) برای جستجوی حرف به حرف می تونی از Locate استفاده کنی که این دستور رو رویداد onchang بنویس .
3) برای نمایش لیستی باید از DBLookupComboBox استفاده کنی .
4) در هنگام ذخیره هم میتونی با یه جستجوی Query یا همون Locate تکراری بودن یا نبودن رو امتحان کنی .

حمید محمودی
سه شنبه 27 بهمن 1388, 13:24 عصر
سلام در مورد پاسخ hossein_h62 (http://www.barnamenevis.org/forum/member.php?u=97704) محترم باید بگم که شما DBLookupComboBox رو به یرنامه اضافه کردین و به دو فیلد مربوطه ربطش دادین. اما من خودم هم همین روش رو انتحان کرده بودم اما نمیدونم چطور هر دو تا سوالمو که پرسیدم توی برنامه پیاده بکنم

در رابطه با پاسخ pezhvakco (http://www.barnamenevis.org/forum/member.php?u=59994) محترم باید بگم که اگه لطف کنین روی برنامه پیاده بکنبن ممنون میشم. چون خودم چندین روش رو امتحان کردم و لی آخر درست نشد!!گفتین برای نمایش بطورت لیستی هم از DBLookupComboBox استفاده بکنم اما چطور هم میشه باهاش اد کرد.

سوالم کلا دوتاست : ( البته فکر کنم توی پست اول کامل توضیح دادم)

1: بیایم تمام مقادیر فیلد نام و نام خانوادگی رو در DBCombobox1 , 2 اضافه بکنیم (هر لحظه که یکی رکورد به بانک اد کردیم لیست رفرش بشه ) تا کاربر متوجه بشه قبلا این مشخصات وارد شده
2 : اگه مقادیر رکورد قبلا وجود داشت به کاربر پیغام بده

ممنون

hossein_h62
سه شنبه 27 بهمن 1388, 15:05 عصر
سوالم کلا دوتاست : ( البته فکر کنم توی پست اول کامل توضیح دادم)

1: بیایم تمام مقادیر فیلد نام و نام خانوادگی رو در DBCombobox1 , 2 اضافه بکنیم (هر لحظه که یکی رکورد به بانک اد کردیم لیست رفرش بشه ) تا کاربر متوجه بشه قبلا این مشخصات وارد شده
2 : اگه مقادیر رکورد قبلا وجود داشت به کاربر پیغام بده

ممنون

دوست عزیز برای جلوگیری از ورود داده های غیرتکراری راههای دیگه ای هم هست.اگر اصراری برای استفاده از DBComboBox نداشته باشید براحتی میشه دو تا ادیت باکس بزارید و در رویداد OnChange اونها DBGrid تون رو فیلتر کنید.در نتیجه وقتی کاربر نامی رو در ادیت تایپ میکنه در صورت وجود، در گرید میبینتش.روش خوبیه.خودم توی یه برنامه استفاده کردم.اگر میخاین تا روی برنامتون اضافش کنم؟؟

حمید محمودی
سه شنبه 27 بهمن 1388, 15:59 عصر
دوست عزیز برای جلوگیری از ورود داده های غیرتکراری راههای دیگه ای هم هست.اگر اصراری برای استفاده از DBComboBox نداشته باشید براحتی میشه دو تا ادیت باکس بزارید و در رویداد OnChange اونها DBGrid تون رو فیلتر کنید.در نتیجه وقتی کاربر نامی رو در ادیت تایپ میکنه در صورت وجود، در گرید میبینتش.روش خوبیه.خودم توی یه برنامه استفاده کردم.اگر میخاین تا روی برنامتون اضافش کنم؟؟

سلام

حرف شما کاملا درست م خودمم این روش رو بلدم اما میخام از حالت کمبو باکس استفاده بکنم. چون در برنامه جای کمتری رو میکیره و همچنین نمیخام که دوباره با کیوری بانک رو فیلتر بکنم . میخام همون لحظه که دکمه اد رو زدم و وقتی خاستم رکورد جدید اد بکنم یه لیست کمبو باز بشه تا کاربر بفهمه که این رکرورد یا شبیه این رکورد در بانک است.(مثلا توی همین سایت وقتی میخایم پیغام خصوصی به یه نفر بدیم وقتی که جلوی کادری که برای ارسال به طرف مقابل هست کلمه تایپ کردیم یه لیست باز میشه و ... ) البته من این مثال ساده رو گزاشتم اما برنامه اصلیم روی چندین میلیون رکورد کار میکنه.


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

متشکرم

حمید محمودی
سه شنبه 27 بهمن 1388, 20:27 عصر
دوستان راهنمایی کنید لطفا ....

pezhvakco
سه شنبه 27 بهمن 1388, 20:29 عصر
برای این کار مجبوری از دستورات sql استفاده کنی .
اگر یه کامپونتی باشه که خودش این کار رو انجام بده، روش کار همینه .
باید تو رویداد onchang ، دستورات مورد نظر را بنویسی، حالا می خوای یه DBLookupListBox بذار و اون رو به ADOQuery متصل کنی و تو رویداد onchang مربوط به edit با dbedit دستور نمایش موارد خاص مورد نظرت را نمایش بده .
این کد نمایش متناسب با موارد ورودی است >
SELECT name FROM Table WHERE (name LIKE 'Edit1.text + %')