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


Visual Basic Code
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


Visual Basic Code
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.
"Boş Örnek Eklerim, Yapıp Verirler" demeyin, örneğinizi hazırlayın.
Komplike kod talebiniz var ise İletişim bağlantısından bize ulaşın. 
Cebelleşmezsen Öğrenemezsin. 
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 SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not ys.EOF
For i = 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 Adlı Kullanıcıdan Alıntı: Dosya eklenmiyor, Kodlar fikir verebilir


mdb veya accdb uzantılı dosya ekleyemezsiniz. Sıkıştırma programları (rar, zip) sıkıştırarak ekleyin.
"Boş Örnek Eklerim, Yapıp Verirler" demeyin, örneğinizi hazırlayın.
Komplike kod talebiniz var ise İletişim bağlantısından bize ulaşın. 
Cebelleşmezsen Öğrenemezsin. 
Cevapla
#5
(09/02/2020 14:23)alicimri Adlı Kullanıcıdan Alıntı: 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 SQL, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not ys.EOF
For i = 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ı.
Son Düzenleme: 10/02/2020, 00:55, Düzenleyen: feraz.
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
Task