Acces Sorgusu Sırano Ve Yürüyen Bakiye

1 2 3 4 5 6 7
17/08/2022, 16:14

acar6783

(17/08/2022, 16:12)berduş yazdı: tablonuza otomatik sayı alanı eklense sıkıntı olur mu?

o da kayıt numarası gibiolur diye düşünüyorum

sonradan geçmiş tarihe kayıt girildiği için yine otomatik sayı büyük olacak
17/08/2022, 16:18

berduş

(17/08/2022, 16:14)acar6783 yazdı: yine otomatik sayı büyük olacak
sayı büyük olacak biliyorum ama benzersiz alan olduğundan sıralamayı düzgün yapacak
17/08/2022, 16:22

acar6783

(17/08/2022, 16:18)berduş yazdı:
(17/08/2022, 16:14)acar6783 yazdı: yine otomatik sayı büyük olacak
sayı büyük olacak biliyorum ama benzersiz alan olduğundan sıralamayı düzgün yapacak

Tarihe göre doğru veri alır mı yani?
17/08/2022, 19:25

acar6783

Kod:
Public StoredRowNumber As Variant
Public OldlastField As Variant

Function RowNumber(TheField) As Integer
    If OldlastField = TheField Then
        'nada
    Else
        ResetRowNum
    End If
    StoredRowNumber = StoredRowNumber + 1
    RowNumber = StoredRowNumber
    OldlastField = TheField
End Function

Function GetRowNum(TheField) As Integer
    GetRowNum = StoredRowNumber
End Function

Function ResetRowNum()
    StoredRowNumber = 0
    'OldFieldItem = Null
End Function

Böyle bir fonksiyon bulup çalıştırdım. acces içerisinde çalışıyor fakat dışarıdan sorgu gönderdiğimde hata veriyor.

"undefined function RowNumber in expression"
18/08/2022, 02:17

berduş

bir yöntem bulmuştum sorguya satır no ekleyen ama maalesef toplam alma işleminde işe yaramadı
aklıma gelen son öneri kayıt eklerken yada güncellerken o tarihe ait kayıt sayısına 1 ekleyerek tarih için benzersiz sayı yan dal oluşturmak
yada her güncelleme ekleme işleminden sonra recordset ile tüm kayıtları gezip sıra no vermek olabilir
geriye dönük işlemler olmasa yada benzersiz tarih olsa işlem kolay da bu haliyle beni aşıyor ancak yan yollar ile çözüm üretebiliyorum
bir kaç sırano üreten kod buldum ama maalesef toplam sorgusunda hep sorun çıkardılar
1 - tablonuza otomatik sayı alanı ekleyin adı=ID olsun
2 - sonra aşağıdaki sorguyu oluşturup deneyin
SELECT A.CARKOD, A.TARIH, A.TUTAR, (SELECT  Sum(B.TUTAR) 
FROM (SELECT CDbl(CLng([CARTH001]![TARIH]) & "," & [CARTH001]![Id]) AS Sira, CARTH001.CARKOD, CARTH001.TARIH, CARTH001.Id, CARTH001.ISLEMTIPI, CARTH001.BA, CARTH001.TUTAR, CARTH001.ACIKLAMA, CARTH001.ISLTARIH, CARTH001.KAYITNO, CARTH001.BELGENO
FROM CARTH001
ORDER BY CARTH001.CARKOD, CARTH001.TARIH) As B
WHERE (((B.CARKOD)=A.CARKOD) AND ((B.Sira)<=A.Sira) )
GROUP BY B.CARKOD ) AS Bakiye, A.ISLEMTIPI, A.BA, A.ACIKLAMA, A.ISLTARIH, A.KAYITNO, A.BELGENO
FROM (SELECT CDbl(CLng([CARTH001]![TARIH]) & "," & [CARTH001]![Id]) AS Sira, CARTH001.CARKOD, CARTH001.TARIH, CARTH001.Id, CARTH001.ISLEMTIPI, CARTH001.BA, CARTH001.TUTAR, CARTH001.ACIKLAMA, CARTH001.ISLTARIH, CARTH001.KAYITNO, CARTH001.BELGENO
FROM CARTH001
ORDER BY CARTH001.CARKOD, CARTH001.TARIH)  AS A
ORDER BY A.CARKOD, A.Sira;
isterseniz sorguyu 2 parça halinde de oluşturabilirsiniz
dilerim işinize yarar
18/08/2022, 09:13

berduş

Tabloda otomatik ID alanı olmalı
kodun mantığı ID alanını uzun tamsayı sınırına bölerek 1den küçük bir sayı elde edip tarihle toplayarak tarih bazlı sıralı sayı elde etmek
buradaki 2147483648 uzun tamsayı sınırının 1 fazlası
aşağıdaki sorgu kodunu dener misiniz? 
SELECT A.*, (SELECT  Sum(B.TUTAR) 
FROM CARTH001 As B
WHERE (((B.CARKOD)=A.CARKOD) AND  Int(B.[TARIH])+B.[ID]/2147483648<=Int(A.[TARIH])+A.[ID]/2147483648)
GROUP BY B.CARKOD ) AS Bakiye
FROM CARTH001 AS A
ORDER BY A.CARKOD, A.TARIH, A.ID;
1 2 3 4 5 6 7