08-09-2019, Saat: 13:29
(30-08-2019, Saat: 20:18)Halil Han Badem Adlı Kullanıcıdan Alıntı:(30-08-2019, Saat: 17:59)bünyamin68 Adlı Kullanıcıdan Alıntı: HALİL HAN BADEM hocam senden bir konu hakkında daha yardım almak istiyorum comboboxa veri tabanından kodlarla veri çekiyorum.Benim istediğim ben comboboxa veri girmeye başladığım anda veriler filtrelensin istiyorum bu filtrelenme işlemi olurken de comboboxun aşağısına benzer kelimeler listelensin tam eşleşme sağlandığında sadece o kelime görünsün istiyorum .kusura bakma isteklerim biraz kafa karıştırı olabilir. kodum var aslında ama sadece ilgili satıra getiriyor süzme yapmıyor kullandığım kod aşağıdadır.
var
i:integer;
begin
With adoquery2 do
begin
close;
sql.clear;
sql.add('SELECT distinct PLAKANO, PLAKANO FROM 2_TARTIM');
open;
combobox1.Clear;
adoquery2.First;
while not adoquery2.Eof do
begin
for i := 1 to adoquery2.FieldCount - 1 do
begin
combobox1.Items.Add(adoquery2.Fields[i].AsString);
end;
adoquery2.Next;
end;
Eğer ki her kelime yazışında sorgu çalıştırırsan bu bir probleme dönüşür. İlk olarak veritabanından gelen bilgileri bir TStringList nesnesine alıp lokalde işlemleri yapmaya başla. TStringList içinden filtreleme yaparak, her kelime yazışında o StringList verisini Combobox ile eşitlersen sadece yazdığın veriler önüne gelecektir. Buna istinaden halihazırda combobox ile yazdığın data AutoComplete özelliği ile seçilmekte.
TStringList nesnesi içerisinde filtreleme yapmak için şu kaynaklara göz atabilirsin:
https://www.tek-tips.com/viewthread.cfm?qid=542080
http://delphigroups.info/2/8c/385336.html
İyi çalışmalar.
HALİL BADEM hocam öncelikle sana teşekkür etmek istiyorum.Tavsiyelerin sayesinde çok yol katettim.Soruma gelince aşağıdaki vereceğim kodda combobox istediğim gibi filtreleme yapıyor ancak aşağıya açılan liste tek satır şeklinde açılıyor ve değiştiremiyorum combobox özelliklerinden gösterilecek satır sayısını 8 yapıyorum ama genede olmuyor. eminim çok küçük bir hatam vardır ama kafayı taktığımdan dolayı bulamadım.Birde kullandığım yöntem programın sağlıklı çalışması açısından doğru mudur bildirirseniz çok memnun olurum. kodlar şu şekilde
procedure AramaYap( strAra: String; AdoQuery1:TAdoQuery );
begin
With AdoQuery1 do
begin
Active := False;
SQL.Clear;
SQL.Add('SELECT PLAKANO FROM 1_TARTIM');
SQL.Add('WHERE 1=1');
SQL.Add('and PLAKANO like '+QuotedStr( strAra+'%' ) + 'order by PLAKANO' );
Active := True;
end;
END;
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: Char);
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('PLAKANO').AsString );
ADOQuery1.Next;
end;
TComboBox(Sender).SelStart := Length(TComboBox(Sender).Text);
TComboBox(Sender).SetFocus;
end;

