PDA

View Full Version : نمایش نتایج حاصل از جستجو در یک dbgrid..........?



tik_tak
سه شنبه 30 بهمن 1386, 10:34 صبح
با سلام
فرض کنید من یه جدول دارم دارای فیلد name که اینا محتویاتشه:

امیر رضایی
امیرحسین صدری پور
امیر علی کیوانفر
امیر رضا طلوعی
امیر محمد تهرانی
امیر صادق صالحی
و. ......

میخوام وقتی کاربر "امیر" رو جستجو کنه در dbgridتمام اونایی که اول اسمشون امیر هست

نشون داده بشه .....

میشه بگید چه طوری ....
خودم اینجوری حدس زدم


if DataModule2.adotable2.locate('name',edit1.text,[loPartialKey])=true then
begin
دستورات نشون دادن در دی بی گرید(که بلد نیســـــــــــتم!
اینجارو همینجوری شاو مسیج گرفتم ببیینم خط اول خطا میده یا نه؟ ...که ارورداد)



ولی با این حال این دستور اجرا نمیشه ...خطاهاشم اینه:


[error]nit5.pas(78):undeclared identifier:'lopartialkey
[error]nit5.pas(78):incompatible type:'TLocatrOption' and 'Integer
[Fatal Error]Project1.dpr(9):Could not compile used unit 'Unit5.pas'

ممنون میشم اگه راهنماییم کنید..

Mah6447
سه شنبه 30 بهمن 1386, 10:45 صبح
یک مقاله خوب در این رابطه جناب آقای مهندس وکیلی تهیه کرده اند .

Amir_Safideh
سه شنبه 30 بهمن 1386, 11:01 صبح
میخوام وقتی کاربر "امیر" رو جستجو کنه در dbgridتمام اونایی که اول اسمشون امیر هست

خوب برای این فیلتر که مدنظر شماست دستور locate جواب نمیده این دستور فقط رکورد یافته شده رو به عنوان رکورد جاری قرار میده و فیلتری انجام نمیده برای این کار شما بهتره که از ADOQueryها استفاده کنید و دستور Select رو به این صورت بنویسید :


Select name
From ADOTable2
Where name Like RTrim(:@Name)+'%'
بعد هم کوئری رو با دستور زیر اجرا کنی :

with ADOQuery1 do
begin
Close;
Parameters.ParamByName('@Name').Value := Edit1.Text;
SQL;
Open;
end;

در ضمن برای این کار باید DBGrid شما به DataSource که برای این ADOQuery قرارداده اید مربوط شده باشد .

ferihapt
سه شنبه 30 بهمن 1386, 11:20 صبح
میخوام وقتی کاربر "امیر" رو جستجو کنه در dbgridتمام اونایی که اول اسمشون امیر هست
نشون داده بشه .....میشه بگید چه طوری ..
به نام خدا با سلام
دوست عزیز برای جستجو آنلاین میتونی از adoQuery استفاده کنی برای اینکار یک دیبیگرید یک datasource و یک ado[FONT=Tahoma]Query ویک edit روی فرم
خود قرار بده و دستورات زیر را در editchange قرار بده ابتدا یک متغییر ازز نوع رشته ای تعریف کن و فیلد ای که میخوای جستجو کنی را برابر متغییر قرار بده مانند زیر
;'s:='name'
و سپس با استفاده از دستورات اس کیو ال جستجو را انجام بده مانند مثال زیر
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(format('select * from ersal where '+s+' like' ' %s%%' ' '
,[Edit1.Text]));
ADOQuery1.Open;

tik_tak
سه شنبه 30 بهمن 1386, 13:23 عصر
سلام ممنون از همه :
آقای ami_safidehr اون کدهایی رو که نوشتین امتحان کردم درست نشد

ببینید من یه Adotable2 دارم و یه datasource2و یه Adoconection1 ویه Adoquery1 که همه اینا در datamodule2 قراردارن.....وپایگاه داده م اکسسه

فک کنم باید این کدا یه جاهاییش تغییر کنه ....نمیدونم کدوم قسمتش...
میشه اینم بهم بگین
ممنونم ازتون

tik_tak
سه شنبه 30 بهمن 1386, 17:13 عصر
سلام
من واسه حل همین مسئله خودم اینجوری عمل کردم ولی کامل نیست...
الا ن میگم کجاش کامل نیست:
از اول :
تو صفحه یه دیبی گرید و یک ادیت و یک باتون دارم:
واسه آوردن کوئری این جوری عمل کردم :
تنظیمات :


datamodule2{
adoconenection1---->connectionstring----->adrese paigah dadam (access)
adotable1---------->connection----------->adoconnection
tablename------------>t_karbar
active--------------->true
datasource1-------->adotable1
adoquery1---------->adoconnection1
datasource2-------->adoquery1
}
dbgride1-------------->datamodule2.datasource2


میخوام با کلیک روی باتون هر چی که در ادیته همون امیر همه اسمای مشابهش بیاد در دیبی گرید1
فقط من اینجوری کوئری نوشتم .....بگید واسه این که اینجوری اتفاق بیفته تو s چی
بنویسم::::؟؟


procedure TForm1.Button1Click(Sender: TObject);
var
s:string ;
begin
s:='??????????????????????????????' ;
DataModule2.ADOQuery1.Active:=false;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.add(s);
DataModule2.ADOQuery1.Active:=true;
end;

Touska
سه شنبه 30 بهمن 1386, 17:36 عصر
procedure TForm1.Button1Click(Sender: TObject);
Var
S : String ;
begin
S := 'Select * From Table1 Where Name Like '+QuotedStr(Trim(Edite1.Text)+'%') ;
DataModule2.ADOQuery1.Active := False;
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add(S);
DataModule2.ADOQuery1.Active := True;
end;

موفق باشید :)

tik_tak
سه شنبه 30 بهمن 1386, 18:27 عصر
سلام
مرسی حل شد tuoska
ممنونم

حالا اگه بخوام نام درست برابر =edit2.text + edit2.text باشه اون s چه طوری دستوراش؟

SYNDROME
سه شنبه 30 بهمن 1386, 21:00 عصر
حالا اگه بخوام نام درست برابر =edit2.text + edit2.text باشه اون s چه طوری دستوراش؟
اینجوری بنویس.


S := 'Select * From Table1 Where Name = '+QuotedStr(Trim(Edite1.Text)) ;

موفق باشید