ADO ile SQL sorgusunu tüm aylara tek tabloda uyarlamak

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Merhaba Arkadaşlar,
Userform ile veriler.accdb access veritabanındaki tablolardan giderler tablosuna sql sorgusu ile bağlanarak tüm gider kalemlerinin tüm aylara karşılık gelen gider toplamlarını ay ay görüntülemek istedim, ancak başaramadım.
Tum giderlerin her hangi bir aya karşılık gelen toplamını almakta sorun yok. hatta bunu bir spinbutton yardımıyla textbox change olayına bağlayarak yazan aya ait gider toplamını ilgili ayın hizasına getirebiliyorum. Oysa benim oluşturmak istediğim tablo, ekte gönderdiğim zip dosyası içindeki excel dosyasında sayfa1 de tablo olarak görüntülenmiştir. Şimdiden ilgilenen tüm arkadaşlara teşekkür ederim..
Aşağıda kullandığım kodları yazıyorum:
Kod:
Private Sub TextBox1_Change()
    Dim conn As Object, rs As Object, yol As String, sorgu As String
yol = ThisWorkbook.Path & "\veriler.accdb"
Set conn = CreateObject("adodb.connection")
Set rs1 = CreateObject("adodb.recordset")
Set rs2 = CreateObject("adodb.recordset")
Set rs3 = CreateObject("adodb.recordset")
Set rs4 = CreateObject("adodb.recordset")

conn.Open "provider=microsoft.ace.oledb.12.0; data source=" & yol & ";"

'access tablo bilgileri:
'tablo adı: giderler
'tablo alanları: sr_no, tarih, gider_kalemi, tutar
'butona basıldığı zaman her gider kaleminin listede sıralanmasını ve karşısında 12 ay boyunca
'hangi ay ne kadar bir toplam gider maliyeti olduğunu tek tabloda (sayfadaki gibi) listelemek istiyorum
'sorgu bu ihtiyaca karşılık verecek şekilde yapılmalı (topla.çarpım mantığı)
'önceden teşekkürler

sorgu1 = "select '', gider_kalemi, format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=1 group by gider_kalemi"

sorgu2 = "select '', gider_kalemi, '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=2 group by gider_kalemi"

sorgu3 = "select '', gider_kalemi, '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=3 group by gider_kalemi"

sorgu4 = "select '', gider_kalemi, '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=4 group by gider_kalemi"

sorgu5 = "select '', gider_kalemi, '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=5 group by gider_kalemi"

sorgu6 = "select '', gider_kalemi, '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=6 group by gider_kalemi"

sorgu7 = "select '', gider_kalemi, '', '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=7 group by gider_kalemi"

sorgu8 = "select '', gider_kalemi, '', '', '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=8 group by gider_kalemi"

sorgu9 = "select '', gider_kalemi, '', '', '', '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=9 group by gider_kalemi"

sorgu10 = "select '', gider_kalemi, '', '', '', '', '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=10 group by gider_kalemi"

sorgu11 = "select '', gider_kalemi, '', '', '', '', '', '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=11 group by gider_kalemi"
sorgu12 = "select '', gider_kalemi, '', '', '', '', '', '', '', '', '', '', '', format(sum(tutar), '#,##0.#0') from giderler where month(tarih)=12 group by gider_kalemi"

Set rs1 = conn.Execute(sorgu1)
Set rs2 = conn.Execute(sorgu2)
Set rs3 = conn.Execute(sorgu3)
Set rs4 = conn.Execute(sorgu4)
Set rs5 = conn.Execute(sorgu5)
Set rs6 = conn.Execute(sorgu6)
Set rs7 = conn.Execute(sorgu7)
Set rs8 = conn.Execute(sorgu8)
Set rs9 = conn.Execute(sorgu9)
Set rs10 = conn.Execute(sorgu10)
Set rs11 = conn.Execute(sorgu11)
Set rs12 = conn.Execute(sorgu12)
With ListBox1
'    .Column = rs2.getrows
'    .Column = rs & TextBox1.Value.getrows
    Select Case TextBox1.Value
        Case 1
    .RowSource = Empty
            .Column = rs1.getrows
        Case 2
    .RowSource = Empty
            .Column = rs2.getrows
        Case 3
    .RowSource = Empty
            .Column = rs3.getrows
        Case 4
    .RowSource = Empty
            .Column = rs4.getrows
        Case 5
    .RowSource = Empty
            .Column = rs5.getrows
        Case 6
    .RowSource = Empty
            .Column = rs6.getrows
        Case 7
    .RowSource = Empty
            .Column = rs7.getrows
        Case 8
    .RowSource = Empty
            .Column = rs8.getrows
        Case 9
    .RowSource = Empty
            .Column = rs9.getrows
        Case 10
    .RowSource = Empty
            .Column = rs10.getrows
        Case 11
    .RowSource = Empty
            .Column = rs11.getrows
        Case 12
    .RowSource = Empty
            .Column = rs12.getrows
    End Select
End With
Set rs1 = Nothing
Set rs2 = Nothing
Set rs3 = Nothing
Set rs4 = Nothing
Set rs5 = Nothing
Set rs6 = Nothing
Set rs7 = Nothing
Set rs8 = Nothing
Set rs9 = Nothing
Set rs10 = Nothing
Set rs11 = Nothing
Set rs12 = Nothing

Set conn = Nothing

End Sub
 

Ekli dosyalar

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,344
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
En sade sql yolu "transform" deyimidir. "IIF" fonksiyonu da diğer bir yöntem ancak yazımı uzun.

Transform deyimi ve ekran çıktısı aşağıda:

Kod:
transform sum(tutar)
select gider_kalemi
from giderler
group by gider_kalemi
order by 1
pivot format(tarih, "mm-mmmm")
 

Ekli dosyalar

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Gürsoy, ilgilendiğiniz için teşekkür ederim. Hemen kodu deniyorum. Ancak hemen dikkatimi çektiği için sormakta yarar görüyorum: "Order by 1" cümlesindeki 1 neyi ifade ediyor?
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Gürsoy kod çalışıyor. Sayenizde yeni bir sorgu yöntemi öğrendim. Bunun olabilirliğinden emin değildim, iyi ki sormuşum.
Son sütuna da toplamların gelmesi mümkünmüdür acaba?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,344
Excel Vers. ve Dili
Office 365 (64 bit) - Türkçe
Toplam, sol başa geliyor; vba kodu ile sağ başa alırsınız artık.

Kod:
TRANSFORM sum(tutar)
SELECT gider_kalemi, sum(tutar) as GToplam
FROM giderler
GROUP BY gider_kalemi
ORDER BY gider_kalemi
PIVOT format(tarih, "mm-mmmm");
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Toplam, sol başa geliyor; vba kodu ile sağ başa alırsınız artık.

Kod:
TRANSFORM sum(tutar)
SELECT gider_kalemi, sum(tutar) as GToplam
FROM giderler
GROUP BY gider_kalemi
ORDER BY gider_kalemi
PIVOT format(tarih, "mm-mmmm");
Üstadım bu kodu uyarlayamadım. "Permission denied" hatası alıyorum. Acaba ben yazım düzeninde bir hata mı yapıyorum?
 

Ekli dosyalar

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Sayın Gürsoy, bu bilgiler çok değerliydi. Sağolun, var olun.. Geri kalanını ben kurcalar, üstesinden gelmeye çalışırım.
Beyninize ve paylaşımcı yüreğinize sağlık..
 

antonio

Destek Ekibi
Destek Ekibi
Katılım
13 Şubat 2011
Mesajlar
1,161
Excel Vers. ve Dili
Microsoft Office Professional Plus 2013 Türkçe
Bu arada hata sebebini buldum: Bir önceki sorguda listbox dolu iken sonraki sorguyu devamına yazmışım ve listbox u boşaltmadan recordset nesnesini listboxa taşımaya çalışmışım.
Şu anda kod çalışıyor.
Sağlıcakla kalın..
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,232
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Uygulamalı dosyayı ekleyebilir misiniz?
 
Üst