# Native Code > برنامه نویسی در Delphi >  مقاله ای در مورد دستورات و روشهای جستجو در دلفی

## JavanSoft

در ادامه سلسله مقاله های راهنمای برنامه نویسان ،مقاله ای برای بررسی نحوه جستجوی اطلاعات در دلفی آماده کردم که متاسفانه چون جدول داشت نتونستم در این فروم قرار دهم 
علاقه مندان به آدرس 
http://wwwModiranGroup.ir
مراجعه فرمایید

درضمن اگر روشهای پیشنهادی خود را برای جستجو بفرمایید ممنون می شوم

----------


## JavanSoft

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

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

----------


## MFCGalaxy

خواستم بدونم شما که مقاله را در بخش اعلانات گذاشتین ... اشکال نداره که من هم مقالات ASP.net ام را اینجا بگذارم ؟
اصلا چرا مقاله ی شما در همون بخش دلفی نیستش ؟؟ ها ؟   
مدیریت پاسخگو !! جواب دهد لطفا !

----------


## JavanSoft

> من هم مقالات ASP.net ام را اینجا بگذارم ؟


مقاله را برای مدیر بخش ارسال کنید 



> اصلا چرا مقاله ی شما در همون بخش دلفی نیستش ؟؟ ها ؟


در همان بخش دلفی است ..اما برای تشویق دیگران به انتقال تجربیات بصورت اعلان در آمده است



> مدیریت پاسخگو !! جواب دهد لطفا !


مدیریت سایت یا بخش ؟

----------


## spicirmkh

سلام دوستان 

ایا روی فیلد memo  می شود جستجو یا فیلتر گذاشت 

با تشکر 
مرتضی

----------


## JavanSoft

> ایا روی فیلد memo می شود جستجو یا فیلتر گذاشت


ببخشید اگر دیر سوالتونو دیدم 
هم بله هم نه 
فیلد Memo اگر به یک Rich Editمتصل نباشد براحتی امکان پذیر است 
اما در بدلیل کد های RichEditاین کار در این حال کمی مشکل است 

من تا قبل از آشنایی با SDACبا یک حلقه While و تابع Posاینکار را می کردم 
اما اکنون مانند یک متن معمولی با یک Memo برخورد می کنم

----------


## NOROOZY

آقا بخش دوم مقاله تون پس کی حاضر میشه ؟؟؟ :roll:

----------


## oracle

جناب آقای وکیلی 
خیلی ممنون از این مطلبتون 
باید به دوستان دیگه عرض کنم که 1 روش دیگر هم برای جستجو هست. آن هم استفاده از ADOQuery1 است. که می خواهم تجربیات نه چندان زیادم رو در اختیار دوستان قرار بدهم.

----------


## JavanSoft

بخش دوم مقاله را بصورت عملی پیاده کردم انشاالله 2 ماه دیگه شروع به نوشتن می کنم 



> باید به دوستان دیگه عرض کنم که 1 روش دیگر هم برای جستجو هست. آن هم استفاده از ADOQuery1 است. که می خواهم تجربیات نه چندان زیادم رو در اختیار دوستان قرار بدهم.


حتما خوشحال می شویم

----------


## oracle

ولی کجا بنویسم.
 :(

----------


## JavanSoft

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

----------


## JavanSoft

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

----------


## fahimi

در مورد Locate متاسفانه بیشتر از 12 کارکتر از فیلد نمی تواند جستجو کند در صورتیکه بیشتر از 12 کارکتر باشد برنامه دچار خطا می شود

----------


## Mah6447

سلام به همگی . اکر دوست داشتید این رو هم آزمایش کنید
فقط کافیست که جزپی از کلمه مورد نظر را چه از ابتدا و چه از میانه کلمه رادرEdit Box تایپ کنیدودر ListBoxنتیجه را مشاهده کنید . منتظر پیشنهادهای بهتر شما عزیزان هستم .....   :) 

Function ZipStr(Str:String):String;
var Str1:String;
    TolStr:Integer;
begin
   Str1:='';
   For tolStr:=1 To Length(Str) Do
   begin
     If Str[tolStr]&lt;>' ' Then
     Str1:=Str1+Str[tolStr];
   end;
   ZipStr:=Str1;

End;

function SearchStrZip(Xstr,Zstr:String):Boolean ;
var int1,int2,i,t:Integer;
    Xs,Zs,Str:String;
begin
 Xs:=ZipStr(Xstr);
 Zs:=ZipStr(Zstr);
 i:=1;
 If Length(Xs)&lt;=Length(Zs) Then
 begin
   SearchStrZip:=False;
   For int1:=1 To Length(Zs) Do
   begin
    Str:='';
    If Xs[i]=Zs[Int1] then
    Begin
    i:=int1;
      For Int2:=1 To Length(Xs) Do
      begin
      If Zs[i]=Xs[Int2] Then
      Str:=Str+Xs[Int2] Else i:=0;
      i:=i+1;
      If Xs=Str Then SearchStrZip:=True ;
      end;
    end;
  end;

 end;

end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var MasStr:String;
         i:Integer;
begin
If Edit1.Text&lt;>'' Then
begin
i:=0;

  With Table1 Do
  begin
  ProgressBar1.Max:=RecordCount;
  DisableControls;
  ListBox1.Clear;
  First;
  While Not Eof Do
  begin
   If SearchStrZip(ZipStr(Edit1.Text),ZipStr(FieldValues['Family']))=True
  Then
   ListBox1.Items.Add(FieldValues['Name']+'----'+FieldValues['Family']);
   ProgressBar1.Position:=ProgressBar1.Position+1;
   Next;
  end;
  EnableControls;
  ProgressBar1.Position:=0;
  end;
end;
end;

----------


## ali643

in hamin code balast ke in joori khana tar hasteshj

Function ZipStr&#40;Str&#58;String&#41;&#58;String; 
var Str1&#58;String; 
TolStr&#58;Integer; 
begin 
Str1&#58;=''; 
For tolStr&#58;=1 To Length&#40;Str&#41; Do 
begin 
If Str&#91;tolStr&#93;&lt;>' ' Then 
Str1&#58;=Str1+Str&#91;tolStr&#93;; 
end; \

ZipStr&#58;=Str1; 

End; 

function SearchStrZip&#40;Xstr,Zstr&#58;String&#41;&#58;Boo  lean ; 
var int1,int2,i,t&#58;Integer; 
Xs,Zs,Str&#58;String; 
begin 
Xs&#58;=ZipStr&#40;Xstr&#41;; 
Zs&#58;=ZipStr&#40;Zstr&#41;; 
i&#58;=1; 
If Length&#40;Xs&#41;&lt;=Length&#40;Zs&#41; Then 
begin 
SearchStrZip&#58;=False; 
For int1&#58;=1 To Length&#40;Zs&#41; Do 
begin 
Str&#58;=''; 
If Xs&#91;i&#93;=Zs&#91;Int1&#93; then 
Begin 
i&#58;=int1; 
For Int2&#58;=1 To Length&#40;Xs&#41; Do 
begin 
If Zs&#91;i&#93;=Xs&#91;Int2&#93; Then 
Str&#58;=Str+Xs&#91;Int2&#93; Else i&#58;=0; 
i&#58;=i+1; 
If Xs=Str Then SearchStrZip&#58;=True ; 
end; 
end; 
end; 

end; 

end; 

&#123;$R *.dfm&#125; 

procedure TForm1.Button1Click&#40;Sender&#58; TObject&#41;; 
var MasStr&#58;String; 
i&#58;Integer; 
begin 
If Edit1.Text&lt;>'' Then 
begin 
i&#58;=0; 

With Table1 Do 
begin 
ProgressBar1.Max&#58;=RecordCount; 
DisableControls; 
ListBox1.Clear; 
First; 
While Not Eof Do 
begin 
If SearchStrZip&#40;ZipStr&#40;Edit1.Text&#41;,ZipStr  &#40;FieldValues&#91;'Family'&#93;&#41;&#41;=Tr  ue 
Then 
ListBox1.Items.Add&#40;FieldValues&#91;'Name'&#93;  +'----'+FieldValues&#91;'Family'&#93;&#41;; 
ProgressBar1.Position&#58;=ProgressBar1.Position+1  ; 
Next; 
end; 
EnableControls; 
ProgressBar1.Position&#58;=0; 
end; 
end; 
end;

----------


## Mohammad S

با توجه به اینکه جستجو روی فیلدهای عددی کمی مشکل است و نمی توان از روش زیر استفاده کرد،
Ajnas_Show.Edit1.Text+'*'
چه روشی برای فیلدهای عددی پیشنهاد می کنید که با مثلا وارد کردن عدد 1، تمام رکوردها با مقادیر، 1، 11،12،124،156، و .... را نشان دهد (البته با دستور Filter بهتر است)
با تشکر :?:

----------


## oracle

ADOQuery1.Active&#58;=false;
  ADOQuery1.SQL.Clear;
  ADOQuery1.sql.Text&#58;='SELECT* FROM namayandeh WHERE n_moder like'+#39+'%'+f1.Text+'%'+#39+' or n_foroshgah like'+#39+'%'+f1.Text+'%'+#39;
  ADOQuery1.Active&#58;=true;



من برای جستجو از این دستور که مربوط به SQL  هست استفاده می کنم که هم تو عدد و هم تو قسمتی از نوشته کار میکنه.
لازم به توضیح هست که اگر #39 را بردارید عدد می شه جستجو کرد. و اگر ٪ رو بردارید اگر همانند نوشته f1 باشه برامون نشون می ده.

----------


## saman.k

سلام
اینم به نظر من اومد.

 Procedure Edit1.change

table1.findnearest([edit1.text]) f

به شرطه اینکه فیلد مورد نظر index شده باشد.جالبه که میشه بر اساس چند فیلد هم جستجو کرد.

----------


## vahid456

من با استفاده از ado conection پایگاه داده ای ساخته ام که بتوانم آنرا بر روی شبکه محلی به اشتراک بگذارم 
آیا با این روش اجازه دسترسی همزمان به کاربران داده مشود؟
                                          پیشاپیش از راهنمائی شما سپاسگذارم :flower:

----------


## JavanSoft

این مقاله خدمت شما 
انشاالله بعد از راه اندازی سایت جدید مابقی مقالات را در انجا خواهید یافت

----------


## JavanSoft

از ادرس WWW.ModiranGroup.Com استفاده کنید

----------


## JavanSoft

دوستان عزیز 
روشهای جستجو بحث ساده ای نیست 
آنچه شما در سایت ModiranGroup.Com می توانید ببینید امکانات پایه دلفی برای جستجو می باشد که با چند ابتکار درهم شده است 

مثالهایی از انچه من فکر می کردم در ادامه مطرح شود بدین گونه می تواند باشد 

1) یک ورودی (با قابلیت Autocompleate) که چنانچه کلمه ای در ان وارد شود با جستجوی تمامی اطلاعات نتیجه را موضوع بندی و ارائه نماید و در صورت انتخاب مستقیما به سراغ مورد برود 

2) همان مساله برای بانکهای Master/Detail تا حد اقل 3 سطح 

3) همان مساله برای همان بانکها تا N سطح 

4) یک ورودی که فرمتی شبیه به Google را پارس و سپس نسبت به فرامین خطی وارد شده واکنش نشان داده و نتایج را با Rankingارائه کند

----------


## rmb_ali

> در ادامه سلسله مقاله های راهنمای برنامه نویسان ،مقاله ای برای بررسی نحوه جستجوی اطلاعات در دلفی آماده کردم که متاسفانه چون جدول داشت نتونستم در این فروم قرار دهم 
> علاقه مندان به آدرس 
> http://wwwModiranGroup.com
> مراجعه فرمایید
> 
> درضمن اگر روشهای پیشنهادی خود را برای جستجو بفرمایید ممنون می شوم


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

آقا تازه فهمیدم چرا اینهمه پست حذف شده داره این تاپیک اگر میشه اون لینک صفحع اول را نیز تصحیح بفرمایید

----------

