Grid double click

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
slm_sakal
Üye
Mesajlar: 24
Kayıt: 09 Ağu 2005 10:03
Konum: İstanbul
İletişim:

Grid double click

Mesaj gönderen slm_sakal »

Slm arkadaşlar. Kayıt sorgulama yaptığım bir formum var. Edit kutusuna girilen bilgileri aynı formdaki dbgrid içerisinde listeletiyorum (sorgulatıyorum).

Kod: Tümünü seç

IBQuery1.Close;
IBQuery1.Sql.Clear;
IBQuery1.Sql.Add('select * from DATA Where ADI like '''+Edit1.text+''' Order By ADI');
IBQuery1.Open;
Buraya kadar herşey normal. Ama dbgridde listelettiğim kayıtlardan herhangi bir tanesine çift tıkladığımda başka formdaki DBEdit bileşenlerinde tıklanan kaydı göstermesini bi türlü yapamadım. DBEditlerin olduğu form kayıt yaptığım form, IBTable bileşenini kullanıyorum. Sorgulama yaptığım formda ise IBQueryi kullanıyorum. Bu konuda önerileriniz nelerdir? Yardım edebilir misiniz?
BeLeSCafe.Net IRC Serverları
irc.belescafe.net - http://www.belescafe.net
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Merhaba.
İlgili forma yönlenirken bir parametre ile kaydın id'sini ya da benzer bir bilgiyi göndermek ve formun örneğin show yordamında bunu kontrol ederek o kaydı getirmek çözüm olacaktır..
Kolay gelsin..
Kullanıcı avatarı
slm_sakal
Üye
Mesajlar: 24
Kayıt: 09 Ağu 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen slm_sakal »

Çok güzel, tam aradığım şey, mantık olarak doğru ben de öyle düşünüyordum. :D. Yaww kusura bakmazsanız bu dediklerinizi nasıl yapıcam? Kayıt no alanı var, benzersiz alan. Başka hiçbir kayıta aynı numara verilmiyor. Bu numarayı nasıl parametre olarak yollayabilirim ana forma? Daha önce hiç böyle bir işlem yapmamıştım. Acemiliğime verin. :oops:
BeLeSCafe.Net IRC Serverları
irc.belescafe.net - http://www.belescafe.net
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Merhaba,

Bahsettiğiniz olayda sorguyu yaptığınız table (query) ile dbgiridin bağlı bulunduğu table (query) farklı ise. Şöyle bir çözüm yolu sizi sonuca ulaşatıracaktır.

dbgrid ondbclick olayına;
aşağıdaki kodu ekliyeceksiniz !!!!

Kod: Tümünü seç

IBQueryDBgridinbaglibulundugu.Close; 
IBQueryDBgridinbaglibulundugu.Clear; 
IBQueryDBgridinbaglibulundugu.Sql.Add('select * from DATA Where ADI like '''+IBQuery1ADI.Text+''' Order By ADI'); 
IBQueryDBgridinbaglibulundugu.Open;

Saygılarımla
Kolay gelsin. :wink:
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

Ekelemeyi unutmuşum.

Not: Bu tür sorgularda. like kullanımı önerilmez !!!

Bilgilerinize.

Kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Forumun temel etiği balık vermek yerine tutmayı öğretmek olduğundan genel olarak kod yerine mantığı anlatmayı uygun görüyoruz..

Bu, kullandığınız programlama metoduna göre değişiklik gösterebilen bir konudur..Örneğin Public bir değişken tanımlayıp ilgili ID bilgisini bu değişkene atayarak formun show yordamında bunu kullanabilirsiniz...Keza ilgili tablo eğer kapanmadıysa birkaç kontrol eşliğinde aktif kaydın ID'sini alarak bu sorunu çözebilirsiniz...Ya da formu sonradan create ediyor ve bunu bir procedure, function aracılığı ile yapıyorsanız parametreyi ilgili alt yordamla da geçirebilirsiniz vs..

Kolay gelsin..
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

@slm_sakal hocam.

eğer halen sorun yaşıyorsanız diğer vtdeki alanlarıda yazarsanız ben yardımcı olabilirm.

kolay gelsin.
Gün gelecek, dilleri, elleri ve ayakları yapmış oldukları bütün kötülükleri tek tek bildirerek aleyhlerinde şahitlik edecektir. [Nur Suresi 24]
_________________
Kullanıcı avatarı
slm_sakal
Üye
Mesajlar: 24
Kayıt: 09 Ağu 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen slm_sakal »

@pro_imaj hocam, bu yazdığınız kod dbgrid in doubleclick olayında sorgulama yapmıyor mu? Ben zaten sorgulamayı yapıyorum ve istediğim kayıtları da gridde listeletiyorum. Sorun sorgulamada değil ki. İstediğim şey listelenmiş kayıtlardan hangisine çift tıklarsam ana formdaki DBEditlerin içerisinde kaydı aktif hale getirmesi. Ana formda IBTable, sorguladığım formda da IBQueryi kullanıyorum. Like konusuna gelince onu mecbur olarak kullanıyorum. Programı kullanan mesela adı Ahmet yerine Ah yazıyor ve ilgili tüm kayıtları getirmesini istiyor. Bu konuda yapabileceğim bir şey yok. Birden fazla veritabanı yada tablo kullanmıyorum, tek bir tablodan kayıt, sorgulama gibi işlemleri yapıyorum. (Firebird kullanıyorum) Tabloda olan alanlar KAYITNO, ADI, SOYADI, ANAADI ve BABAADI.

@bLue aLonE hocam, forumun amacını biliyorum, olayın mantığını siz söylediniz, ben zaten daha önceden böyle bir yol düşünüyordum. Ama nasıl yapıldığını bilmediğim için yardım almak zorunda kaldım. Zaten mesaj sayıma bakarsanız foruma ne kadar az sorun girişi yaptığımı da anlarsınız. Önerileriniz için saolun, göz önünde bulunduracağım.
BeLeSCafe.Net IRC Serverları
irc.belescafe.net - http://www.belescafe.net
Kullanıcı avatarı
selman
Üye
Mesajlar: 664
Kayıt: 04 Ara 2003 12:06
Konum: İzmir

Mesaj gönderen selman »

selam
aslında mesajları okudmda pek fazla anlamadım işin açıkcası böyle bir işlem için neden Ibqueryde kullanıyorsun.yoksa İbquery farklı bir VT mi
kayıtların bulunduğu tablo farklı mı eğer ikiside farklı ise
bu şekilde dolambaçlı yollardan ve sorgulama yapmaktan geçmek sizi uğraştırabilir:Olayı birde şu mantıkla düşünebilirsiniz.Atıyorum Ibqueryni bağlı olduğu dbgrid var ve farklı bir yer dede Ibtableda kayıtlar var
demi>
---------
Şimdi siz
IF Ibquery1.Locate('ADSOYAD',Ibtable1Adsoyad.AsString,[]) THEN begin
//

burayada
IBtable1.fieldbyname('Kod').asstring:=Ibquery1.fieldbyname('Kod').asstring;
//bu şekilde iki tablo arasında Adsoyad ile ilişkili olarak varsaydım.
end;
bunun gibi yapılabilir.Kolay gelsin.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Kullandığım yöntemin kodlarını yazayım, buyrun;

Gridin DoubleClick yordamında aktif kaydın Id'si bu procedure'ye parametre verilmek suretiyle procedure çağrılıyor...

Kod: Tümünü seç

procedure TfrmPresentList.ShowDataScreen (Id : String);
begin
  Application.CreateForm  (TfrmPresentCard, frmData);
  if Assigned (frmData) then
    frmData.ExecData (TfrmPresentCard, Id);
end;
Bu da çağrılan formun show yordamı;

Kod: Tümünü seç

  if not SameText (CurrId, EmptyStr) then
  begin
    if not dsrData.DataSet.Active then
      dsrData.DataSet.Active := True;
    if not dsrData.DataSet.Locate('ID', CurrId, [loCaseInsensitive]) then
      dsrData.DataSet.Append
    else
      GetPresentInfo;
  end
  else
    dsrData.DataSet.Append
Belirtmem gereken diğer şey, CurrId ana formda bir property'dir...Güncel Id'yi temsil ediyor..

Kolay gelsin..
Kullanıcı avatarı
slm_sakal
Üye
Mesajlar: 24
Kayıt: 09 Ağu 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen slm_sakal »

@selman hocam, yaptığım işi şöyle anlatim size. İki farklı formum var. Form1 ve Form2. Form1'den veritabanına kayıt yapıyorum, Form2'den ise aradığım ismi bulmak için Edit kutuları yardımıyla sorgulama yapıyorum. Ada göre arama yapıp çıkan sonuçları dbgrid içerisinde listeletiyorum. Tablo da veritabanı da tek. Ana tablo var, her türlü işlemi oradan yapıyorum. Kaydetmek için IBTable kullandım, sorgulamak için ise IBQuery kullandım (SQL). Her ikisi de tek bir tablo üzerinden işlem yapıyor. İşin özü buraya kadar kısaca kaydetmek ve okutmak (sorgulatmak). İstediğim şey ise Griddeki aktif kaydı çift tıkladığımda Form1'deki alanlar içerisinde (DBEditler) kaydın aktif duruma geçmesi ve düzenleme modunu alması. Bu şekilde kayıtları değiştirmem daha kolay olacak. Şu anda çalıştığım yerde bu tür bi sistem kullanılıyor. Ben de bunun aynısını yapmaya çalışıyorum. Umarım derdimi anlatabilmişimdir.
BeLeSCafe.Net IRC Serverları
irc.belescafe.net - http://www.belescafe.net
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Mesaj gönderen pro_imaj »

slm_sakal yazdı:@pro_imaj hocam, bu yazdığınız kod dbgrid in doubleclick olayında sorgulama yapmıyor mu? Ben zaten sorgulamayı yapıyorum ve istediğim kayıtları da gridde listeletiyorum. Sorun sorgulamada değil ki. İstediğim şey listelenmiş kayıtlardan hangisine çift tıklarsam ana formdaki DBEditlerin içerisinde kaydı aktif hale getirmesi. Ana formda IBTable, sorguladığım formda da IBQueryi kullanıyorum. Like konusuna gelince onu mecbur olarak kullanıyorum. Programı kullanan mesela adı Ahmet yerine Ah yazıyor ve ilgili tüm kayıtları getirmesini istiyor. Bu konuda yapabileceğim bir şey yok. Birden fazla veritabanı yada tablo kullanmıyorum, tek bir tablodan kayıt, sorgulama gibi işlemleri yapıyorum. (Firebird kullanıyorum) Tabloda olan alanlar KAYITNO, ADI, SOYADI, ANAADI ve BABAADI.
Merhaba,
Yukarıdaki yazdıklarınıza istinaden şöyle çook kısa bir işlemle sorunu çözebilrsiniz hatta bilmeden çözmüşsünüz bile :)

dbgridin OnDblClick olayına aynen şunu yapın hocam.
SorguFormu.Close;
DbeditlerinOlduguForm.Show;


Hocam bunu yaparsanız olacak. yani siz tek bir Query kullandığınız için zaten okayıtın üzerine tıkladığınızda dbeditlerin içerisindeki bilgiler sizin tıkladığınız kayıta ait bilgilerle dolup taşacak :D

Hocam eğer sorun olursa size küçük bir örnek yapıp yollayabilirim.

Saygılarımla
Çalışmalarınızda başarılar.
Kolay gelsin.
Kullanıcı avatarı
slm_sakal
Üye
Mesajlar: 24
Kayıt: 09 Ağu 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen slm_sakal »

pro_imaj, o dediğiniz olayı daha önceden yapmıştım. Ama olmadı. Showla ana formu gösteriyorum ama ilgili kayıta konumlanmıyor. Programın açılışında son kayda gitmesini istedim (ibtable1.last;) onun için olabilir mi? Yada sorgulama yaptığım bileşen IBQuery, düzenleme ve kaydetme yaptığım bileşen ise IBTable. Bunların farkı olabilir mi? Eğer öyle olur diyorsanız site adminlerimiz de izin verirlerse bana yollayabilir misiniz. Mail adresim imza bölümünde yazıyor. Biliyorum bunlar forum kurallarında yasak ama adminler de görecekler ki sorunu çözebilmiş değiliz, bundan başka çare de yok gibi geliyor.
BeLeSCafe.Net IRC Serverları
irc.belescafe.net - http://www.belescafe.net
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Yanlış anlaşılma olmasın sırf merakımdan soruyorum, paste ettiğim kodları değerlendirdiniz mi?
Kullanıcı avatarı
slm_sakal
Üye
Mesajlar: 24
Kayıt: 09 Ağu 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen slm_sakal »

Çok özür diliyorum o kodları şimdi gördüm, demeseniz farkında olmayacakmışım. Kusura bakmayın kafamı çok kurcalıyo bu konu böyle küçük atlamalar olabiliyor şimdi sizin verdiğiniz kodlara bakıyorum.
BeLeSCafe.Net IRC Serverları
irc.belescafe.net - http://www.belescafe.net
Cevapla