AccessTr.neT
Çapraz Tablo Ve Ado - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: Çapraz Tablo Ve Ado (/konu-capraz-tablo-ve-ado.html)

Sayfalar: 1 2


Çapraz Tablo Ve Ado - accessman - 09/02/2020

Aranızda tarih filtreli çapraz tablodan ADO ile veri alabilen oldu mu arkadaşlar
sıkıntı şu ki tarih filtreli olunca alan isimleri sabit olmuyor

https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/transform-statement-microsoft-access-sql


Sub TransformX2() 
   
        Dim dbs As Database
        Dim strSQL As String
        Dim qdfTRANSFORM As QueryDef
   
        strSQL = "PARAMETERS prmYear SMALLINT; TRANSFORM " _
            & "Sum(Subtotal) SELECT FirstName & "" """ _
            & "& LastName AS FullName " _
            & "FROM Employees INNER JOIN " _
            & "(Orders INNER JOIN [Order Subtotals] " _
            & "ON Orders.OrderID = " _
            & "[Order Subtotals].OrderID) " _
            & "ON Employees.EmployeeID = " _
            & "Orders.EmployeeID WHERE DatePart" _
            & "(""yyyy"", OrderDate) = [prmYear] "
       
          strSQL = strSQL & "GROUP BY FirstName & "" """ _
            & "& LastName " _
            & "ORDER BY FirstName & "" "" & LastName " _
            & "PIVOT DatePart(""q"",OrderDate)"       
           
        ' Modify this line to include the path to Northwind
        ' on your computer.
        Set dbs = OpenDatabase("Northwind.mdb")
   
        Set qdfTRANSFORM = dbs.CreateQueryDef _
            ("", strSQL)
       
        SQLTRANSFORMOutput qdfTRANSFORM, 1994
       
        dbs.Close
   
    End Sub
   
    Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _
        intYear As Integer)
       
        Dim rstTRANSFORM As Recordset
        Dim fldLoop As Field
        Dim booFirst As Boolean
   
        qdfTemp.PARAMETERS!prmYear = intYear
        Set rstTRANSFORM = qdfTemp.OpenRecordset()
       
        Debug.Print qdfTemp.SQL
        Debug.Print
        Debug.Print , , "Quarter"
   
        With rstTRANSFORM
            booFirst = True
            For Each fldLoop In .Fields
                If booFirst = True Then
                    Debug.Print fldLoop.Name
                    Debug.Print , ;
                    booFirst = False
                Else
                    Debug.Print , fldLoop.Name;
                End If
            Next fldLoop
            Debug.Print
           
            Do While Not .EOF
                booFirst = True
                For Each fldLoop In .Fields
                    If booFirst = True Then
                        Debug.Print fldLoop
                        Debug.Print , ;
                        booFirst = False
                    Else
                        Debug.Print , fldLoop;
                    End If
                Next fldLoop
                Debug.Print
                .MoveNext
            Loop
        End With
       
    End Function


Sub TransformX2() 
        Dim dbs As Database
        Dim strSQL As String
        Dim qdfTRANSFORM As QueryDef
   
        strSQL = "PARAMETERS prmYear SMALLINT; TRANSFORM " _
            & "Sum(Subtotal) SELECT FirstName & "" """ _
            & "& LastName AS FullName " _
            & "FROM Employees INNER JOIN " _
            & "(Orders INNER JOIN [Order Subtotals] " _
            & "ON Orders.OrderID = " _
            & "[Order Subtotals].OrderID) " _
            & "ON Employees.EmployeeID = " _
            & "Orders.EmployeeID WHERE DatePart" _
            & "(""yyyy"", OrderDate) = [prmYear] "
       
          strSQL = strSQL & "GROUP BY FirstName & "" """ _
            & "& LastName " _
            & "ORDER BY FirstName & "" "" & LastName " _
            & "PIVOT DatePart(""q"",OrderDate)"       
           
        ' Modify this line to include the path to Northwind
        ' on your computer.
        Set dbs = OpenDatabase("Northwind.mdb")
   
        Set qdfTRANSFORM = dbs.CreateQueryDef _
            ("", strSQL)
       
        SQLTRANSFORMOutput qdfTRANSFORM, 1994
       
        dbs.Close
   
    End Sub
   
    Function SQLTRANSFORMOutput(qdfTemp As QueryDef, _
        intYear As Integer)
       
        Dim rstTRANSFORM As Recordset
        Dim fldLoop As Field
        Dim booFirst As Boolean
   
        qdfTemp.PARAMETERS!prmYear = intYear
        Set rstTRANSFORM = qdfTemp.OpenRecordset()
       
        Debug.Print qdfTemp.SQL
        Debug.Print
        Debug.Print , , "Quarter"
   
        With rstTRANSFORM
            booFirst = True
            For Each fldLoop In .Fields
                If booFirst = True Then
                    Debug.Print fldLoop.Name
                    Debug.Print , ;
                    booFirst = False
                Else
                    Debug.Print , fldLoop.Name;
                End If
            Next fldLoop
            Debug.Print
           
            Do While Not .EOF
                booFirst = True
                For Each fldLoop In .Fields
                    If booFirst = True Then
                        Debug.Print fldLoop
                        Debug.Print , ;
                        booFirst = False
                    Else
                        Debug.Print , fldLoop;
                    End If
                Next fldLoop
                Debug.Print
                .MoveNext
            Loop
        End With
       
    End Function


Bunu deniyorum ama bir şeyleri eksik yapıyorum galiba


Cvp: Çapraz Tablo Ve Ado - ozanakkaya - 09/02/2020

Çapraz sorguya, tüm alanları sütun başlığı olarak eklemeyi deneyin. sorgunun Sql görünümünde in (...,...) şeklinde eklenir. Ayrıca sorgu tasarım görünümünde Özellik Sayfasında "Sütun Başlıkları" şeklinde de eklenebilir.


Tarih Eşleştirme bağlantısındaki örnekte, örnek çapraz sorgu mevcut.


Cvp: Çapraz Tablo Ve Ado - alicimri - 09/02/2020

Dosya ekledim, Kodlar fikir verebilir.
PHP Kod:
Private Sub Komut0_Click()
Dim ys As New ADODB.Recordset
SQL 
"TRANSFORM NZ(Sum(Tablo1.say))*1 AS Toplasay SELECT Tablo1.adı FROM Tablo1 GROUP BY Tablo1.adı PIVOT Format([tarih],'Short Date');"
ys.Open SQLCurrentProject.ConnectionadOpenKeysetadLockOptimistic
Do While Not ys.EOF
For 1 To ys.Fields.Count 1
MsgBox ys
.Fields(0) & " " ys.Fields(i).Name " tarihinde " ys.Fields(i) & " Adet"
Next
ys
.MoveNext
Loop
End Sub 



Cvp: Çapraz Tablo Ve Ado - ozanakkaya - 09/02/2020

(09/02/2020, 14:23)alicimri yazdı: Dosya eklenmiyor, Kodlar fikir verebilir


mdb veya accdb uzantılı dosya ekleyemezsiniz. Sıkıştırma programları (rar, zip) sıkıştırarak ekleyin.


Cvp: Çapraz Tablo Ve Ado - feraz - 10/02/2020

(09/02/2020, 14:23)alicimri yazdı: Dosya ekledim, Kodlar fikir verebilir.
PHP Kod:
Private Sub Komut0_Click()
Dim ys As New ADODB.Recordset
SQL 
"TRANSFORM NZ(Sum(Tablo1.say))*1 AS Toplasay SELECT Tablo1.adı FROM Tablo1 GROUP BY Tablo1.adı PIVOT Format([tarih],'Short Date');"
ys.Open SQLCurrentProject.ConnectionadOpenKeysetadLockOptimistic
Do While Not ys.EOF
For 1 To ys.Fields.Count 1
MsgBox ys
.Fields(0) & " " ys.Fields(i).Name " tarihinde " ys.Fields(i) & " Adet"
Next
ys
.MoveNext
Loop
End Sub 

Merhaba dosyayı deneyemedim kodlara bakarken dikkatimi

For i = 1 To ys.Fields.Count -
İlk 1 çekti.Normalde en sonda -1 olduğu için ilk 1 yerine 0 olmalı sanki.
Eğer döngü 0 dan başlarsa -1 yazılır diye biliyorum belkide yanlış biliyordurum.Döngü 1 den başlarsa sondaki -1 yazılmamalı.


Cvp: Çapraz Tablo Ve Ado - alicimri - 10/02/2020

Icon_rolleyes  1 den başlıyor, çünkü tarih sütunları ikinci sütundan başlıyor.
index değerleri 0 dan başlar, count la elde edilen değerden 1 düşmek gerekir, döngü 1 den başlatılırsa ikinciden başlar ve son döngüde hataya düşer.
Bu durum index değerleri için geçerlidir.