Skip to main content

AccessTr.neT


Çapraz Tablo Ve Ado

Çapraz Tablo Ve Ado

Çözüldü #1
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/...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
@benbendedeilem
Cevapla
#2
Ç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.
Cevapla
#3
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 
.zip ör.zip (Dosya Boyutu: 18,75 KB | İndirme Sayısı: 11)
Son Düzenleme: 09/02/2020, 15:06, Düzenleyen: alicimri.
Cevapla
#4
(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.
Cevapla
#5
(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ı.
Cevapla
#6
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.
Son Düzenleme: 10/02/2020, 11:20, Düzenleyen: alicimri.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da