Skip to main content

AccessTr.neT


Alt Tablolarda İşlemler

Alt Tablolarda İşlemler

Çözüldü #1
Daha önceden böyle bir konu açmıştım. Aldığım yardıma göre başka bir çalışma yaptım. Ama kodları çalıştıramadım. Nerde hata yapıyorum? Bakabilir misiniz. Ben defalarca inceledim ama bişey göremedim. Örnek ektedir. Teşekkür ederim.
.rar faturadeneme.rar (Dosya Boyutu: 155,21 KB | İndirme Sayısı: 5)
Cevapla
#2
Merhaba, 
Kod içerisine Exit Sub yazarsanız, bu koddan itibaren durur, sonraki kodlar çalışmaz

YilDegeri = Nz(DLookup("YilID", " tblFaturayillar", "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [Yil] = '" & Me.akYil & "'"), 0)

Bu kod hatalı, " tblFaturayillar" şeklinde yazarsanız kod çalışmaz, çift tırnaklar arasında boşluk olmamalıdır.

Varmi = Nz(DLookup("TelefonID", "tblTelefon", "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [YilID] = " & YilDegeri & " And [Ay] = '" & Me.akAyadi), 0)

Kodun en sonunda tek tırnak var. Kod bloğu içerisinde başka hiç tek tırnak yok, tek tırnak ile açıldıysa yine tek tırnak ile kapatılmalıdır.

Varmi = Nz(DLookup("TelefonID", "tblTelefon", "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [YilID] = " & YilDegeri & " And [Ay] = '" & Me.akAyadi & "'"), 0)


INSERT INTO KODUNDA, tablodaki alanlar yazıldıktan sonra parantez kapatılır. Parantez kapatılmadan önce virgül eklenmemez.

INSERT INTO tblTelefon (........, Damgavergisineesastutar, Damgavergisiorani, Damgavergisi, Netodenen, Tutanakno, Tutanaktarihi, Odemeemrino, Odemeemritarihi,)

En sondaki virgül hatalı.

ekleme sorgusunda, tablodaki alanlar kadar, alanlar için atanan (values) değeri sayısı aynı olmalıdır. İlk kısımda 5 tane tablo alanı, ikinci kısımda (values) bu alanlar için belirlenen 4 veya 6 değer olmamalı, values kısmı da 5 olmalı. Koddaki ilk ekleme sorgusunda tablo için Faturatarihi alanı eklenmiş ancak bu alan içi değer içeren denetim eklenmemiş.

Kodun tamamı aşağıdaki gibi olmalı

Dim strSQL1 As String
Dim rsSQL1 As ADODB.Recordset
Dim Varmi, YilDegeri As Integer
If IsNull(Me.akYil) Then
MsgBox "Yil Seçimi Yapınız"
    Exit Sub
ElseIf IsNull(Me.akAyadi) Then
MsgBox "Ay Seçimi Yapınız"
End If
'Exit Sub

strSQL1 = "SELECT * FROM tblFaturalar WHERE ((Faturacinsi)='Telefon');"

Set rsSQL1 = New ADODB.Recordset

rsSQL1.Open strSQL1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic

DoCmd.SetWarnings True

Do While Not rsSQL1.EOF

    Varmi = Nz(DLookup("YilID", "tblFaturayillar", "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [Yil] = '" & Me.akYil & "'"), 0)

    If Varmi = 0 Then

        DoCmd.RunSQL "INSERT INTO  tblFaturayillar (FaturaID, Yil) VALUES (" & rsSQL1.Fields("FaturaID") & ", '" & Me.akYil & "')"

    End If

    YilDegeri = Nz(DLookup("YilID", "tblFaturayillar", "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [Yil] = '" & Me.akYil & "'"), 0)


    If YilDegeri > 0 Then

        Varmi = Nz(DLookup("TelefonID", "tblTelefon", "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [YilID] = " & YilDegeri & " And [Ay] = '" & Me.akAyadi & "'"), 0)
   
        If Varmi = 0 Then
   
            DoCmd.RunSQL "INSERT INTO tblTelefon (FaturaID,YilID, Yil, Ay, Faturadonemibir, Faturadonemiiki,Faturatarihi, Sonodemetarihi, Faturano, Faturatutari, Vergilertoplami, Damgavergisineesastutar, Damgavergisiorani, Damgavergisi, Netodenen, Tutanakno, Tutanaktarihi, Odemeemrino, Odemeemritarihi) VALUES (" & rsSQL1.Fields("FaturaID") & ", " & YilDegeri & ",  '" & Me.akYil & "','" & Me.akAyadi & "','" & Me.txtFaturaDonemibir & "', '" & Me.txtFaturaDonemiiki & "', '" & Me.txtFaturatarihi & "', '" & Me.txtSonodemetarihi & "', '" & Me.txtFaturano & "', '" & Me.txtFaturatutari & "', '" & Me.txtVergilertoplami & "', '" & Me.txtDamgavergisineesastutar & "', '" & Me.txtDamgavergisiorani & "','" & Me.txtDamgavergisi & "','" & Me.txtNetodenen & "','" & Me.txtTutanakno & "','" & Me.txtTutanaktarihi & "','" & Me.txtOdemeemrino & "','" & Me.txtOdemeemritarihi & "')"
   
        Else
   
            DoCmd.RunSQL "delete * from tblTelefon where " & "[FaturaID] = " & rsSQL1.Fields("FaturaID") & " And [YilID] = " & YilDegeri & " And [Ay] = '" & Me.akAyadi & "'"
       
            DoCmd.RunSQL "INSERT INTO tblTelefon (FaturaID,YilID, Yil, Ay, Faturadonemibir, Faturadonemiiki,Faturatarihi, Sonodemetarihi, Faturano, Faturatutari, Vergilertoplami, Damgavergisineesastutar, Damgavergisiorani, Damgavergisi, Netodenen, Tutanakno, Tutanaktarihi, Odemeemrino, Odemeemritarihi) VALUES (" & rsSQL1.Fields("FaturaID") & ", " & YilDegeri & ",  '" & Me.akYil & "','" & Me.akAyadi & "','" & Me.txtFaturaDonemibir & "', '" & Me.txtFaturaDonemiiki & "', '" & Me.txtFaturatarihi & "','" & Me.txtSonodemetarihi & "', '" & Me.txtFaturano & "', '" & Me.txtFaturatutari & "', '" & Me.txtVergilertoplami & "', '" & Me.txtDamgavergisineesastutar & "', '" & Me.txtDamgavergisiorani & "','" & Me.txtDamgavergisi & "','" & Me.txtNetodenen & "','" & Me.txtTutanakno & "','" & Me.txtTutanaktarihi & "','" & Me.txtOdemeemrino & "','" & Me.txtOdemeemritarihi & "')"
       
        End If

End If

DoCmd.SetWarnings False

rsSQL1.MoveNext

Loop

DoCmd.SetWarnings True


rsSQL1.Close
Set rsSQL1 = Nothing

Me.afTelefon.Requery
Cevapla
#3
'" & Me.akAyadi & "'"
ifadesinin sağında ve solunda & işareti ne anlama geliyor?

rsSQL1.Open strSQL1, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Araştırdığımda "Varsayılan olarak, ADO kayıt kümeleri eklemeler ve silmelere izin vermeyen bir adLockReadOnly kilit türüyle açılır. Bu nedenle adLockOptimistic kullanıyoruz. " bilgisini öğrendim. Fakat "adLockPessimistic" kodu da kullanılabilir diyor. İkisinin arasındaki fark nedir?
Bir de neden adOpenkeyset var?

Bunların dışında eklemiş olduğum kod dizinindeki açıklamlarınızı incledim ve hatalarımı gördüm. Teşekkür ederim. iyi çalışmalar.
Cevapla
#4
Yukarıda yazmış olduğunuz kod ile ilgili olarak; (Bu nedenle yeni konu açmadım. Yine de gerekiyorsa yeni konu açarım)
tblFaturayillar tablosuna sonradan "Yillikbedel" alanı ekledim. Aylık fatura işlendiğinde fatura tutarının "txtFaturatutari" , Faturayıillar tablosundaki Yillikbedel alanına eklenmesini istedim.
Bunun için 3. sıradaki kod satırını değiştirerek Toplamtutar değişkeni ekledim. Şu şekilde:
Dim Varmi, YilDegeri, Toplamtutar As Integer

25. Satırdaki if Varmi=0 then komutundan sonraki komutu şu şekil değiştirdim.
DoCmd.RunSQL "INSERT INTO tblFaturayillar (FirmaID, Yil,Yillikbedel) VALUES (" & rsSQL1.Fields("FirmaID") & ", '" & Me.akYil & "', '" & Me.txtFaturatutari & "')"

36. Satırdaki if Yildegeri>0 then satırından sonraki satırda Toplamtutar değerini tanımladım:
Yilliktoplam = Application.DLookup("Yillikbedel", "tblFaturayillar", "[FirmaID] = " & rsSQL1.Fields("FirmaID") & " And [Yil] = '" & Me.akYil & "'")

Yıllıktoplam ile form üzerindeki txtFaturatutarını nasıl toplatacağım?
Şu şekil yaptım

Application.DLookup("Yillikbedel", "tblFaturayillar", "[FirmaID] = " & rsSQL1.Fields("FirmaID") & " And [Yil] = '" & Me.akYil & "') = Yilliktoplam + Me.txtFaturatutari

Bütün noktalama işaretlerini denedim. Ama Syntax error hatası veriyor.
Yardımcı olursanız memnun olurum. Kolay gelsin.
Cevapla
#5
Kodu deneme imkanım maalesef olmadı


Application.DLookup("Yillikbedel", "tblFaturayillar", "[FirmaID] = " & rsSQL1.Fields("FirmaID") & " And [Yil] = '" & Me.akYil & "') = Yilliktoplam + Me.txtFaturatutari

Bu şekilde kod olmaz. Dlookup a böyle kod atayamazsınız.

Yilliktoplam = Dsum ("Yillikbedel", "tblFaturayillar", "[FirmaID] = " & rsSQL1.Fields("FirmaID") & " And [Yil] = '" & Me.akYil & "') 

Üstteki kod tablodaki Yillikbedel alanının toplamıdır.

Toplam = Yilliktoplam + Me.txtFaturatutari

Bu şekilde de Yilliktoplam ile formdaki fatura tutarı toplanabilir.
Cevapla
#6
Yilliktoplam = Dsum ("Yillikbedel", "tblFaturayillar", "[FirmaID] = " & rsSQL1.Fields("FirmaID") & " And [Yil] = '" & Me.akYil & "')

kodunu ya da

Toplam = Yilliktoplam + Me.txtFaturatutari

nereye yazmalıyım desem gülünç olurmu ki
:Img-grin)
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da