Merhaba , Mrmarman hocamızın şu konu başlığı ( Combobox gibi kelime tamamlayıcılı arama nasıl?) altında böyle bir cevabı ve örneği vardı inceleyin belki işinize yarayabilir.
viewtopic.php?f=2&t=3291&p=174446&hilit ... ma#p174446
mrmarman yazdı:- Dilersen üçüncü parti bu işi yapan bileşenler de kullanabilirsin, veya DBLookUpComboBox ile veritabanından direkt güdümleyebilirsin.
- Klasik ComboBox kullanmak istersen de sana senin anlayacağın şekilde basitleştirilmiş halini aşağıda veriyorum. Sana yeterlidir umarım. Örnek proje de ekte....
Kod: Tümünü seç
procedure TForm1.FormShow(Sender: TObject);
begin
ADOQuery1.Connection := ADOConnection1;
DataSource1.DataSet := AdoQuery1;
ADOConnection1.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;'
+'Data Source='+ExtractFilePath(Application.Exename) + 'Database.mdb';
end;
// SQL Arama Fonksiyonu
procedure AramaYap( strAra: String; AdoQuery:TAdoQuery );
begin
With AdoQuery do
begin
Active := False;
SQL.Clear;
SQL.Add('SELECT M_Name FROM DivXTurk');
SQL.Add('WHERE 1=1');
SQL.Add('AND M_Name like '+QuotedStr( strAra+'%' ) + ' ORDER BY M_Name' );
Active := True;
end;
end;
procedure TForm1.ComboBox1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if Key <> vk_Return then
begin
AramaYap( TComboBox(Sender).text, ADOQuery1 );
TComboBox(Sender).Items.Clear;
TComboBox(Sender).AutoComplete := False;
TComboBox(Sender).DroppedDown := True;
while NOT ADOQuery1.Eof do
begin
TComboBox(Sender).Items.Add( ADOQuery1.FieldByName('M_Name').AsString );
ADOQuery1.Next;
end;
TComboBox(Sender).SelStart := Length(TComboBox(Sender).Text);
TComboBox(Sender).SetFocus;
end else
begin
TComboBox(Sender).DroppedDown := False;
end;
end;

veya şuna bakarsanız buda bu güzel hazır bir örnek Mrmarman hocamızdan
viewtopic.php?f=2&t=3291&hilit=+combobox
Ayrıca ekli dosyada sana kendi hazırladığım bir örnek gönderiyorum, combox içinde arama yapabilirsin.
aşağıda ki kod ile istediğin tablolarda arama yapabilirsin. Unutmadan birden çok tabloda arama yapamak istersen tablo adarını virgül ile ayırarak bir çok tablo ekleyebilirsin.
Kod: Tümünü seç
procedure TDATA.COMBO_DOLDUR(DATA, ALAN, SECILEN_KAYIT:STRING; ISLEM_GOREN_COMBO:TObject);
VAR
X:INTEGER;
Sorgu:TQuery;
begin
Sorgu:=TQuery.Create(Self);
Sorgu.DatabaseName:=ANA.EXEKLASOR+'DATA';
WITH SORGU DO BEGIN
SQL.Clear;
SQL.Add('Select '+ALAN+' FROM '+DATA);
SQL.Add('ORDER BY '+ALAN);
OPEN;
FieldDefs.Update;
END;
(ISLEM_GOREN_COMBO AS TComboBox).Items.Clear;
FOR X:=0 TO Sorgu.RecordCount-1 DO BEGIN
(ISLEM_GOREN_COMBO AS TComboBox).Items.Add(Sorgu.FieldByName(ALAN).AsString);
IF SECILEN_KAYIT=Sorgu.FieldByName(ALAN).AsString THEN (ISLEM_GOREN_COMBO AS TComboBox).ItemIndex:=X;
Sorgu.Next;
END;
Sorgu.Close;
Sorgu.Free;
end;
procedure TDATA.COMBO_ARA(DATA, ALAN, ARANAN:STRING; BULUNACAK_ALANLAR :ARRAY OF STRING ; DOLDURULACAK_NESNELER :ARRAY OF TObject);
VAR
X:INTEGER;
Sorgu:TQuery;
SEL:STRING;
begin
IF LENGTH(BULUNACAK_ALANLAR)>0 THEN BEGIN
Sorgu:=TQuery.Create(Self);
Sorgu.DatabaseName:=ANA.EXEKLASOR+'DATA';
WITH SORGU DO BEGIN
SQL.Clear;
SEL:='Select ';
FOR X:=0 TO LENGTH(BULUNACAK_ALANLAR)-1 DO BEGIN
SEL:=SEL + BULUNACAK_ALANLAR[X];
IF X< LENGTH(BULUNACAK_ALANLAR)-1 THEN SEL :=SEL + ',';
END;
SQL.Add(SEL+' FROM '+DATA);
SQL.Add('Where '+ALAN+' = '+QuotedStr(ARANAN));
OPEN;
FieldDefs.Update;
END;
FOR X:=0 TO LENGTH(BULUNACAK_ALANLAR)-1 DO BEGIN
IF DOLDURULACAK_NESNELER[X].ClassName='TEdit' then (DOLDURULACAK_NESNELER[X] as TEdit).Text:=Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).AsString;
IF DOLDURULACAK_NESNELER[X].ClassName='TComboBox' then begin
if Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).DataType=ftString then (DOLDURULACAK_NESNELER[X] as TComboBox).Text:=Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).AsString;
if Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).DataType=ftInteger then (DOLDURULACAK_NESNELER[X] as TComboBox).ItemIndex:=Sorgu.FieldByName(BULUNACAK_ALANLAR[x]).AsInteger;
end;
END;
Sorgu.Close;
Sorgu.Free;
END;
end;
Kullanımı
Kullanımı şöyleydi
combobox hangi formda ise mesela Form1 de, o formun creatine şunu yazıyorduk.
COMBO_DOLDUR('musteridata','musterikodu','',Form1.ComboBox1);
comboboxın onchange kısmına şunu yazıyorduk.
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
COMBO_ARA('musteridata','musterikodu',ComboBox1.Text,['musteriadı'],[ComboBox1]);
end;
kolay gelsin