Yani Bu Kodları Hazırlayıp Atmışsınız Onda Bir Problemim Yokta Delphi Bilgim Sınırlı
Bana lazım olan tek şey projeniz yaptığınız gibi edit comboBox gibi açılma ve açılan listesine eleman ekleme ilk defa görüyorum bu editin açılma olayının sizin kodlarınız arap alfabesi gibi gözüktü gözüme
gridler ado connectionlar havada uçuşuyo
Combobox gibi kelime tamamlayıcılı arama nasıl?
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
Şimdi bu projede bir göz yanıltmacası yaptım.
- Beklenen metod nedir ? bir veri girişi yapılırken veritabanınada onunla başlayan benzer kayıtlar bulunur, sonra sıralı olarak bir combobox veya başka bir listeye döngü ile aktarılır.
- Bu işlem silsilesi akıcı olmaz. Çünkü her defasında listeyi sil baştan yeninden boşalt/doldur/boşalt ... sürer gider. İlk harfe basışta belki de 10.000 kayıt gelecektir. Neyse...
- Uyguladığım yöntem ise, veritabanı sorgusu yaptığımızda, bu veritabanı içeriğini klasik ve bildiğimiz standart bir TDBGrid'e yönlendirdim.
- Yani sorgu sırasında online olarak bizzat çıkan sonuçlar görüntüleniyor.
- Bana sadece bu sonuçların yansıdığı TDBGrid'in eni boyu yüksekliği ve yeriyle oynamak kaldı.
- Bonus olarak da bulunan kayıtların bir kısmını EDIT üzerinde yazılı olan kısım kadarıyla koyu siyah, takip eden karakterleri de kırmısı yapan bir boyama işi ekledim.
- DBGrid'in eni boyuyla oynarken her satırın yüksekliğini belirleme imkanı Delphi tasarımcıları tarafından direkt olarak verilmemiştir. Onun için bir CLASS tanımlayıp, satır yüksekliğini, DBGrid'in atalarından gelen propery'lerinden faydalandım. Bunun için TArmanGrid dedim ki sistem DBGrid gibi değil başka bir şeymiş gibi değerlendirsin.
- Bu metodu uygulamak zorunda değilsin. Yukarıda ilk bahsettiğim sıradan metodu bir ComboBox ile rahatça uygulayabilirsin. Benim amacım görselliği arttırmak idi. Bu etüd proje boyanarak dilediğim şekle büründürülebilir niteliktedir.
- Beklenen metod nedir ? bir veri girişi yapılırken veritabanınada onunla başlayan benzer kayıtlar bulunur, sonra sıralı olarak bir combobox veya başka bir listeye döngü ile aktarılır.
- Bu işlem silsilesi akıcı olmaz. Çünkü her defasında listeyi sil baştan yeninden boşalt/doldur/boşalt ... sürer gider. İlk harfe basışta belki de 10.000 kayıt gelecektir. Neyse...
- Uyguladığım yöntem ise, veritabanı sorgusu yaptığımızda, bu veritabanı içeriğini klasik ve bildiğimiz standart bir TDBGrid'e yönlendirdim.
- Yani sorgu sırasında online olarak bizzat çıkan sonuçlar görüntüleniyor.
- Bana sadece bu sonuçların yansıdığı TDBGrid'in eni boyu yüksekliği ve yeriyle oynamak kaldı.
- Bonus olarak da bulunan kayıtların bir kısmını EDIT üzerinde yazılı olan kısım kadarıyla koyu siyah, takip eden karakterleri de kırmısı yapan bir boyama işi ekledim.
- DBGrid'in eni boyuyla oynarken her satırın yüksekliğini belirleme imkanı Delphi tasarımcıları tarafından direkt olarak verilmemiştir. Onun için bir CLASS tanımlayıp, satır yüksekliğini, DBGrid'in atalarından gelen propery'lerinden faydalandım. Bunun için TArmanGrid dedim ki sistem DBGrid gibi değil başka bir şeymiş gibi değerlendirsin.
- Bu metodu uygulamak zorunda değilsin. Yukarıda ilk bahsettiğim sıradan metodu bir ComboBox ile rahatça uygulayabilirsin. Benim amacım görselliği arttırmak idi. Bu etüd proje boyanarak dilediğim şekle büründürülebilir niteliktedir.
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
yani sizin kullandığınız yöntemde biz editi liste gibi görüyoruz ama altında çıkan liste değil sadece şekliyle oynanmış datagrid nesnesi bende tren misali kodlara bakıp durdum sabahtan beridir
peki data grid ile uğraşmaktansa comboBox üstünde uygulamak daha pratik bir yola çıkmaz mı
sizin dediğiniz gibi 10.000 tane kayıt çıkabilir ama daha az kodla uğraşmak her zaman kolaylık sağlar.
peki data grid ile uğraşmaktansa comboBox üstünde uygulamak daha pratik bir yola çıkmaz mı
sizin dediğiniz gibi 10.000 tane kayıt çıkabilir ama daha az kodla uğraşmak her zaman kolaylık sağlar.
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
- 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....

- 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;

- Dosya ekleri
-
- ComboBox_AutoComplete.rar
- Combobox AutoComplete
- (151.89 KiB) 146 kere indirildi
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
Teşekkür Ederim Zaman Ayırıp Uğraştığınız İçin Son Örneğinizdeki Kodlamayı Programıma Entegre Edebildim..
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
Merhaba;
Muharrem hocamız pratik cevabı (sizin istediğiniz) vermiş. Hocamızın da dediği gibi siz yazdıkça sürekli yazdığınız harflere göre tekrardan filtreleme yapacağı için gecikme olacaktır. Veri tabanı kendi makinenizde olduğu zaman bunu farketmeyebilirsiniz ama Network üzerinden yada İnternet üzerinden böyle bir filtreleme programın gecikmesine bazende yanıtvermemesine sebep olacaktır. Kayıt sayısı 10.000 ve üzeri vs. olduğunda özellikle. Bunun yerine Örneğin "Delphi Türkiye" için "Delphi" yazdıktan sonra Enter dediğinizde filtrelemeyi yaptırsanız yukarıdaki yazdığım sorunları yaşamazsınız. Yani filtreleme için kullanıcının "Enter" tuşuna basmasını isteyebilirsiniz.
Başarılar..
Muharrem hocamız pratik cevabı (sizin istediğiniz) vermiş. Hocamızın da dediği gibi siz yazdıkça sürekli yazdığınız harflere göre tekrardan filtreleme yapacağı için gecikme olacaktır. Veri tabanı kendi makinenizde olduğu zaman bunu farketmeyebilirsiniz ama Network üzerinden yada İnternet üzerinden böyle bir filtreleme programın gecikmesine bazende yanıtvermemesine sebep olacaktır. Kayıt sayısı 10.000 ve üzeri vs. olduğunda özellikle. Bunun yerine Örneğin "Delphi Türkiye" için "Delphi" yazdıktan sonra Enter dediğinizde filtrelemeyi yaptırsanız yukarıdaki yazdığım sorunları yaşamazsınız. Yani filtreleme için kullanıcının "Enter" tuşuna basmasını isteyebilirsiniz.
Başarılar..
Nasibinde varsa, alırsın karıncadan bile ders, Nasibinde yoksa, bütün cihan önüne serilse, sana ters..
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
Tavsiye İçin Teşekkür Ederim Dikkate Alıcam..
Re: Combobox gibi kelime tamamlayıcılı arama nasıl?
Kullanıcı milleti işin her zaman kolayına kaçar, o nedenle yazdıktan sonra entere basmak çoğuna zor gelir o nedenle 10.000 kayıt sorunu ile ilgili yukarıdakilere bir ekleme yapmak isterim;
SQL Cümlesini limitli sonuç verecek şekilde ayarlarsanız hem hız hem de zaman probleminiz kalmaz. Mesela SQL Server ve Access için TOP, MySQL için LIMIT ifadeleri işinizi görecektir. Hatta direkt örneği modifiye edeyim;
SQL Cümlesini limitli sonuç verecek şekilde ayarlarsanız hem hız hem de zaman probleminiz kalmaz. Mesela SQL Server ve Access için TOP, MySQL için LIMIT ifadeleri işinizi görecektir. Hatta direkt örneği modifiye edeyim;
Kod: Tümünü seç
uses
...
Type
TSQLSyntaxType = ( MsSQL, MySQL, MsAccess{, SQLite, Oracle, DB2});{ SQL Cümlemizi bu standartlara göre üreteceğiz }
...
Implementation
...
// SQL Arama Fonksiyonu
procedure AramaYap(aSQLTipi: TSQLSyntaxType; intMiktar: Integer; strAranan, strField, strTablo: String; AdoQuery: TAdoQuery);
function TQ(aText: String): String;
begin
Result := QuotedStr(Trim(aText) + '%' );
end;
begin
With AdoQuery do begin
Active := False;
SQL.Clear;
if (aSQLTipi = MsSQL) or (aSQLTipi = MsAccess) then begin
SQL.Add(format( 'SELECT TOP %0:d %1:s FROM %2:s WHERE %1:s LIKE %3:s ORDER BY %1:s ASC '
, [intMiktar, strField, strTablo, TQ(strAranan)]));
end else
if (aSQLTipi = MySQL) then begin
SQL.Add(format( 'SELECT %0:s FROM %1:s WHERE %0:s LIKE %2:s ORDER BY %0:s ASC LIMIT %0:d'
, [intMiktar, strField, strTablo, TQ(strAranan)]));
end;
Active := True;
end;
end;