PDA

نسخه کامل مشاهده نسخه کامل : ساخت جستجو مثل گوگل برای بانک اطلاعاتی برنامم



delphi7
10-03-2009, 12:43
سلام :31:
من یه بانک اطلاعاتی دارم که 9 تا جدول داره و فیلد های این جدول ها هم از نوع عدد هست هم از نوع متن .
من می خوام یه جستجو برای بانکم بسازم مثل گوگل یعنی مثلا توی کادر جستجو بزنم کتاب برنامه بره توی این 9 تا جدول بگرده و هر چی کلمه کتاب هست پیدا کنه و با یه مقدار متن جلوش نشون بده . مثال :

این داده ها توی بانک هست :
جدول 1 --> کتاب فارسی نویسنده این کتاب ...
جدول 2--> کتاب ریاضی انتشارات ...
جدول 3--> کتاب انگلیسی ( کتاب تست )

من وقتی زدم در باره کتاب جستجو کنه می خوام خروجی رو بصورت زیر نشون بده:

کتاب فارسی ...
کتاب ریاضی ...
کتاب انگلیسی ...

اگه اساتید راهنمایی کنن که چطوری می تونم این کار رو انجام بدم ممنون می شم.

shahrokhkian
11-03-2009, 12:14
شما میتونی یک View بسازی و برای اینک اطلاعات مورد نظر را در اون بریزی از یک کوئری با تابع (insert into) استفاده کنی که در قسمت Where اون از تابع Like استفاده میکنی.

delphi7
11-03-2009, 15:28
یک کوئری با تابع (insert into) استفاده کنی که در قسمت where اون از تابع like استفاده میکنی.
اگه می شه یه کم بیشتر توضیح بدید یا اگه مثالی چیزی دارید لطف کنید اینجا بزارید ممنون.

shahrokhkian
11-03-2009, 17:22
سلام

اول یه جدول توی بانک برنامت بساز برای اینکه حاصل جستجوهات را توی اون ذخیره کنی. فیلدهای اونم میتونه نام کتاب و توضیحات مرتبط با اون باشه. من از این دوتا فیلد با نام BookName و Explain استفاده میکنم. فرض میکنیم نام این جدول MyTable است.
حالا وقتی میخوای یه جستجو انجام بدی ابتدا این جدول را خالی میکنیم تا چیزی از جستجوهای قبلی باقی نمونده باشه.
برای این کار توی دلفی از یک کوئری مثلا با نام ExecQuery استفاده میکنیم.


ExecQuery.Close;
ExecQuery.Sql.Clear;
ExecQuery.Sql.Append('Delete From MyTable');
ExecQuery.ExecSQL


حالا میتونیم جستجو را انجام بدیم و حاصل اونو در این جدول ذخیره کنیم.
برای مثال این جستجو را من بر روی جدول 1(Table1) و جدول 2 (Table2) انجام میدم.فرض میکنیم شما عبارت Book را جستجو کرده اید و همه جداول شما فیلدهای BookName و Explain را دارند.


ExecQuery.Close;
ExecQuery.Sql.Clear;
ExecQuery.Sql.Append('Insert Into MyTable Select BookName,Explain From Table1 Where BookName
Like ''%Book%''');
ExecQuery.ExecSQL



همین کار را برای جدول دوم انجام میدهیم.



ExecQuery.Close;
ExecQuery.Sql.Clear;
ExecQuery.Sql.Append('Insert Into MyTable Select BookName,Explain From Table2 Where BookName
Like ''%Book%''');
ExecQuery.ExecSQL


این کار را برای تمامی جداول انجام میدهیم.(البته میتوانید اینکار را در یک حلقه انجام دهید)
حالا چیزی را که شما جستجو کرده بودید همه در جدول MyTable ذخیره شده است و شما میتوانید محتویات آنرا به عنوان حاصل جستجو نماش دهید.

as13851365
11-03-2009, 19:32
نمی دونم دقیقا درست فهمیدم یا نه : ( اینجوری فهمیدم که می خواهید یک سری اطلاعات را در تمام جدول ها جستجو کنید ) برای این کار بهتر است از Join استفاده کنید به این صورت می تونید هر اطلاعاتی را که می خواهید به راحتی از تمام جدول ها به دست بیارید ویرایش کنید ...

shahrokhkian
11-03-2009, 20:49
as13851365 عزیز
با توجه به تعریفی که دوستمون از جدولهاش کرده فکر نمیکنم بشه با Join این اطلاعات را بدست آورد.

delphi7
11-03-2009, 23:57
بازم سلام
چون من تا حالا جستجو با دلفی نساختم (قبلا با vb برنامه می نوشتم) موضوع جستجو برنامم رو کامل می گم که اساتید بهتر بتونن راهنمایی کنن:
همون طور که قبلا گفتم 9 تا جدول دارم . می خوام کاربر هر چی که توی کادر جستجو نوشت و زد روی دکمه جستجو برنامه بره توی این 9 تا جدول بگرده و زیر کادر جستجو هر چی که به کلمه در خواستی کاربر شبیه باشه بیاره دقیقا مثل جستجوی گوگل بعد که نتایج جستجو امد کاربر روی هر کدوم رو که کلیک کرد صفحه ای که مربوط به اون اطلاعات هست باز بشه.

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


برای این کار بهتر است از Join استفاده کنید
اگه باید از join استفاده کنم لطفا مقاله ای چیزی در این رابطه معرفی کنید. ممنون 

مشخصات برنا مم و بانک اطلاعاتیم:

بانک اطلاعاتی : Microsoft SQL Server 2005 Standard Edition

زبان برنامه نویسی : Delphi 7

ابزاری که با هاش با بانک ارتباط برقرار می کنم : ADOQuery و ADOConnection

shahrokhkian
12-03-2009, 11:47
برای اینکار شماره جدول وکلید اصلی هر رکورد را هم در MyTable ذخیره کن.
بعد وقتی روی یک رکورد این جدول کلیک میشه شما اول جدول اصلی را با شماره جدول مورد دسترسی قرار میدی بعد با کلید اصلی که داری رکورد مرد نظرت رو توی این جدول پیدا میکنی. حالا به راحتی میتونی اونو نمایش بدی.

delphi7
12-03-2009, 19:38
ممنون از راهنمایی ها تون فقط یه سوال دیگه چطور می تونم نام فیلد رو هم بر گردونم که بدونم داده مال کدوم فیلد هست ؟؟
چون هر فیلد یه بخش برای خودش توی برنامم داره یا ساده تر بگم هر فیلد برای خودش یه textbox و یه TrackBar