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.
dbgrid-cxgrid veri görüntüleme
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: dbgrid-cxgrid veri görüntüleme
Merhaba,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.
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.
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.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 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.
Re: dbgrid-cxgrid veri görüntüleme
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.
-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.
Re: dbgrid-cxgrid veri görüntüleme
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.
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.
Re: dbgrid-cxgrid veri görüntüleme
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.
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.
Re: dbgrid-cxgrid veri görüntüleme
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:
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.
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;
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.