Ç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 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
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 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 - 1
İ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
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.
|