AccessTr.neT

Tam Versiyon: Ado Pivot Tablo Sütun Başlık Problem
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2
Merhaba.
Sayfa1 deki sütun başlıklar sonuç sayfasına gelmiyor.
Ado ilepivot olayını ilk defa kullandığım için tecrübem yok.
Çözüm nedir?
Saygılar.

Private Sub CommandButton1_Click()
    Dim Con As Object, Rs As Object, Sorgu As String
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Sonuc")
        .Cells.ClearContents
        son = .Range("A" & Rows.Count).End(3).Row
        Set Con = CreateObject("ADODB.Connection")
        Set Rs = CreateObject("ADODB.RecordSet")
        Con.Open "Provider=Microsoft.Ace.Oledb.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;Hdr=Yes;Imex=1"""
        Sorgu = " TRANSFORM sum([Sayi]) AS 'Sayi' SELECT [Baslik1],[Baslik2],[Baslik3] FROM [Sayfa1$A3:I65536] " & _
                "GROUP BY [Baslik1],[Baslik2],[Baslik3] PIVOT year([TARÝH])"
   
        Rs.Open Sorgu, Con, 3, 1
        .Range("A2").CopyFromRecordset Rs
        Rs.Close: Con.Close
        Sorgu = vbNullString: Set Rs = Nothing: Set Con = Nothing
    End With
    Application.ScreenUpdating = True

End Sub
Aşağıdaki gibi bir dçngü ile alabilirsiniz.
Kod:
Private Sub CommandButton1_Click()
    Dim Con As Object, Rs As Object, Sorgu As String
    Application.ScreenUpdating = False
    With ThisWorkbook.Sheets("Sonuc")
        .Cells.ClearContents
        son = .Range("A" & Rows.Count).End(3).Row
        Set Con = CreateObject("ADODB.Connection")
        Set Rs = CreateObject("ADODB.RecordSet")
        Con.Open "Provider=Microsoft.Ace.Oledb.12.0;Data Source=" & ThisWorkbook.FullName & ";Extended Properties=""Excel 12.0;Hdr=Yes;Imex=1"""
        Sorgu = " TRANSFORM sum([Sayi]) AS 'Sayi' SELECT [Baslik1],[Baslik2],[Baslik3] FROM [Sayfa1$A3:I65536] " & _
                "GROUP BY [Baslik1],[Baslik2],[Baslik3] PIVOT year([TARİH])"
   
        Rs.Open Sorgu, Con, 3, 1
        For i = 0 To Rs.fields.Count - 1
        .Cells(1, i + 1).Value = Rs.fields(i).Name
        Next
        .Range("A2").CopyFromRecordset Rs
        Rs.Close: Con.Close
        Sorgu = vbNullString: Set Rs = Nothing: Set Con = Nothing
    End With
    Application.ScreenUpdating = True

End Sub
recordsette sadece veriler aktarılır başlık aktarılmaz diye biliyorum
(11/11/2020, 10:16)alicimri yazdı: [ -> ]For i = 0 To Rs.fields.Count - 1       
.Cells(1, i + 1).Value = Rs.fields(i).Name
 Next
Elinize sağlık abey.Bu döngüyü aslında biliyordum lakin dosyadaki gibi tarih için 2019,2020,2021 diye yan yana sütunlara getireceğini tahmin etmemiştim.Zayen bu pivotu başka konuda siz yazmıştınız(Açık-Kapalı olan konu) ben değiştirdim verileri.
Orda Böyle bir döngü ile başlık almadan başlıkları otomatik eklemişti.
Tekrar danke abey.

DüzeltmeLoliğer konudada otomatik başlık eklenmiyormuş Img-grin
Neyse sağolunun,konu çözüldü.Sql serverde video izlemiştim oda kod yapısı farklıydı.
Son soru olarak pivot için sadece Transform ilemi kullanılıyor zira Sql videolarında göremedim.

(11/11/2020, 10:28)berduş yazdı: [ -> ]recordsette sadece veriler aktarılır başlık aktarılmaz diye biliyorum
Sağol abey.Pivot olayı olduğu için aktarma olrur diye düşünmüştüm.
Yeni önerimden vaz geçtim, bayağı çetrefilli bir işmiş.
Sağol ali abey.
Sanırım power query ile yapılmış kod olayı.
Resimdeki gibi şekillde kalıyor.

[Resim: do.php?img=10592]
Sayfalar: 1 2