ورود

View Full Version : سوال: تعریف Query توی دلفی



ELABAA
یک شنبه 26 آبان 1387, 20:46 عصر
سلام دوستان
من می خوام که توی دلفی برنامه دفترچه تلفن رو بنویسم تا یه جاهایش رو کار کردم
استادمون گفته برای جستجو بایدیه ADOQUERY بیاریم ویک باتوم توی EVENT باتوم بایدبا تعریف QUERY ،اطلاعاتمون رو از دیتابیس جستجو کنیم و همین طور بتونیم بانوشتن Query عمل درج و حذفمون راهم انجام بدیم .

البته برای دریافت اطلاعاتمون از Edit استفاده میکنیم .
فکرکنم تعریف Query ، شبیه تعریف Query،توی SQL باشه ولی چطوری باید این کاررو انجام بدم نمی دونم . . . ... . . . . .:ناراحت:


تشکراتکم فراوانکم

ELABA

Answer
یک شنبه 26 آبان 1387, 21:13 عصر
دوست عزیز در قسمت پایگاه داده در دلفی همین تالار جست وجو کن

tefos666
یک شنبه 26 آبان 1387, 21:43 عصر
سلام دوست عزیز من براتون نمونه جستجو با امکان حذف و اضافه رو نوشتم

یه دفترچه تلفن هم میزارم از سایت دوست خوبمون مبینی گیر آوردم :قهقهه: نمره رو گرفتی برو تمرین کن یاد بگیری فردا به دردت میخوره :شیطان:

جدی میگم به عنوان نصیحت قبول کن با سورس یاد بگیر خودت بنویس اینجوری بهتره

مراحل آشپزی :

ببین اول یه دیتابیس درست کن چه SQL باشه چه Access فرقی نداره مهم ایجاد اونه

بعد از تب ADO یک table میزاری و یک از تب دیتا اکسس 2تا datasource و از تب Datacontrols هم query حالا ارتباط ها رو وصل کن تو سورس ببینی متوجه میشی و کوئری رو مینویسی واسه سرچ هم پارامتر به کوئری پاس میدی و جواب رو میگیری .... ببخشید باید برم :چشمک:

ELABAA
دوشنبه 27 آبان 1387, 10:19 صبح
سلام دوست عزیز آقا محسن خیلی ممنونم

راهنمایی تون خیلی خوب بودولی مشکلم اینه که استادگفته از DBNavigator1 استفاده نکنین خودمون بایدباتوم بیاریم وتوی اونت باتوم با استفاده از تعریف کوئری(که من هم بلدنیستم)عمل درج و حذف رو انجام بدیم به استادگفتم که باDBNavigator1 عمل درج و حذف رو انجام بدم استاد برگشت گفت :خیلی زرنگی

tefos666
دوشنبه 27 آبان 1387, 10:34 صبح
سلام دوست عزیز آقا محسن خیلی ممنونم

راهنمایی تون خیلی خوب بودولی مشکلم اینه که استادگفته از DBNavigator1 استفاده نکنین خودمون بایدباتوم بیاریم وتوی اونت باتوم با استفاده از تعریف کوئری(که من هم بلدنیستم)عمل درج و حذف رو انجام بدیم به استادگفتم که باDBNavigator1 عمل درج و حذف رو انجام بدم استاد برگشت گفت :خیلی زرنگی
دوست عزیز visible اون dbnavigator رو false کن و کدهای زیر رو واسه دکمه هات بنویس

دکمه اضافه


DBNavigator1.BtnClick(nbInsert);
دکمه قبلی


DBNavigator1.BtnClick(nbPrior);
دکمه بعدی


DBNavigator1.BtnClick(nbNext);
به همین ترتیب از nbLast , nbFirst , nbEdit , nbPost , nbCancel , nbRefresh هم میتونی استفاده کنی یه مقدار جستجو کنی حتما موفق میشی واسه حذف هم از anchros اول confirmDelete رو false کن بعدش اول یه پیام فارسی بده بعدش کد حذف رو بنویس مثل کد زیر :



begin
if MessageDlg('آیا مطمئن هستید ؟',mtConfirmation,[mbyes,mbno],0)=mrYes then
begin
dm.dstolid.DataSet.Delete;
end;
البته راههای بهتری هم هست ولی به این راه میگن کلک مرغابی یعنی از خاصیت خود dbnavigator در قالب دکمه هاتون استفاده کردین

یه راه هم وجود داره که در اصطلاح هک کردن dbnavigator هستش یعنی میتونی هر شکلی دوست داری جای شکلهای خودش قرار بدی

ورژن انگلیسی :
http://delphi.about.com/od/usedbvcl/l/aa090203a.htm

ورژن فارسی :
http://amoosavifar.persianblog.ir/post/81 (http://amoosavifar.persianblog.ir/post/81/)

البته نمیدونم به چه دلیلی نگارش های فارسی رو از تو سایت برنامه نویس پاک کردند ؟

اگه از کوئری میخوای استفاده کنی :



dm.Adq1.Close;
dm.adq1.Clear;
dm.adq1.sql.add('دستور اس کیو ال');
dm.aq1.open;
برای حذف و جستجو هم از پارامتر استفاده کن نمونش تو سورس هست
اگه میخوای برای درج و یا ویرایش هم از مقادیری که توسط textbox میدی استفاده کنی باز از پارامتر استفاده کن

ELABAA
دوشنبه 27 آبان 1387, 10:38 صبح
دوست عزیز آقامحسن کارت درسته خیلی ممنون
حتما این کاررو میکنم

دوست عزیز از دو تا لینک مفیدتونم ممنونم .

ELABA

ELABAA
چهارشنبه 29 آبان 1387, 09:44 صبح
سلام دوست عزیز آقا محسن

برنامه ایی رو که تونستم تا یه جاهایی رو پیش ببرم رو پیوست کردم

میشه گفت تقریبا شبیه مال آقای ممبینی هست منتها با دو جور جستجو
1- با نوشتن هرکلمه در هر یک از edit ها هر چیزی که توش از اون است رو خودش لیست میکنه
2- بااستفاده از باتوم جستجو

یه group _ boxیی هست به نام Query من میخوام که از دستورهای Query هم واسه عمل هایی که توی group _ box Query نوشتم انجام بدم امممممما هر کاری میکنم درست از آب در نمی یاد :عصبانی++:
میشه شما هم با دستورات کوئری یه بار تست کنین :عصبانی++:

با تشکر
ELABA

delphiprog3000
چهارشنبه 29 آبان 1387, 17:15 عصر
سلام دوست عزیز آقا محسن خیلی ممنونم

راهنمایی تون خیلی خوب بودولی مشکلم اینه که استادگفته از DBNavigator1 استفاده نکنین خودمون بایدباتوم بیاریم وتوی اونت باتوم با استفاده از تعریف کوئری(که من هم بلدنیستم)عمل درج و حذف رو انجام بدیم به استادگفتم که باDBNavigator1 عمل درج و حذف رو انجام بدم استاد برگشت گفت :خیلی زرنگی

با سلام. دوست عزیز مطالب زیادی در سایت در مورد درج و حذف و جستجو و ویرایش وجود داره. کافیه کلمات Update,Insert,Select,Delete رو در بخش جستجو کنی.

موفق باشید..........

delphiprog3000
پنج شنبه 30 آبان 1387, 17:07 عصر
با سلام دوست من.

سورس شما اصلاح شد.............

موفق باشید..........

ELABAA
جمعه 01 آذر 1387, 12:49 عصر
با سلام دوست من.

سورس شما اصلاح شد.............

موفق باشید..........


سلام
دوست عزیز خیلی ممنون از لطفتون

مشکلم کاملا حل شد با تشکرات فراوان

ELABA

ELABAA
یک شنبه 03 آذر 1387, 20:22 عصر
سلام
دوست عزیز خیلی ممنون از لطفتون

مشکلم کاملا حل شد با تشکرات فراوان

ELABA

:خجالت:ببخشین حرف رو پس میگیرم فکر کنم کاملا حل نشده باشه و چند نخود از اشکالهام مونده باشن :

1_ کلمه Like که شما در سورس زیر به کار بردین واسه چیه:متفکر: ؟ ؟ ؟ ؟ ؟
2_چرا توی همه کدها ، اول ما ،کئوری رو Close می کنیم بعد توی آخر open می کنیم :متفکر: ؟ ؟ ؟ ؟


ADOQuery1.Close;
ADOQuery1.SQL.Text := 'SELECT * FROM info WHERE FName like '+Quotedstr(Edit1.text);
ADOQuery1.Open;

بعد یه سوال دیگه که داشتم اینه که ما وقتی توی Edit مربوط به Tell به جای عدد ،کاراکتر می دهیم چون انواع با هم مطابقت نمیکنه بهمون خطا می ده چطوری باید جلوی این خطا رو بگیریم وباهاش مقابله بکنیم ازtry except استفاده کردم ولی نشد حقیقتش کمی بیشتر ازخیلی من آماتورم به هر حال ببخشیتم :خجالت:

یکی دو تا سوال کوچولوی دیگه به اندازه لپه داشتم :
1_این دو تا Event که مال adoquery است چیکار میکنن :ADOQuery1FilterRecord وADOQuery1BeforePost واسه چی ازشون استفاده میکنیم توی برنامه هم ازشون استفاده کردیم .:متفکر:

راستی متد pos واسه چیه:متفکر: ؟ ؟ ؟ ؟ ؟


با تشکر
ELABA:متفکر:

delphiprog3000
پنج شنبه 07 آذر 1387, 18:32 عصر
با سلام دوست گرامی سوالات شما کوچیک اما برای پاسخ میبایست جواب های مفصلی داد.
اگر سوالات را به صورت پست های مجزا در می آوردید از نظر خوانا بودن بهتر بود اما پاسخ همه رو بشما میدم.

1-کلمه like همان like موجود در زبان Sql Script که ما آن را در کوری خود نیز به کار بردیم. اصولا برای رشته از این دستور و برای محاسبات از (=) استفاده میشود.

2-میشه گفت این یه عادت برای ما. چون همیشه مقدار Sql.text یک کوری متغییر میباشد. و امکان دارد که در چندین رویداد قبل مقدار Sql.text شما تغییر کرده به این دلیل ما ابتدا مقادیر قبلی را حذف دستور مورد نظر را ارجاع و سپس open میکنیم. که دستور ما اجرا شود. و حاصلی را به شما بر گرداند.

3- میشه با نوشتن چند خط کد و انتساب آن به سایر عناصر از نوشتن حروف و بلعکس از نوشتن عدد جلوگیری کرد. (برای شما سورس مربوط را ضمیمه تاپیک کردم)

4- دوست گرامی تمامی عناصر موجود در زبان دلفی خاصیت و رویداد دارند. که از خودشان رویدادی بروز میدهند که ما میتوانیم در هنگام بروز رویداد/ پیش از بروز/ پس از بروز/ کد یا رویداد هایی تعریف نمایم.

در مورد Adoquery1filterrecord مربوط به زمانیست که عمل فیتر در یک Adoquery رخ داده.
و Adoquery1Beforpost مربوط به زمانی که ارسال اطلاعات به دیتابیس انجام نشده. و ما میتوانیم پیش از ورود اطلاعات کارهای مورد نظر را انجام دهیم. مانند چک کردن اطلاعات.

موفق باشید.....................

ELABAA
چهارشنبه 20 آذر 1387, 21:11 عصر
با تشکر فراوان از همه دوستان عزیز

دوستان کسی می تونه به من کمک بکنه تا دستورات جستجو و درج و حذف و ویرایش را بدون استفاده از دستورات اس کیو ال و Navigator بنویسم . . . . . . . . . . .

در واقع میخواهم دفترچه تلفنی که با لطف دوست عزیزمون delphiprog3000 :تشویق: که یه بار اصلاح شده بود بار دیگر به طرق دیگری این کار رو انجام بدم ؟ ؟ ؟

البته کل انجمن رو جستجو کردم ولی چیزبه درد بخوری نتونستم پیدا کنم . . . . .
دوستان یه چیزهایی با Locate و ... نوشته بودن ولی در آخر فکر کنم به جایی نرسیده بودند......:متفکر:
من میخواهم با کمک دوستان این برنامه رو با سایر روش ها برای دستورات جستجو و درج و حذف و ویرایش باز نویسی کنیم تا حداقل یه نمونه به دردبخور و قابل اجرا باشه . . . .

البته باید بگم که خودم در حد خیلی آماتور بلدم . . . . . .:عصبانی++:

در نهایت نیازمند یاری سبز همه دوستان هستم:چشمک:

تشکراتکم فراوانکم
ELABA:لبخندساده: