Birden Fazla Table Birleştirmesinde Güncelleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
pro_imaj
Kıdemli Üye
Mesajlar: 1364
Kayıt: 18 Oca 2005 05:45
Konum: Dünyadan

Birden Fazla Table Birleştirmesinde Güncelleme

Mesaj gönderen pro_imaj »

Merhaba;

Birden fazla table ile işlem yapıyorum şöyle bir sıkıntım oluyor.

Gridde bu sonuçları listeletiyorum table 1den fazla olduğu için örn

Kod: Tümünü seç

SPIQry.Edit;
SPIQryKod6.Text:='1';
SPIQry.Post;
bu işlemi yapınca
Güncelleme bulunamadı veya daha önce güncellenmiş diyor.

Birleştirmedeki Sql kodum ise

Kod: Tümünü seç

SELECT     FINSAT482.CHK.HesapKodu, FINSAT482.CHK.Unvan1, FINSAT482.STK.MalKodu, 
FINSAT482.STK.MalAdi, CONVERT(char(12), 
                  
    CAST(FINSAT482.SPI.Tarih - 2 AS datetime), 103) AS SiparisTarih, 
CONVERT(char(12), CAST(FINSAT482.SPI.TahTeslimTarih - 2 AS datetime), 
103) 
                      AS TahminiTeslimTarih, FINSAT482.STK.Kod2 
AS Kalite, FINSAT482.STK.Kod3 AS APL, FINSAT482.STK.Kod4 AS 
Renk, FINSAT482.STK.Kod12 AS En, 
                      FINSAT482.STK.Kod13 
AS Gram, FINSAT482.SPI.Kod11 AS TopAdeti, FINSAT482.SPI.Kod12 
AS TopSarim, 
                      COALESCE (CAST(FINSAT482.SPI.Kod11 
AS float), 0) * COALESCE (CAST(FINSAT482.SPI.Kod12 AS float), 
0) AS SiparisEdilenMetre, 
                      COALESCE (CAST(FINSAT482.SPI.Kod11 
AS float), 0) * COALESCE (CAST(FINSAT482.SPI.Kod12 AS float), 
0) 
                      * COALESCE (CAST(FINSAT482.STK.Kod12 
AS float), 0) / 100 AS SiparisEdilenM2, COALESCE (CAST(FINSAT482.SPI.Kod11 
AS float), 0) 
                      * COALESCE (CAST(FINSAT482.SPI.Kod12 
AS float), 0) * COALESCE (CAST(FINSAT482.STK.Kod12 AS float), 
0) 
                      * COALESCE (CAST(FINSAT482.STK.Kod13 
AS float), 0) / 100000 AS SiparisEdilenKG, COALESCE (CAST(FINSAT482.STI.Kod11 
AS float), 0) 
                      * COALESCE (CAST(FINSAT482.STI.Kod12 
AS float), 0) AS TeslimEdilenMetre, COALESCE (CAST(FINSAT482.STI.Kod11 
AS float), 0) 
                      * COALESCE (CAST(FINSAT482.STI.Kod12 
AS float), 0) * COALESCE (CAST(FINSAT482.STK.Kod12 AS float), 
0) / 100 AS TeslimEdilenM2, 
                      COALESCE 
(CAST(FINSAT482.STI.Kod11 AS float), 0) * COALESCE (CAST(FINSAT482.STI.Kod12 
AS float), 0) 
                      * COALESCE (CAST(FINSAT482.STK.Kod12 
AS float), 0) * COALESCE (CAST(FINSAT482.STK.Kod13 AS float), 
0) / 100000 AS TeslimEdilenKG, 
                      COALESCE 
(CAST(FINSAT482.SPI.Kod11 AS float), 0) * COALESCE (CAST(FINSAT482.SPI.Kod12 
AS float), 0) 
                      - COALESCE (CAST(FINSAT482.STI.Kod11 
AS float), 0) * COALESCE (CAST(FINSAT482.STI.Kod12 AS float), 
0) AS KalanMetre, 
                      COALESCE (CAST(FINSAT482.SPI.Kod11 
AS float), 0) * COALESCE (CAST(FINSAT482.SPI.Kod12 AS float), 
0) 
                      * COALESCE (CAST(FINSAT482.STK.Kod12 
AS float), 0) - COALESCE (CAST(FINSAT482.STI.Kod11 AS float), 
0) 
                      * COALESCE (CAST(FINSAT482.STI.Kod12 
AS float), 0) * COALESCE (CAST(FINSAT482.STK.Kod12 AS float), 
0) / 100 AS KalanM2, 
                      COALESCE (CAST(FINSAT482.SPI.Kod11 
AS float), 0) * COALESCE (CAST(FINSAT482.SPI.Kod12 AS float), 
0) 
                      * COALESCE (CAST(FINSAT482.STK.Kod12 
AS float), 0) * COALESCE (CAST(FINSAT482.STK.Kod13 AS float), 
0) 
                      - COALESCE (CAST(FINSAT482.STI.Kod11 
AS float), 0) * COALESCE (CAST(FINSAT482.STI.Kod12 AS float), 
0) 
                      * COALESCE (CAST(FINSAT482.STK.Kod12 
AS float), 0) * COALESCE (CAST(FINSAT482.STK.Kod13 AS float), 
0) / 100000 AS KalanKG, 
                      FINSAT482.SPI.EvrakNo 
AS SiparisNo, FINSAT482.KTK.Tip, FINSAT482.KTK.Aciklama, FINSAT482.SPI.Kod6, 
FINSAT482.SPI.SiraNo
FROM         FINSAT482.STI RIGHT OUTER 
JOIN
                      FINSAT482.SPI LEFT OUTER 
JOIN
                      FINSAT482.KTK ON FINSAT482.SPI.Kod4 
= FINSAT482.KTK.Kod LEFT OUTER 
JOIN
                      FINSAT482.STK ON FINSAT482.SPI.MalKodu 
= FINSAT482.STK.MalKodu LEFT OUTER 
JOIN
                      FINSAT482.CHK ON FINSAT482.SPI.Chk 
= FINSAT482.CHK.HesapKodu ON FINSAT482.STI.KaynakSiparisTarih 
= FINSAT482.SPI.Tarih AND 
                      FINSAT482.STI.SiparisSiraNo 
= FINSAT482.SPI.SiraNo AND FINSAT482.STI.IslemTur = FINSAT482.SPI.IslemTur 
AND 
                      FINSAT482.STI.KaynakSiparisNo = 
FINSAT482.SPI.EvrakNo AND FINSAT482.STI.Chk = FINSAT482.SPI.Chk
WHERE     (FINSAT482.SPI.IslemTur = 1) AND (FINSAT482.SPI.SiparisDurumu 
= 0) AND (FINSAT482.KTK.Tip = 93) AND (FINSAT482.SPI.Kod6 <> 
'1')
ORDER BY FINSAT482.SPI.EvrakNo

Başka bir query ile bu quey arasında bağlantımı bulupmu yapmam gerek.
Birden fazla table birleştirmelerinde Edit, post işlemi neden yapılamıyor.

not: Edit, post işlemi yaparken %90 sorunsuz çalışıyor ama nedense bazen böyle bir hata ile karşılaıyorum.

Saygılarımla
Teşekkürler.
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]
_________________
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

datayı sağlayan nesneler her zaman tabloları bir birinden ayırmakta başarılı olamıyor. Bunun için genelde updatesql nesnesi olur yada tablo nesnesi üzerinde updatesql yazma alanı bulunur (deletesql kısmıda vardır) Kullandığın companenti bilmiyorum genel olarak yazdım.
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 »

Sql kodunu AdoQuery Yazıyorum.
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 »

mkysoft yazdı:datayı sağlayan nesneler her zaman tabloları bir birinden ayırmakta başarılı olamıyor. Bunun için genelde updatesql nesnesi olur yada tablo nesnesi üzerinde updatesql yazma alanı bulunur (deletesql kısmıda vardır) Kullandığın companenti bilmiyorum genel olarak yazdım.
Peki Bu olaylara Nasıl bir kullanmım yapmalıyım. ! Zaten Adoquery içindeki sql kodu 5 tane tabloyu birleştiriyor yani ben farkıda anlayamadım doğrusu.

Teşekkürler.
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]
_________________
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

hangi alanın hangi tabloya ait olduğunu ado nesnesi anlayabilir ancak aynı alan iki taboda birden varsa hangisini değiştirmek istediğini çözemeyebilir. ayrıca tablolarının primary key'lerini anlayamadığından tam where şartı yazamayabilir. Adoquery ile fazla uğraşmadım ama şunu deneyebilirsin. ondelete ve onupdate olaylarına kendin gerekli güncellemeleri sağlayacak sql'ler çalıştırttırabilirsin. kullandığın database nedir bilmiyorum ama bana adoquery pek sıcak gelmiyor.

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 »

@mkysoft;
Zaman ayırdığın için teşekkür ederim.

Ben araştırdım bu tip birleştirme sorgularında Update, Delete gibi komutlar kullanılmıyormuş malesef.

Bende sorunu çözmek için farklı bir query ile update işlemini yaparak çözdüm. Kısa bir yol olarak belki olabilr diye düşünüyordum yine işi uzattık iyimi :)

Saygılarımla
Teşekküler.
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]
_________________
iqprog

Mesaj gönderen iqprog »

bu tür sorgularda update ve delete gibi işler yapabilirsin, bunun için updatesql kullanman gerekli.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Kodunuzu incelemedim ama oracle da ufak bir canbazlık yapmıştım :)

viewtopic.php?p=57427#57427

Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
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 @husonet;

Verdiğin linkte evt güzel bir mantık oluşturmuşsun anladığım kadarıyla update yapacğaın tablo ile aynı toployu listeletmişsin fakat burda bana uymayan kısmı Şart kısmında ben Row_ID alanına göre güncelleme yapacağımdan Sadece Row_ID aynı olan satırda Listelenecek buda diğer kayıtların listede görünmemesini sağlayacağı için sorun çıkaracak. :roll:

Saygılarımla
Teşekkür Ederim.
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ı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

hocam o zaman yapılacak tek şey dataset ten update sql ini ayrı yazmak hangi alanların güncellenmesini istiyorsan duruma ve şarta göre ayrı update objectleri oluşturabilirsin...

kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

pro_imaj yazdı:Merhaba @husonet;

Verdiğin linkte evt güzel bir mantık oluşturmuşsun anladığım kadarıyla update yapacğaın tablo ile aynı toployu listeletmişsin fakat burda bana uymayan kısmı Şart kısmında ben Row_ID alanına göre güncelleme yapacağımdan Sadece Row_ID aynı olan satırda Listelenecek buda diğer kayıtların listede görünmemesini sağlayacağı için sorun çıkaracak. :roll:

Saygılarımla
Teşekkür Ederim.
orada yaptığım mantık şuydu...

Bir tabloda ilişkiler id ieye göre değil bir kaçtane string alana göre join eşleşme yapılıyordu buda mantıksızdı ben eşleşen kayıtları buldum ve detay tabloya master tablonun id isini atadım... Join ile bir nevi çektiğim veriyi sağlamlaştırdım denebilir.

Kolay gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Cevapla