AccessTr.neT

Tam Versiyon: Son Kayıt Değerini Bir Öncekinden Çıktarak Forma Yazdırma (Vba İle)
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Sayfalar: 1 2 3 4 5
her girdiğiniz yeni kayıtta txtUretim metin kutusuna girdiğinizde çalışacak şekilde yaptım ama şöyle bir sorun var geçmişe yönelik bir değişiklik yaptığınızda ne olacak? o durumda sonraki kaydın txtUretim kutusuna da tekrar giriş yapmanız gerekecek
aşağıdaki kod Modüle eklenecek
Function BirAlt(Trh As Date) As Double
Dim AltRs As New ADODB.Recordset
Dim sOrGu As String
 
  BirAlt = 0

sOrGu = "SELECT TOP 1 Tablo1.[TarihSaat], Tablo1.Sayac, * " & _
        "FROM Tablo1 " & _
        "WHERE (Tablo1.[TarihSaat]) < CDate('" & Format(Trh, "dd.mm.yyyy hh:nn") & "') " & _
        "ORDER BY Tablo1.[TarihSaat] DESC"
   
    AltRs.Open sOrGu, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If AltRs.RecordCount > 0 Then BirAlt = AltRs(1)

AltRs.Close
End Function
txtUretim metin kutusunun girildiğinde olayına da aşağıdaki kod eklenecek
Me.txtUretim = Me.txtSayac - BirAlt(CDate(Me.txtTarihSaat))
(20/04/2020, 21:41)berduş yazdı: [ -> ]her girdiğiniz yeni kayıtta txtUretim metin kutusuna girdiğinizde çalışacak şekilde yaptım ama şöyle bir sorun var geçmişe yönelik bir değişiklik yaptığınızda ne olacak? o durumda sonraki kaydın txtUretim kutusuna da tekrar giriş yapmanız gerekecek
aşağıdaki kod Modüle eklenecek
Function BirAlt(Trh As Date) As Double
Dim AltRs As New ADODB.Recordset
Dim sOrGu As String
 
  BirAlt = 0

sOrGu = "SELECT TOP 1 Tablo1.[TarihSaat], Tablo1.Sayac, * " & _
        "FROM Tablo1 " & _
        "WHERE (Tablo1.[TarihSaat]) < CDate('" & Format(Trh, "dd.mm.yyyy hh:nn") & "') " & _
        "ORDER BY Tablo1.[TarihSaat] DESC"
   
    AltRs.Open sOrGu, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If AltRs.RecordCount > 0 Then BirAlt = AltRs(1)

AltRs.Close
End Function
txtUretim metin kutusunun girildiğinde olayına da aşağıdaki kod eklenecek
Me.txtUretim = Me.txtSayac - BirAlt(CDate(Me.txtTarihSaat))

Cevabınız için teşekkür ederim. Aslında geçmişe dönük kayıtlarda herhangi bir değişiklik yapılmayacak. Bu hesaplama birdefaya mahsuz tüm kayıtlar için yapılacak sonrasında ise sadece son eklenen kayıt için hesaplama yapılarak farmoa (ve tabloya yazdırılacak)


Sizlerin sayesinde bakış açımı değiştirerek sanırım sorunu çözdüm.  Teşekkür ediyorum.

Çözüm için aşağıdaki kodları kullandım;

Me.txtSonID = DMax("ScadaID ", "Tablo1")

Me.txtSondanBirOncekiID = Me.txtSonID - 1


Me.txtSonKayit = Dlookup ("Sayac", "Tablo1", "ScadaID = [txtSonID]")

Me.txtSondanBirOncekiKayit = Dlookup ("Sayac", "Tablo1", "ScadaID = [txtSondanBirOncekiID]")

DoCmd.RunCommand acCmdRecordsGoToLast

txtUretim = Me.txtSonKayit - Me.txtSondanBirOncekiKayit

dosyanın güncel halinide ekliyorum.
(20/04/2020, 15:40)accessman yazdı: [ -> ]id den bir çıkarmak kadar kolay bir yol varken zamanı id yerine kullanmak
veya kullanamamak işte bütün mesele bu
kodlamayla tanışalı uzun zaman olmadı, bir çok kavramı yeni öğreniyorum diyebilirim. Konuya hakim olmanız nedeni ile pek çok pratik çözüm geliştirebiliyorsunuz lakin ben bu konuda biraz zorlanıyorum. Yönlendirmeniz sayesinde bakış açımı değiştirdim ve önerilerinizi uygulayarak sonuca varabildim. Mesajınızda daha nazik bir üslup kullanmayı tercih etmiş olsaydınız yardımınız dahada bir anlam kazanırdı. Yinede çok teşekkür ederim.
Id ile ilgili şöyle bir sorun olusabilir ilerde diyelim ki arada yer alan bir kaydı sildik diyelim ki ID=5 olan kaydı sildik siz -1 ile 6dan 5e gitmek istediginizde 5 silindigi icin hata verebilir
(20/04/2020, 22:38)berduş yazdı: [ -> ]Id ile ilgili şöyle bir sorun olusabilir ilerde diyelim ki arada yer alan bir kaydı sildik diyelim ki ID=5 olan kaydı sildik siz -1 ile 6dan 5e gitmek istediginizde 5 silindigi icin hata verebilir

Evet bu söylediğinizde haklısınız. Eğer son kayıt silinirse ve yeni kayıt eklenirse sorun çıkacak. Bunun için nasıl bir yol izlemeliyiz
Vba ile yapmak istiyorsanız form üzerine bir düğme koyun en iyisi ve şu kodları yapıştırın düğmeye. Bu arada tablonuzda "uretim" adında integer bir alan açtım. Bu alanı da form üzerindeki txturetim metin kutusu ile ilişkilendirdim. Kodlar şunlar:

Kod:
Dim x, ks, deger, sondeger As Integer
On Error GoTo err_hata
DoCmd.GoToRecord , , acFirst

DoCmd.SetWarnings False
Me.txtUretim = Me.txtSayac
ks = DCount("[sayac]", "tablo1")

For x = 1 To ks

1
deger = Me.txtSayac
DoCmd.GoToRecord , , acNext
sondeger = Me.txtSayac - deger

Me.txtUretim = sondeger
Next x

err_hata: MsgBox "işlem tamamlandı"
DoCmd.SetWarnings True
Sayfalar: 1 2 3 4 5