17/08/2022, 16:14
Acces Sorgusu Sırano Ve Yürüyen Bakiye
17/08/2022, 16:14
acar6783
17/08/2022, 16:18
berduş
17/08/2022, 16:22
acar6783
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
dilerim işinize yarar
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şturabilirsinizdilerim 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?
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;