Keypress ve Keydown veya hangisi??

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Keypress ve Keydown veya hangisi??

Mesaj gönderen R.K. »

S.A.
Arkadaşlar basit bişey yapmak istiyorum ama istediğim sonucu vermiyor. Formumda 1 tane edit, 1 tane dbgrid var. Formun keypreview özelliğini true yaptım. editin içine girilen değerle başlayan kayıtları getirmeye çalışıyorum. Fakat şöyle bir sorun var. Mesela A tuşuna bastım ve A ile başlayan kayıtların gelmesini istiyorum. A ya ilk bastığımda kayıtlar gelmiyor A'dan sonra ikinci bir harfe bastığımda A ile başlayanlar listeleniyor. Diyelimki AHMET aramak istediğim. edite A yazdığımda birşey olmuyor AH yazdığımda A ile başlayanlar listeleniyor AHM yazdığımda AH ile başlayanlar. Sanki son yazdığım harf select işlemine katılmıyor. Firebird vt ve delphi 2007 kullanıyorum kodlarıda aşağıda yazıyorum (delphi 2006 da denedim sonuç yine aynı 2007'den olmadığı kesin en azından). Hem keypress içinde hemde keydown içinde denedim ama yine sonuç alamadım. Yardımlarınızı bekliyorum arkadaşlar. İyi çalışmalar.

Kod: Tümünü seç

procedure TfrmUrunler.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  dm.dsetUrunler.Close;
  dm.dsetUrunler.SelectSQL.Clear;
  dm.dsetUrunler.SelectSQL.Add('select * from TBL_URUNLER where URUN_ADI like '+
  QuotedStr(edit1.Text+'%'));
  dm.dsetUrunler.Open;
end;
Kullanıcı avatarı
lom
Üye
Mesajlar: 135
Kayıt: 25 Nis 2006 02:37

Mesaj gönderen lom »

Editin Change özelliğine yazmayı dene, ayrıca forumda arama yaparak bulabilirsin sorunun cevabını..
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Mesaj gönderen R.K. »

lom arkadaşım teşekkürler böyle çalıştı. Ben neden düşünemedim bilmiyorum aceleden galiba :(. Ama hala keypress ve keydown olaylarında bu kodun işlemediğini anlamadım. Bununla ilgili bilgisi olan arkadaşlar yazarsa sevinirim. Kolay gelsin...
Kullanıcı avatarı
proteknikblg
Üye
Mesajlar: 35
Kayıt: 27 Nis 2006 08:39
Konum: Sivas
İletişim:

Mesaj gönderen proteknikblg »

s.a.
edit nesnesinin içeriği keydown olayından sonra değişiyor sen keypres veya keydown olaylarında arama işlemi yaptırdığında edit nesnesinin içeriği henüz değişmemiş oludğu için bastığın harfi göz ardı etmiş gibi davranıyor. change olayında arama yaptırdığın zaman edit nesnesin son durumu ile arama yaptırmış oluyorsun.
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Merhaba,

Sorununuzu cozdugunuze sevindim ancak farkli bir konuya deginmek istiyorum. Her Editchange eventi tetiklendiginde yeni bir SQL Cumlesi kurup,

Kod: Tümünü seç

SELECT * FROM TABLO WHERE ADI LIKE 'A%'
seklinde bir sorgu yaratiyorsaniz, bence bu yontemden vazgecin.
Onun yerine datasetinizin Filter ozelligini kullanarak kayitlari listelemenizi tavsiye ederim, cunku her change tetiklendiginde eger veritabanina ulasip kayitlari getirmeye calisiyorsaniz bu size bayagi pahaliya mal olacaktir.

Tabi dediklerim, filterlik bir durum varsa, yani konuyla alakali olarak bilmedigim ve filterdan daha fazlasina ihtiyac duyacaginiz bir i$lem yoksa gecerli..

Iyi calismalar, kolay gelsin.
R.K.
Üye
Mesajlar: 82
Kayıt: 02 Nis 2007 12:05
Konum: Adana

Mesaj gönderen R.K. »

Glen selam. Kusura bakma delphi konusunda yeniyim ve çok fazla bilgim yok. Özellikle filter konusunda. Biraz daha açman mümkün mü? Vt olarak firebird kullanıyorum db access içinde ibx bileşenleri kullanıyorum ama inan hiç filter metoduyla bişey yapmadım. Dediğinde haklısın her edit.change olayında böyle bir kodu çalıştırmak ama şimdilik yaptığım programa yetiyor. Ama senin tavsiye edeceğin bir yöntem varsa kesinlikle bundan sonraki programlarım da kullanabilirim. Kolay gelsin...
Glen
Üye
Mesajlar: 277
Kayıt: 12 Eki 2005 11:58

Mesaj gönderen Glen »

Merhabalar,

Estagfurullah ne kusura bakmasi.. IBX bilesenlerini hic kullanmadim, ama eminimki bu ozellik mevcuttur.

Filter adindan anlasildigi gibi filtrelemek icin kullanilan bir ozelliktir.

Ornegin,

Kod: Tümünü seç

Select * from KISILER
gibi bir sql cumlesi ile tum kayitlari getirdiniz. Ve KISILER adındaki tablonuzun,
AD, SOYAD, TELEFON... gibi alanlari kapsiyor varsayalim.

Datasetinizin, filtreleme islemi icin kullandigi 2 adet property vardir.

Filter : string
Filtered : boolean

Kod: Tümünü seç

Table1.Filter := 'ADI = ''ONUR''';
Table1.Filtered := True;
Gibi bisey yazarsaniz, ADI alani sadece ONUR olan kayitlari getirilecektir.

Kod: Tümünü seç

Table1.Filter := 'ADI LIKE ''O%''';
Table1.Filtered := True;
Gibi bir filtreleme uygularsaniz, ADI alani O ile baslayan kayitlar getirilecektir.

Kod: Tümünü seç

Table1.Filter := 'ADI = ''ONUR'' AND SOYADI = ''AK''';
Table1.Filtered := True;
Gibi bir filtreleme uygularsaniz, ADI alani ONUR ve SOYADI alani AK olan kayitlar getirilecektir.

Table1.Filter := 'ADI = ''ONUR''';
Table1.Filtered := False;

dedigimizde ne gelecektir? Tum kayitlar :) Cunku filtered ozelligini false durumuna getirdigimiz icin Filter kisminda yazani dataset es gececektir :P

Mantigini anlamissinizdir sanirim, yani bastan tum veriler getiriliyor, ve getirilen verilerin icerisinde filtreleme uygulaniyor yani veritabani ile her defasinda kayit getirip goturme islemi yapilmiyor.

Bence kayitlari getireceginiz alandaki kayit sayisi fazla olsa bile, her defasinda her harf degisikliginde veritabanina baglanip kayitlari getirmek benim dedigim yonteme gore daha masrafli..

Anlatamadigim birsey olduysa, tekrar sorarsaniz elimden geldigince yanitlamaya calisirim.

Iyi calismalar, kolay gelsin.


ONEMLİ NOT Eger sartli bir SQL cumlesi kuruyorsaniz, ve bazi menulerinizde kayitlari eger o sartlara gore BİR kere getiriyorsaniz, dedigim yontemi kullanmayin. Cunku tum kayitlari getirmek istemediginiz durumlar olabilir. Ancak dedigim gibi tum kayitlarin arasindan bazi kayitlar herharf degisikliginde cekilecekse dedigim yontemi kullanin.
Cevapla