View Full Version : چگونه با استفاده از دستور select جستجو کنم
ehsanbn
جمعه 22 آبان 1388, 17:11 عصر
چگونه با استفاده از دستور select جستجو کنم که نتيجه آن در يک DBGrid نمايش داده شود؟
alinikaein
شنبه 23 آبان 1388, 09:08 صبح
سلام دوست عزيز؛
در صورتي كه از ADO استفاده ميكنيد، كافيه دستور SELECT خودتون را درون يك ADOQuery بنويسيد، ADOQuery را به ADOConnection كه قبلاً تنظيمات Connection String اون را درست كردهايد وصل كنيد، يك DataSource ايجاد و اون را به ADOQuery وصل كنيد، DBGrid را به DataSource وصل كنيد. هر موقع نياز داشتيد، ADOQuery را Open و يا Active = True كنيد.
همچنين ميتونيد از ADOStoredProcedure هم استفاده كنيد كه براي SELECTهايي كه نياز به پردازشهاي مشابه در تعداد دفعات متعدد دارند استفاده كنيد تا در دفعات بعدي در صورت استفاده از SQL Server، سريعتر به جواب برسيد.
يا علي... موفق باشيد...
حسین شهریاری
شنبه 23 آبان 1388, 09:21 صبح
سلام دوست عزيز؛
در صورتي كه از ADO استفاده ميكنيد، كافيه دستور SELECT خودتون را درون يك ADOQuery بنويسيد، ADOQuery را به ADOConnection كه قبلاً تنظيمات Connection String اون را درست كردهايد وصل كنيد، يك DataSource ايجاد و اون را به ADOQuery وصل كنيد، DBGrid را به DataSource وصل كنيد. هر موقع نياز داشتيد، ADOQuery را Open و يا Active = True كنيد.
همچنين ميتونيد از ADOStoredProcedure هم استفاده كنيد كه براي SELECTهايي كه نياز به پردازشهاي مشابه در تعداد دفعات متعدد دارند استفاده كنيد تا در دفعات بعدي در صورت استفاده از SQL Server، سريعتر به جواب برسيد.
يا علي... موفق باشيد...
با تشکر از جواب دوستمون فقط به عرض برسونم پس از جستجو(یعنی همان ارسال دستورSelect) برای تحریک Dataset حتما Adoquery را Close و سپس Open کنید
ehsanbn
یک شنبه 24 آبان 1388, 18:09 عصر
دوست گرامي alinikaein همان کاري که شما گفتيد انجام دادم ولي پس از انجام select تمام رکوردهاي جدول را نشان مي دهد.
در ضمن من در برنامه نوشته ام که بلافاصله بعد از باز شدن فرم جدول يک غير فعال و سپس فعال شود. همچنين در کنار دکمه جستجو يک dbgrid قرار دادم که به همان ديتابيس اصلي وصل است و رکوردهاي آن را نشان مي دهد.
Tiam121
یک شنبه 24 آبان 1388, 18:57 عصر
دوست گرامي alinikaein همان کاري که شما گفتيد انجام دادم ولي پس از انجام select تمام رکوردهاي جدول را نشان مي دهد.
خوب اگر شما ميخواين ركوردهاي خاصي نمايش داده بشه بايد با استفاده از where توي دستور select اين كارو انجام بدي
بقيه كارايي كه كرديد مشكلي نداره ميتونيد هر جايي از برنامه يك دستور جستجو داشته باشيد
براي مثال
select * from Customer where Balance>10000
و يا هر شرط ديگه اي
ehsanbn
یک شنبه 24 آبان 1388, 23:40 عصر
من دستور select را به صورت زير نوشتم:
adotquery1.sql.add(format('select*from Table_name where Name=''%s''',[edit1.text]
;(([
ولي باز هم تمام رکوردهاي جدول را نمايش مي دهد.
حسین شهریاری
دوشنبه 25 آبان 1388, 09:32 صبح
سلام
اینطوری بنویس:
adoquery.sql.clear
adoquery.sql.text:='select * from table where Name like'+''''+edit1.text+'''''
adoquery.close
adoquery.open
البته اون چهار تا سینگل کوتیشنی که پشت دستور دوم است باید جلوی edit1.text باشد
که بدلیل تداخل فارسی و لاتین متن بهم خورده بود
موفق باشید
alinikaein
دوشنبه 25 آبان 1388, 10:58 صبح
جواب دوست خوبم آقاي شهريار كاملاً درسته، ولي يه تغيير كوچولو من بهش ميدم:
adoquery.close
adoquery.sql.text:='select * from table where Name like'+ QuotedStr(Edit1.Text + '%' )
adoquery.open
نيازي به استفاده از Clear نيست. بهتره قبل از تغيير دستورات، Close كني و بعد Open كني. به جاي اين همه سينگل كوتيشن، از QuotedStr استفاده كن. شهريار جان هم يادش رفته بود % را اضافه كنه.
يا علي... موفق باشي...
حسین شهریاری
دوشنبه 25 آبان 1388, 11:08 صبح
بله بله کاملا درسته!!!!!
دیگه مشکلات زندگی امونمونا بریده دوست عزیز
ehsanbn
دوشنبه 25 آبان 1388, 12:17 عصر
از تمام دوستان گرامي ممنون هستم.
لازمه چند نکته بگم:
1- جستجو انجام مي دهد و هيچ خطايي ندارد ولي پس از جستجو هيچ رکوردي را در bgird نمايش نميدهد.
2- در فرم يک dbgird قرار دادم که به محض باز شدن فرم تمام اطلاعات مربوط به جدول را نمايش ميدهد (يعني تمام رکوردهاي مربوط به جدول).
3- ميخواهم وقتي که کاربر دکمه جستجو زد نتيجه جستجو روي همان dbgird (که در نکته شماره 2 گفتم) نمايش بدهد. به عبارت ديگر چون قبل از جستجو dbgird فرم تمام رکوردها را نشان مي دهد حالا ميخواهم پس از جستجو در dbgird فرم فقط نتيجه جستجو نمايش دهد. {در فرم يک dbgird قرار دارد که هم بايد قبل از جستجو تمام رکوردهاي جدول را نمايش دهد و هم بايد بعد از جستجو فقط رکوردهايي را نمايش دهد که در جستجو خواسته شده}
4- کاربر بايد اطلاعات را جهت جستجو از طريق يک از 2 عدد TEdit وارد کند و سپس روي دکمه جستجو بزند تا نتيجه در dbgird نمايش داده بشود.
اميدوارم که منظورم را رسانده باشم.
Tiam121
دوشنبه 25 آبان 1388, 13:14 عصر
1-dbgrid يك dataset ميخواد كه اون dataset حتما بايد به adoqeuery وصل شده باشه كه شما با اون داري عمل جستجو رو انجام ميدي پس شما با يك adoqeuery در ابتدا عمل جستجوي كلي رو انجام بده بعد با همون adoqeuery عمل جستجوي مورد نظر با پارمترهاي مورد نيازت رو(هر dbgrid فقط ميتونه يك dataset در هر زمان داشته باشه)
2- دستورات براي جستجو رو هم بايد توي رويدادonclick دكمه مورد نظرت قرار بدي و پارامتر هاي مورد نياز براي جستجو رو هم كه از طريق edit هاي مورد نظر به طريقي كه گفته شده قبلا ارسال ميكني
فكر نميكنم ديگه مشكل خاصي باشه
دلفــي
دوشنبه 25 آبان 1388, 17:52 عصر
در ادامه توضیحات دوستان عرض کنم اگر کارهایی که دوستان گفتند رو انجام دادی و باز نتیجه ای نگرفتی به فیلد Name در جدولت مراجعه کن و ببین اگه دارای مقادیر Null بود یه کاراکتر فرضی مانند کاراکتر "-" رو در ون اون قرار بده بعد بیا عمل جستجو رو انجام بده چون دستور Like برای مقادیر خالی (Null) به درستی عمل نمی کنه .
alinikaein
دوشنبه 25 آبان 1388, 22:59 عصر
در ادامه توضیحات دوستان عرض کنم اگر کارهایی که دوستان گفتند رو انجام دادی و باز نتیجه ای نگرفتی به فیلد Name در جدولت مراجعه کن و ببین اگه دارای مقادیر Null بود یه کاراکتر فرضی مانند کاراکتر "-" رو در ون اون قرار بده بعد بیا عمل جستجو رو انجام بده چون دستور Like برای مقادیر خالی (Null) به درستی عمل نمی کنه .
اين كار اصلاً كار خوبي نيستا!!!!
حسین شهریاری
سه شنبه 26 آبان 1388, 09:36 صبح
با سلام
دوست گرامی اگر گرید شما به یک دیتاسورس وصل باشه و اون دیتا سورس حاوی اطلاعات کوئری باشه
دیگه مشکلی نیست.چون نرم افزار خودم هم همین کارا میکنه.
اگه دوست داشتی بگو تا یه نمونش را با اکسس بنویسم براتون بزارم.
ehsanbn
چهارشنبه 27 آبان 1388, 12:09 عصر
با تشکر مجدد از همه دوستان. توضيحاتي را که گفتيد را خيلي متوجه نشدم ولي مشکل حل شد.
اما راه حل خودم که باعث شد مشکل حل بشه: کدي که در دکمه جستجو قرار دادم بدين صورت است که گفتم اول با همان adoquery جدول 2 را پاک کند و سپس از دستور select...into... استفاده کردم که باعث شد آن رکوردهاي را که مي خواهم از جدول 1 را در جدول 2 کپي کند و در آخر گفتم که خاصيت اسم جدول مربوط به adotable را جدول 2 قرار بده و dbgrid را هم به جدول 2 متصل کن و اطلاعات را نمايش بده .
با اينکار توانستم اطلاعات خود را از طريق جستجو با همان dbgird نمايش بدهم.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.