dbgrid-cxgrid veri görüntüleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

dbgrid-cxgrid veri görüntüleme

Mesaj gönderen bnyamin »

Arkadaşlar merhaba projemde cxdblookupcombobox kullanıyorum 5 adet;

1.Soru: Her biri ayrı tabloya bağlı ama kayıt yapıldığında sadece ortak bir tabloya kayıt yapılıyor. Ben bu ortak tablonun bilgilerini dbgridde görüntülüyorum ancak sadece ID numaraları görünüyor. Durum cxgridde de aynı bu ıd numaralarına karşılık gelen bilgileri nasıl görüntüleyebilirim.

2.Soru:Örneğin ben cxdblookupcombobox1 de seçtiğim ürüne göre ortak tabloda bu ürünle aynı satırda farklı sütunlarda yer alan ürün stok bilgisi,ürünün grup adı,ürünün raf adı,ürünün cinsi gibi bilgilerin sırasıyla diğer cxdblookupcomboboxlara otomatikman gelmesini istiyorum.
Bu her iki konuda da yardımlarınızı bekliyorum şimdiden teşekkür ediyorum.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid-cxgrid veri görüntüleme

Mesaj gönderen ertank »

bnyamin yazdı: 17 Eki 2019 07:54 Arkadaşlar merhaba projemde cxdblookupcombobox kullanıyorum 5 adet;

1.Soru: Her biri ayrı tabloya bağlı ama kayıt yapıldığında sadece ortak bir tabloya kayıt yapılıyor. Ben bu ortak tablonun bilgilerini dbgridde görüntülüyorum ancak sadece ID numaraları görünüyor. Durum cxgridde de aynı bu ıd numaralarına karşılık gelen bilgileri nasıl görüntüleyebilirim.
Merhaba,

Bu sorunuzun cevabı ekranda gösterdiğiniz veriyi SELECT SQL ile ve JOIN kullanarak ilgili tabloların değerlerini eşleştirerek gösterebilirsiniz. Her bir 5 adet tablonun yapısını, ortak tablo olarak ekranda gözüken tablonun yapısını ve kullandığınız database sunucu bilgilerini paylaşmadan örnek vermek mümkün olmayacaktır.
bnyamin yazdı: 17 Eki 2019 07:54 2.Soru:Örneğin ben cxdblookupcombobox1 de seçtiğim ürüne göre ortak tabloda bu ürünle aynı satırda farklı sütunlarda yer alan ürün stok bilgisi,ürünün grup adı,ürünün raf adı,ürünün cinsi gibi bilgilerin sırasıyla diğer cxdblookupcomboboxlara otomatikman gelmesini istiyorum.
Bu her iki konuda da yardımlarınızı bekliyorum şimdiden teşekkür ediyorum.
Eğer sorunuzu doğru anladı isem bunu yapabilmek için kod yazmanız gerekli. Seçilen ürüne göre diğer ilgili tablolarda bağlantılı satırları tablo/query içinden Query.Locate() veya Tablo.Locate() kullanarak eşleştirmeniz gerekir.

Eğer değişiklik zamanında (Dataset Edit modunda) bu işlemi yapmak istiyorsanız bu durumda ilgili kodları tespit edip ilgili alanlara değerleri kayıt etmelisiniz Query.FieldByName('').AsString := Deger gibi.
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: dbgrid-cxgrid veri görüntüleme

Mesaj gönderen bnyamin »

Sayın Ertank hocam 1.Soru için önerdiğiniz cevap işime yaradı onun için ayrıca teşekkür ediyorum. Sanırım 2. soruyu açıkça anlatamadım onu daha da detaylandırayım. Şöyle ki;

-Kullandığım veri tabanı acces,
-adoconnection ve adoquery ile bağlantı yapıyorum.

-5 Adet cxdblookupcomboxum var,
tablom şu şekilde ;
urunkodu-----urunadı -----urunstokgrubu------urunrafkodu-----------urundurum
12345868----GOLDPLAN---ZİRAİ İLAÇ ------------- A-001-------------STOKLARDA MEVCUT

şimdi cxdblookupcombobox1 de ürün kodunu seçtiğimde otomatikman
cxdblookupcombobox2'ye ürün adı,
cxdblookupcombobox3'e ürün stok grubu,
cxdblookupcombobox4'e ürün raf kodu,
cxdblookupcombobox5'e ürün durumu, son kayıt bilgileri gelsin istiyorum. Özetle ben stok kodunu seçtiğimde ürünle ilgili diğer bilgiler en son hangi ürün kaydedildiyse otomatikman ilgili comboboxlara dolsun istiyorum.

umarım açık bir şekilde anlatabilmişimdir.Cevabınız için şimdiden teşekkür ediyorum.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid-cxgrid veri görüntüleme

Mesaj gönderen ertank »

Daha önce verdiğim cevabın aynısını vereceğim.

cxdblookupcombobox1 değiştiği boş bir query bileşeni kullanarak seçilen ürün koduna ait diğer değerleri arayıp (birden fazla tabloda ise query birden fazla sorgu ile çalışacak) karşılıklarını bulmalısınız.

Bulduğunuz karşılıkları ortak tablo alanlarına Query.FieldByName('').AsString := Deger şeklinde atamalısınız. Ortak tablo alanlarında değişim olduğunu cxdblookupcombobox bileşeni algılayıp ekranda ilgili karşılıklarını gösterecektir.
bnyamin
Üye
Mesajlar: 44
Kayıt: 01 Mar 2019 12:55

Re: dbgrid-cxgrid veri görüntüleme

Mesaj gönderen bnyamin »

Sayın Ertank hocam 1. soruyu unutalım bu konuda hata bende her şeyi tam olarak anlatmadım.Şimdi diğer tabloları sadece liste amaçlı kullanıyorum. asıl ve tek kullandığım bütün bilgilerin toplandığı ortak tablo ve ben bu tabloyla işimi görüyorum.Kayıtların Id kısmınını almaktan ziyade ad kısmını almayı uygun gördüm ve işimi de gördü aşağıda paylaşmış olduğum kod sayesinde normal comboboxlarda istediğim işlemi yapıyor ama cxdblookupcomboboxda hata veriyor hatanın içeriği şöyle (stack overflow)

With ADOQuery1 do
begin
close;
sql.clear;
sql.add('SELECT ürünadi,ürünstokgrubu,ürünrafkodu,üründurum FROM ortak_tablo WHERE ürünkodu=:ürünkodu');
Parameters.parambyname('ürünadi').Value :=cxdblookupcombobox1;
open;
begin
cxdblookupcombobox2 := ADOQuery1.fieldbyname('ürünadi').AsString;
cxdblookupcombobox3 := ADOQuery1.fieldbyname('ürünstokgrubu').AsString;
cxdblookupcombobox4 := ADOQuery1.fieldbyname('ürünrafkodu').AsString;
cxdblookupcombobox5 := ADOQuery1.fieldbyname('üründurum').AsString;

bahsettiğim üzere bu kodu normal comboboxda kullandığımda sorunsuz çalışıyor ama cxdblookupcomboboxda kullandığımda 'stack overflow' hatası alıyorum bu arada bu kodu her iki comboboxun onchange olayına yazıyorum.
Biliyorum sorduğum sorular yüzünden değerli vakitlerinizi alıyorum ama her defasında affınıza sığınıyorum.
ertank
Kıdemli Üye
Mesajlar: 1650
Kayıt: 12 Eyl 2015 12:45

Re: dbgrid-cxgrid veri görüntüleme

Mesaj gönderen ertank »

Kullandığınız kod hatalı. Variant bir değişkene cxdblookupcombobox nesnesini eşleştirmeye çalışmışsınız. Aşağıdaki kısımda da cxdclookupcombobox nesnesine string eşleştirmeye çalışmışsınız.

Ayrıca mantık hatanız var. Arama yaptığınız tablo ortak tablo olmayacak. Tanımın kayıtlı olduğu tablo olacak. Mesela ürün stok grubp kodu ürün stok grup açıklaması tanımının yapıldığı tablo. Eğer her bir değer ayrı tabloda ise ilgili tablo sayısı kadar sorgu çalıştırmanız gerekir. Başka bir deyişle aşağıdaki kod benzer şekilde farklı tablolar ve alanlar için birden fazla defa yazılmalı.

Bulduğunuz değerleri cxdbcombobox içine değil, ortak tablo alanlarına kayıt etmeniz gerekiyor. cxdblookupcombobox bileşenleri değişikliği algılayıp ekranda bilgileri gösterecektir.

Aşağıdaki kodu deneyin:

Kod: Tümünü seç

  with ADOQuery1 do
  begin
    Close;
    SQL.Text := 'SELECT ürünadi,ürünstokgrubu,ürünrafkodu,üründurum FROM <URUNTANIMTABLOSU>WHERE ürünkodu=:ürünkodu';
    Parameters.ParamByName('ürünadi').AsString := cxDBLookupComboBox1.Text;
    open;
    begin
      <ortaktablo.FieldByName('urunadi').AsString> := ADOQuery1.fieldbyname('ürünadi').AsString;
      <ortaktablo.FieldByName('urunstokgrubu').AsString> := ADOQuery1.fieldbyname('ürünstokgrubu').AsString;
      <ortaktablo.FieldByName('urunrafkodu').AsString> := ADOQuery1.fieldbyname('ürünrafkodu').AsString;
      <ortaktablo.FieldByName('urundurum').AsString>:= ADOQuery1.fieldbyname('üründurum').AsString;
    end;
  end;
Yukarıdaki örnek kod içinde "<ortaktablo.FieldByName('urunadi').AsString>" olarak gözküne ifadeyi düzeltip kendi bileşen isimlerinizi yazmanız ve "<" ve ">" karakterlerini silmeniz gerekir.

NOT: Eğer siz ekranda ürünstokgrubu görmek için cxdblookupcombobox içinde ürünstokgrubukodu alanı kullanıyor iseniz ADOQuery1 içinden bu değeri ortak tabloya eşitlemeniz gerekir. cxdblookupcombobox otomatik olarak ilgili koda ait açıklamayı ekranda gösterecektir.
Cevapla