PDA

View Full Version : حرفه ای: جستجو سريع متن تايپ شده در ديتابيس در تكست باكس



Site Admin
جمعه 21 اسفند 1388, 21:13 عصر
با سلام
من ميخوام در برنامه ام جستجو سريع متن تايپ شده در ديتابيس در تكست باكس رو انجام بدم يعني وقتي كاربر در فيلد نام ع را تايپ ميكنه هر چي در آن فيلد با ع شروع ميشه بياره يه چيزي مثل excel
ترجيحا كامپوننت

yashar666
جمعه 21 اسفند 1388, 21:37 عصر
در رویداد on KeyPress این رو بنویس



ADOQuery1.Filtered:=False;
ADOQuery1.Filter:= 'FieldName'+' Like '+QuotedStr('%'+Edit1.Text+'%');
if Edit1.Text <> '' then
ADOQuery1.Filtered:=True
else
ADOQuery1.Filtered:=False;

yashar666
جمعه 21 اسفند 1388, 21:42 عصر
معادل sql هم هست


ADOQuery1.SQL.Clear;
form1.ADOQuery1.SQL.Text:=
'select * from Telephon where FieldName like'+quotedstr('%'+edit1.Text+'%');
ADOQuery1.Open;

Site Admin
جمعه 21 اسفند 1388, 21:49 عصر
با تشكر از دوست عزيز ولي من ميخوام edit مثل ليست باز شده و موارد تايپ شده را نمايش دهد دقيقا مثل excel

SAASTN
جمعه 21 اسفند 1388, 22:27 عصر
در رویداد on KeyPress این رو بنویس
با تشکر از پاسختون، ولی اگه ممکنه قسمت کدتون رو داخل تگ CODE بنویسید. نوشتن کد با این صورت توی بعضی browser ها مشکل داره و درست خونده نمیشه.

BORHAN TEC
جمعه 21 اسفند 1388, 22:38 عصر
كاري نداره!!!
كدت رو درون رويداد OnChange كنترل Edit بنويس.
با نحوه ارسال دستورات SQL هم كه آشنا هستي.
كافي هست كه دستورات رو به شكل زير ارسال كني.
مثال:

'Select * from TableName where FieldName =%' + Edit1.text + '%;'
:قلب:

Jozef
شنبه 22 اسفند 1388, 10:02 صبح
دوست عزیز Site Admin ، اگر که کامپوننت سفارشی combobox باشه موردی نداره؟ یه روش بلدم

nilidelphi
شنبه 22 اسفند 1388, 11:14 صبح
با سلام

دوست گرامی اگه میخوای با زدن یک حرف تمامی کلماتی که با اون حرف آغاز بشن برات زیر edit لیست بشه کارهایی رو که میگم بکن :
1-یه Edit تو فرم بزار.
2-دقیقا زیر همان Edit یه کامپوننت DBLookupListBox هم بزار.
3-خواسیت DAtaSource کامپوننت را رو روی دیتاسورسی که به کوئریت وصله تغییر بده.
4-خواسیت Autosize کامپوننت رو true کن.
5-خواسیت visibility کامپوننت رو false کن
6-در رویداد OnChange ادیت کد زی رو قرار بده:




if edit1.text<>'' then
begin
with ADOQoary do
begin
sql.clear;
sql.add('select * from dbname where feildname like '+#39+edit1.text+'%'+#39+' ;');
open;
end;
dblookuplistbox1.visibility:=true;
end
else
begin
with ADOQoary do
begin
sql.clear;
sql.add('select * from dbname ;');
open;
end;
dblookuplistbox1.visibility:=false;
end;



امیدوارم کمک کرده باشه.

البته بعد از این که کلمات برات لیست شد بقیه عملیات به خودت ربط داره که می خوای چی کار کنی.

موفق و سربلند باشید.
:تشویق:

حسین شهریاری
شنبه 22 اسفند 1388, 11:31 صبح
1-به جاي Edit از Combobox استفاده كن
2-يه كوئري روي فرم قرار بده
3-كد زير را توي رويداد OnChange اون بنويس.خودم تست كردم جواب داد

if ComboBox1.Text<>'' then
begin
ComboBox1.Items.Clear;
ADOQuery1.SQL.Text:='select * from propertis where kname like '+''''+ComboBox1.Text+'%'+'''';
ADOQuery1.Close;
ADOQuery1.Open;
while not ADOQuery1.Eof do
begin
ComboBox1.Items.Add(ADOQuery1.FieldValues['kname']);
ADOQuery1.Next
end;
end;

درضمن proppertis نام جدول فرضي و Kname فيلد فرضي است كه شما بايد بنا بر برنامه خودتون تنظيمش كنيد.

موفق باشيد

Site Admin
شنبه 22 اسفند 1388, 12:41 عصر
با تشكر از دوست گرامي nilidelphi خروجي برنامه شما به شكل زير است خوبه ولي درون ليست سلكت نميشه كه كاربر با اينتر انتخاب كنه در ضمن اگر ميشه يه روش ساده تر انجام بديم كه نياز به تنظيمات و كد كمتري باشه آخه من چندين با بايد اين كارو انجام بدم
http://barnamenevis.org/forum/attachment.php?attachmentid=45541&stc=1&d=1268553284
من چنين چيزي رو ميخوام

http://barnamenevis.org/forum/attachment.php?attachmentid=45540&stc=1&d=1268473221

nilidelphi
شنبه 22 اسفند 1388, 12:56 عصر
دوست گرامی اگه می خوای آیتم های درون DBlookuplistbox سلکت بشن باید این کامپوننت رو به یه جدمل دیگه وصل کنی .

من گفتم که بقیه کارا بستگی به نوع عملیاتی داره که انجام میدین.؟

البه می تونین کارهای زیادی انجام بدین فقط کمی خلاقیت می خواد. امیدوارم منظورمو خوب متوجه شده باشید؟

برای مثال می تونید به جای DBlookuplistbox از یک DBGrid استفاده کنید و در رویداد OnClick کامپوننت مواردی که لازمه را بنویسی.
البته بگم یه تغییرات اضافه تر از آنچه که در پست قبلی گفتم باید بکنی مثلا Title رو از جدول برداری یا کاری بکنی که کاربر متوجه نشه که با یک Grid طرف.

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

رو گفته هام فکر کن اگه متوجه نشدی بگو برات یه مثال میزارم.

موفق و سربلند باشید

:تشویق:

nilidelphi
شنبه 22 اسفند 1388, 13:10 عصر
دوست گرامی

من در پست قبلی گفتم که بعد از انجام عملیات و لیست کردن کلمات بستگی به خودتون داره که چه کار کنید.

اگه DBlookuplistbox سلکت نمی کنه مشکل از اینجاست که باید به یک جدول دیگه هم متصل باشه که داده را در آن بریزه.
شما میتونید در رویداد OnClick کامپوننت آیتم سلکت شده را توی جای دیگه بریزید یا هر عملیاتی که دوست دارید انجام بدید(با شماره ی ایندکس آیتم میتونید به داده ی آیتم دیسرسی داشته باشید).
البته اگه با DBlookuplistbox راحت نیستید میتونید از DBGrid نیز به همون روشی که گفتم استفاده کنید فقط باید در ظاهر DBgrid یه تغییراتی انجام بدی تا کابر متوجه نشه که داره با DBgrid کار میکنه.

نمیدونم چقدر تونستم منظورمو برسونم.

اگه نتونستین متوجه بشین بگین تا براتون یه نمونه بزارم.

موفق و سربلند باشید.

:تشویق:

Jozef
شنبه 22 اسفند 1388, 16:10 عصر
راحتر اینه که اطلاعات را در ComboBox بریزید و خاصیت AutoDropDown و Sorted آن را True کنید.
بدون کد نویسی

hadisalahi2
یک شنبه 23 اسفند 1388, 10:18 صبح
اگه خیلی واجبه ، بهتره از کاموپوننت های TMS یا DEV استفاده کنی . یا اینکه خودت یک کامپوننت بنویسی.
ولی در حالت عادی بهترین گزینه همون Combobox خود دلفیه.
یا حق

fire.angle
شنبه 28 اسفند 1389, 00:27 صبح
لطفا یه نمونه از کار با dbgrid رو بزارید

خیلی فوریه !!!!!!

eshge89
پنج شنبه 03 مرداد 1392, 11:06 صبح
اگه خیلی واجبه ، بهتره از کاموپوننت های TMS یا DEV استفاده کنی . یا اینکه خودت یک کامپوننت بنویسی.
ولی در حالت عادی بهترین گزینه همون Combobox خود دلفیه.
یا حق
تو كامپوننت tms بايد از كدوم گزينه استفاده كنيم ؟؟؟؟؟