Alt Tabloların Tümüne Otomatik Veri Girişi

1 2 3 4
28/09/2020, 22:06

fenerli6774

Formün üsüt kısmındaki açılan kutudan 2019 seçtim.Ay olarakta Haziranı seçtim. Butona bastığımda kütük defterindeki aktif olan tüm öğrencilerin "YIL ALT TABLOSU"na 2019 yılı eklenmeli. ve her aktif öğrencinin yıl alt tablosuna bağlı "HARÇLIK ALT" tablosuna iligli ay ve diğer harçlık verileri eklenmeli. Sizin verdiğiniz örnekte sadece yılID si 1 olan alana bağlı harçlık alt tablosundaki veriler işleniyor. 2019 u seçtiğimde ilgili yıltablosunda 2019 olmadığı için kayıt yapılamaz diyor. Sizin verdiğiniz örneği biraz geliştirmeye çalıştım ama beceremedim. Yardımcı olursanız memnun olurum. Değerli vakitlerinizi ayırdığınız için şimdiden teşekkür ederim.

Dim rst As Recordset
Dim db As Database


Private Sub tar()
Set db = CurrentDb
        strSQL = "SELECT * From Srg WHERE  süz=" & cmbMonth & "" & cmbYear
            Set rst = db.OpenRecordset(strSQL)
            If rst.RecordCount = 0 Then
           
        Dim intI As Integer, intJ As Integer, strnum As String
            intMonth = Me!cmbMonth
            intYear = Me!cmbYear
         
        intFirst = 1
        intLastDay = Day(DateAdd("m", 1, DateSerial(intYear, intMonth, 1)) - 1)
        intLast = intFirst + intLastDay - 1
        intJ = 1
          For intI = intFirst To intLast
                strnum = Format(intI, "00")
            rst.AddNew
        rst![tarih] = strnum & "/" & cmbMonth & "/" & cmbYear
        rst.Update
       
          Next intI
          Else
          MsgBox "Dikkat Bu Seçime Ait Tarih Bilgisi Daha Önce Aktarıldı"
        Exit Sub
        End If
          rst.Close
db.Close
End Sub



YUKARIDAKİ OLAYIN TÜRKÇESİNİ BİZİM ANLAYABİLECEĞİMİZ DİLDE AÇIKLAYABİLİR MİSİNİZ?
BİR ÖRNEKTEN ALDIM.
ÖRNEK ÜZERİNDE
TABLO ADI: TABLO1
SORGU ADI :srg
SORGU FORM ADI : srg
Forma adı :Form1
29/09/2020, 09:37

berduş


        strSQL = "SELECT * From Srg WHERE  süz=" & cmbMonth & "" & cmbYear  belli bir ay ve yıla ait kayıt var mı onu kontrol eder
            Set rst = db.OpenRecordset(strSQL)
            If rst.RecordCount = 0 Then eğer kayıt yoksa aşağıdaki blok ile kaydı ekler
           
        Dim intI As Integer, intJ As Integer, strnum As String
            intMonth = Me!cmbMonth
            intYear = Me!cmbYear
         
        intFirst = 1
        intLastDay = Day(DateAdd("m", 1, DateSerial(intYear, intMonth, 1)) - 1)
DateSerial(intYear, intMonth, 1): girilen yıl ve ayın 1. gününü bulur
DateSerial (yıl, ay, gun) fonksiyonu girilen rakamları tarihe cevirir
DateAdd("m", 1, DateSerial(intYear, intMonth, 1)) dateSerial ile bulununa tarihe 1 ay ekleyerek bir sonraki ayın ilk gününü bulur
Dateadd(aralikturu, eklenecek miktar, tarih) fonksiyonu ile belli bir tarihe gün ay yıl ...saniye ekleyip çıkartabilirsiniz
Day(DateAdd("m", 1, DateSerial(intYear, intMonth, 1)) - 1) bu fonksiyon ile de önce ayın son gününü bulup o ayın kaç gün çektiği hesaplanıyor
Mesela acilir kutularda 2020 yılı ve 7. ayi var
DateSerial(2020,7,1)->1.7.2020
Dateadd("m",1, 1.7.2020)-->m kullanıldığı için fonksiyon girilen 1.7.2020 tarihine 1 ay ekler ve yeni tarihimiz
1.8.2020 cikar
Day(DateAdd("m", 1, DateSerial(intYear, intMonth, 1)) - 1)-->>day(1.8.2020 -1)-->>day(31.7.2020)-->>31
Böylece o ay 31 gün olduğundan tabloya 31 kayıt eklememiz gerektiği ortaya çıkar aşağıdaki  döngü bu ise yarar
        intLast = intFirst + intLastDay - 1 1+31-1=31
        intJ = 1
          For intI = intFirst To intLast 1den31e kadar say
                strnum = Format(intI, "00") gun 2 haneli olacak 09, 08,,,,05 gibi
            rst.AddNew yeni kayıt ekle
        rst![tarih] = strnum & "/" & cmbMonth & "/" & cmbYear eklenecek veri 01/07/2020
        rst.Update recordset guncelle
       
          Next intI sonraki sayıya git
          Else eğer kayıt sayısı 0dan fazla ise uyarı ver ve fonksiyondan cik
          MsgBox "Dikkat Bu Seçime Ait Tarih Bilgisi Daha Önce Aktarıldı"
        Exit Sub
        End If
          rst.Close
db.Close
End Sub
Kabaca böyle birsey
29/09/2020, 17:45

fenerli6774

Açıklamanızı inceledim. Elinize sağlık. Teşekkür ederim. Uğraştığım dosya ve istediğim durum 1. sayfada. Örnekteki recordset olayı benim olayımı çözecek gibi duruyor. deneme yanılmayla öğrenmeye çalışıyorum. Ne kadar sürer bilemem. İnşallah çabuk çözerim. Sizlerde bir bakıp yardımcı olursanız memnun olurum.
29/09/2020, 18:31

berduş

Maalesef 2 hafta kadar yokum, dönünce ilgilenmeye çalışırım.
29/09/2020, 22:23

fenerli6774

Mantığı
ilk aktif öğrenciyi bul
formda ilişkisiz açılan kutuda yazan yılı; ilk öğrencinin alttablosunda ara yoksa ekle varsa
formda ilişkisiz açılan kutuda yazan ay'ı bulunan yılın alttablosunda ara yoksa ekle varsa
formdaki ilişkisiz olan katsayı,ekgösterge,tutar,yuvarla,ödenen,kalan verilerini ekle.
sonraki aktif öğrenciyi bul ŞEKLİNDE bir döngü olacak.
Yardımcı olabilecek var mı?
projemde ilişkilendirme ve sorguyu yanlış yapmış olabilirim.
Teşekkürler.
sayın ozanakkaya; yapmak istediğim şu: bir kütük defterim var.defterimde 5000 öğrenci var. Öğrencilerden 100 tanesi aktif. Aktif olan öğrencilere tıkladığımda yılları gösteren alttablo açılacak. Alttablodan yılı seçtiğimde öğrencinin ay ay aldığı harçlık verileri çıkacak.
harçlık formunda ilişkisiz durumdaki kutulara yıl,ay,ekgösterge,katsayı,tutar,yuvarla,ödenen,kalan verilerini yazacağım.
Butona bastığımda bu verileri her aktif öğrenciye aktaracak. Öğrencinin alttablosunda seçilen yıl yoksa ekleyecek. Yıl alttablosunda seçilen ay yoksa ekleyecek. Tam olarak yapmak istediğim bu. Siz yada başka bir arkadaş Yardımcı olursanız çok memnun olurum.

Dim harçlık As ADODB.Recordset
Set harçlık = New ADODB.Recordset
Dim Sql As String
If Me.talebe.ItemsSelected.Count = 0 Then
Dim i As Integer
For i = 0 To Me.talebe.ListCount - 1

Sql = "select * from tblHarçlıklar"
harçlık.Open sql, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
harçlık.AddNew


Yukarıdaki kod dizilimi satır satır açıklayabilecek arkadaş varsa memnun olurum.
01/10/2020, 18:27

ozanakkaya

Merhaba, örnek uygulamanızı düzenledim, sadece sorgu kullanıldı. Yıl ve Aya göre öğrenci eklemede sıkıntı yok ise belirtin, ek gösterge vs diğer hesaplamalar sorguya dahil edilebilir.
1 2 3 4