[
attachment=20870]iyi akşamlar, benim 2 tane sorum olacaktı
1 - SendKeys "{F5}" komutunu her çalıştırdığımda "numlock" tuşu açıksa kapalı kapalıysa açık oluyor, "numlock" tuşunun değerinin değişmesini nasıl engellerim?
2 - oluşturduğum sorguda aynı kayıtların değerinin toplanmasını nasıl sağlarım?
mesela 1 haziran için 4 farklı yemek seçmişim ve bu yemeklerin üçünde ayçiçek yağı kullanılıyor benim amacım bu 4 farklı yemekte kullanılan malzeme miktarını hesaplamak ama bu hesabı yaparken bu 3 faklı yemekte kullanılan ayçiçek yağının toplam miktarını tek satıra yazmak.
1. yemekte 3 kilo domates ,5 kilo patlıcan ve 100gr
ayçiçek yağı
2. yemekte 2 kg patates, 3kg tavuk ve 150gr
ayçiçek yağı
3. yemekte 1kg pirinç, 2 kg
mercimek ve 200gr
ayçiçek yağı
4. yemekte ise 500gr
mercimek, 1 kg bulgur ve 2 litre su
malzeme Kullanılan malzeme İktarı
domates 3 kg
patlıcan 5 kg
ayçiçek yağı 450gr (100 + 150 + 200)
patates 2 kg
tavuk 3kg
pirinç 1 kg
mercimek 2,5 kg (2+0,5)
bulgur 1 kg
Su 2 litre
2. sorunuzun yanıtı için bazı uyarılar: Eğer yemek bazında malzeme toplamı almayacaksanız o zaman formda alttaki "malzemelist" liste kutusunu 3 sütun yapacaksanız. Çünkü hem malzemeleri yemeklerdeki toplamıyla isteyip hem de tek tek alamazsınız. Bu durumda o liste kutusunun
Sql görünümü şöyle olacak:
SELECT MenuTbl.Tarih, YemekListesiTbl.[Malzeme Adı], Sum([YemekListesiTbl]![1 - 2 Yaş]*[Formlar]![Menueklefrm]![1-2Y]+[YemekListesiTbl]![3 - 6 Yaş]*[Formlar]![Menueklefrm]![3-6Y]+[YemekListesiTbl]![7 - 12 Yaş]*[Formlar]![Menueklefrm]![7-12Y]+[YemekListesiTbl]![Yaşlı]*[Formlar]![Menueklefrm]![Yasli]+[YemekListesiTbl]![Personel]*[Formlar]![Menueklefrm]![Personel]) AS Miktar
FROM MenuTbl INNER JOIN YemekListesiTbl ON MenuTbl.Yemek = YemekListesiTbl.[Yemek Adı]
GROUP BY MenuTbl.Tarih, YemekListesiTbl.[Malzeme Adı]
HAVING (((MenuTbl.Tarih)=[Formlar]![Menueklefrm]![TarihGir]));
İlk sorunuza henüz bakmadım. Onda nerede f5 yaptığınıza bakacağım. Gerekirse her f5 eyleminde aynı yöntemle Numluck açtırabilirsiniz. Yani senkeys kullanarak. Denediniz mi?
(30/07/2014, 20:22)mehmetdemiral yazdı: [ -> ]2. sorunuzun yanıtı için bazı uyarılar: Eğer yemek bazında malzeme toplamı almayacaksanız o zaman formda alttaki "malzemelist" liste kutusunu 3 sütun yapacaksanız. Çünkü hem malzemeleri yemeklerdeki toplamıyla isteyip hem de tek tek alamazsınız. Bu durumda o liste kutusunun Sql görünümü şöyle olacak:
SELECT MenuTbl.Tarih, YemekListesiTbl.[Malzeme Adı], Sum([YemekListesiTbl]![1 - 2 Yaş]*[Formlar]![Menueklefrm]![1-2Y]+[YemekListesiTbl]![3 - 6 Yaş]*[Formlar]![Menueklefrm]![3-6Y]+[YemekListesiTbl]![7 - 12 Yaş]*[Formlar]![Menueklefrm]![7-12Y]+[YemekListesiTbl]![Yaşlı]*[Formlar]![Menueklefrm]![Yasli]+[YemekListesiTbl]![Personel]*[Formlar]![Menueklefrm]![Personel]) AS Miktar
FROM MenuTbl INNER JOIN YemekListesiTbl ON MenuTbl.Yemek = YemekListesiTbl.[Yemek Adı]
GROUP BY MenuTbl.Tarih, YemekListesiTbl.[Malzeme Adı]
HAVING (((MenuTbl.Tarih)=[Formlar]![Menueklefrm]![TarihGir]));
verdiğiniz
Sql komutu 2. sorumu (ve sormadığım 3. gizli sorumu) çözdü çok teşekkür ederim. )
(30/07/2014, 20:22)mehmetdemiral yazdı: [ -> ]İlk sorunuza henüz bakmadım. Onda nerede f5 yaptığınıza bakacağım. Gerekirse her f5 eyleminde aynı yöntemle Numluck açtırabilirsiniz. Yani senkeys kullanarak. Denediniz mi?
1. sorum için önerdiğiniz (eğer sizi yanlış anlamadıysam) aynı komutu 2 defa ard arda yazmayı daha önce denemiştim çalışmamıştı siz önerdikten sonra tekrar denedim ama maalesef hala aynı sorun devam ediyor, "numlock" kafasına göre takılıyor
F5'i nerede kullandığınızı söylerseniz onda da yardımcı olmaya çalışırım. Ben aramayayım, s,z yazın lütfen. Bekliyorum.
1 - ilk kullandığım yer "tarihgir" metin kutusunda değişiklik olduğunda çalışıyor
böylece belirtilen tarihe göre veri tabanını ve list boxların hepsini yeniliyor
Private Sub TarihGir_Change()
SendKeys "{F5}"
'SendKeys "{NUMLOCK}"
'DoCmd.RefreshRecord
'Me.SyList.Requery
'Me.Ara1List.Requery
'Me.OYlist.Requery
'Me.ara2List.Requery
'Me.AYList.Requery
'Me.Ara3List.Requery
End Sub
2 - 2. kullandığım yer ise "sil" butonu
kayıt silme onaylanınca yine veritabanını ve listboxları yenilemek için:
Private Sub Sil_Click()
x = MsgBox("Bu kaydı Silmek İstediğinize Emin misiniz?", vbYesNo + vbQuestion, "DİKKAT")
If x = vbYes Then
DoCmd.RunSQL " DELETE *" & _
" FROM MenuTbl" & _
" WHERE (((MenuTbl.Tarih)=[Formlar]![Menueklefrm]![TarihSil])" & _
" AND ((MenuTbl.Ogun)=[Formlar]![Menueklefrm]![OgunSil]) " & _
" AND ((MenuTbl.Yemek)=[Formlar]![Menueklefrm]![YemekSil]));"
SendKeys "{F5}"
Else
Undo
End If
End Sub
Siz F5 gönderme işini yanlış kullanıyorsunuz. Bu iş için klasör yeniler gibi f5 yapmaya gerek yok. O komutun yerine değiştiğinde olayına
kodunu yazın. Aynı güncelleme olacaktır.
2. durumda da aynı şey geçerli.Yalnız oradaki kodlarınız hatalı. Öncelikle silme onayını göstermeyin. Bunun için siz kendiniz soru sordurun ve evet hayır durumuna göre silme ya da vazgeçme koyun.Bunu yapmışsınız ama tam değil. Mesela silmeyi onaylama penceresinde ilk soruya (msgbox ile sorduğunuz soruya) Evet deyip Eylem sorgusundaki soruya Hayır deyince hata döner. Debug ekranı gelir. Bu yüzden orayı da şöyle yapmalısınız:
Kod:
Private Sub Sil_Click()
On Error GoTo Err_hata
DoCmd.SetWarnings False
x = MsgBox("Bu kaydı Silmek İstediğinize Emin misiniz?", vbYesNo + vbQuestion, "DİKKAT")
If x = vbYes Then
DoCmd.RunSQL " DELETE *" & _
" FROM MenuTbl" & _
" WHERE (((MenuTbl.Tarih)=[Formlar]![Menueklefrm]![TarihSil])" & _
" AND ((MenuTbl.Ogun)=[Formlar]![Menueklefrm]![OgunSil]) " & _
" AND ((MenuTbl.Yemek)=[Formlar]![Menueklefrm]![YemekSil]));"
DoCmd.Requery
MsgBox "Seçilen kayıt silindi", vbInformation, "SİLİNDİ"
Else
Undo
MsgBox "Kayıt Silinmedi", vbInformation, "SİLİNMEDİ"
End If
DoCmd.SetWarnings True
Err_hata:
End Sub
Bu arada yerleştirdiği err_hata yapısını da kullanın kodlarınızda. Zarar etmezsiniz.
Kolay gelsin.