Liste kutusu işlem yapma ekleme silme de sorun

1 2
28/11/2016, 19:41

nightashes

Herkese kolay gelsin. Ekte URUN_GRUBU formun ekleme silme işlemleri yapıyorum fakat ekleme veya silme yapınca yeni kayıdı listede görmek veya görmemek için formdan çıkmam ve bir daha girmem gerekiyor. Yaptığım ekleme veya silme işleminin sonucunu listede hemen nasıl görebilirim. Teşekkürler.[attachment=25917]
28/11/2016, 21:07

alpeki99

Butonları eklerken karşınıza çıkan sihirbazı kullanmayın. Eğer kullanırsanız katıştırılmış makro ile işlemler yapılır. Bu hem debug ile hata işlemlerini gözlemlemede zorluk yapar hem sonraki Access versiyonlarında sorun çıkartabilir. Bundan dolayı butonlarınıza Vba kodları ile işlem yaptırmanız daha doğru olacaktır.

Ben makro ile değil cevabı Vba kodu ile vermiş olayım. Bir işlem sonrasında bir denetimin kaynağı olan sorguyu tekrar çalıştırmak için:


Me.lst_urungrubu.Requery


demeniz yeterlidir. Bu kodu bir butonun tıklanma olayına yazabilirsiniz.
28/11/2016, 21:33

nightashes

(28/11/2016, 21:07)alpeki99 yazdı: Butonları eklerken karşınıza çıkan sihirbazı kullanmayın. Eğer kullanırsanız katıştırılmış makro ile işlemler yapılır. Bu hem debug ile hata işlemlerini gözlemlemede zorluk yapar hem sonraki Access versiyonlarında sorun çıkartabilir. Bundan dolayı butonlarınıza Vba kodları ile işlem yaptırmanız daha doğru olacaktır.

Ben makro ile değil cevabı Vba kodu ile vermiş olayım. Bir işlem sonrasında bir denetimin kaynağı olan sorguyu tekrar çalıştırmak için:


Me.lst_urungrubu.Requery


demeniz yeterlidir. Bu kodu bir butonun tıklanma olayına yazabilirsiniz.

Fakat sihirbazı kullanmadan yaparsam direk VB ye girmiş olurum sanırım ve yeterli bilgim yok ve sizlerin başını daha çok ağrıtmak istemiyorum.

Verdiğiniz kodu her button un tıklama olayı dolu olduğu için yapamadım. Başka nasıl yapabilirim acaba?
28/11/2016, 22:07

alpeki99

Vb ile kod yazmadan bu işlerin içinden çıkamazsınız. Hatasız, hızlı, versiyonlar arası en az uyum sorunu için Vb kodu şart. Ben size tüm butonlar için örnek kodları yazacağım bunları tecrübe edin, takıldığınız yeri sorun.

Öncelikle liste kutusunun özelliklerinden Veri sekmesi Denetim Kaynağı alanındaki yazıları silmelisiniz. Liste kutusunun değerleri zaten hemen bir alttaki Satır Kaynağı alanındaki Sql sorgusundan geliyor.

Yeni butonunun tıklanma olayı:

Private Sub btn_yeni_Click()

   ' Yeni bir kayıt için hazır ol
   DoCmd.GoToRecord , , acNewRec
   
   ' Ürün grubu yazmak için kutuya odaklan
   Me.mtn_urungrubu.SetFocus

End Sub


Kaydet butonunun tıklanma olayı:

Private Sub btn_ekle_Click()

   ' Kaydet
   DoCmd.RunCommand acCmdSaveRecord
   
   ' Listeyi Yenile
   Me.lst_urungrubu.Requery
   
   ' Yeni bir kayıt için hazır ol
   DoCmd.GoToRecord , , acNewRec
   
   ' Ürün grubu yazmak için kutuya odaklan
   Me.mtn_urungrubu.SetFocus

End Sub


Liste kutusunun tıklanma olayı:

Private Sub lst_urungrubu_Click()

' Kayıtları tutacak bir değişken tanımlıyoruz ve ismine rs diyoruz
Dim rs As Object

 ' rs değişkenine değerleri bu formun kayıtlarını atadık
 Set rs = Me.Recordset.Clone
 
 ' rs içinde formdaki kayıtlar vardı. Bu kayıtlar içinde arama yapacağız ve ilk bulduğumuzu filtreleme için kullanacağız.
 ' Filtrelemek istediğimiz alan adı tablodaki Otomatik Sayı olan alan adı yani Kimlik
 ' Kimlik = liste kutusunda Kimlik değeri hangi sütunda ise o kolonun indeksi
 rs.FindFirst "[Kimlik]=" & Me.lst_urungrubu.Column(0)
 
 ' Eğer son kayıt değilse bu formun bookmarkı ile seçilen kaydın bookmarkı aynı olsun yani kayıt gösterilsin
 If Not rs.EOF Then Me.Bookmark = rs.Bookmark

End Sub


Kayıt silme butonunun tıklanma olayı:

Private Sub btn_sil_Click()

   ' Silme işleminden önce kullancıdan onay isteyelim. Eğer evet butonuna basacak olursa alta dallanacak ve kodları uygulayacak
   If MsgBox("Bu kayıt geri döndürülemeyecek şekilde silinecek." & vbCrLf & vbCrLf & "Bu işlemi yapmak istediğinize emin misiniz?", vbQuestion + vbYesNo, "Uyarı") = vbYes Then
   
       ' Accessin kayıt silme uyarısını pasif yapalım çünkü biz üstteki satırda zaten onay aldık
       DoCmd.SetWarnings False
       
       ' kayıt silme komutu
       DoCmd.RunCommand acCmdDeleteRecord
       
       ' listeyi yenile
       Me.lst_urungrubu.Requery
       
       ' yeni kayıta git
       DoCmd.GoToRecord , , acNewRec
       
       ' ürün kodu yazmak için metin kutusuna odaklan
       Me.mtn_urungrubu.SetFocus
       
       ' kapattığımız uyarıları tekrar aktif ettik
       DoCmd.SetWarnings True
   
   End If

End Sub


Bu şekilde işlemlerinizi gerçekleştirebilirsiniz.
28/11/2016, 22:39

nightashes

(28/11/2016, 22:07)alpeki99 yazdı: Vb ile kod yazmadan bu işlerin içinden çıkamazsınız. Hatasız, hızlı, versiyonlar arası en az uyum sorunu için Vb kodu şart. Ben size tüm butonlar için örnek kodları yazacağım bunları tecrübe edin, takıldığınız yeri sorun.

Öncelikle liste kutusunun özelliklerinden Veri sekmesi Denetim Kaynağı alanındaki yazıları silmelisiniz. Liste kutusunun değerleri zaten hemen bir alttaki Satır Kaynağı alanındaki Sql sorgusundan geliyor.

Yeni butonunun tıklanma olayı:

Private Sub btn_yeni_Click()

   ' Yeni bir kayıt için hazır ol
   DoCmd.GoToRecord , , acNewRec
   
   ' Ürün grubu yazmak için kutuya odaklan
   Me.mtn_urungrubu.SetFocus

End Sub


Kaydet butonunun tıklanma olayı:

Private Sub btn_ekle_Click()

   ' Kaydet
   DoCmd.RunCommand acCmdSaveRecord
   
   ' Listeyi Yenile
   Me.lst_urungrubu.Requery
   
   ' Yeni bir kayıt için hazır ol
   DoCmd.GoToRecord , , acNewRec
   
   ' Ürün grubu yazmak için kutuya odaklan
   Me.mtn_urungrubu.SetFocus

End Sub


Liste kutusunun tıklanma olayı:

Private Sub lst_urungrubu_Click()

' Kayıtları tutacak bir değişken tanımlıyoruz ve ismine rs diyoruz
Dim rs As Object

 ' rs değişkenine değerleri bu formun kayıtlarını atadık
 Set rs = Me.Recordset.Clone
 
 ' rs içinde formdaki kayıtlar vardı. Bu kayıtlar içinde arama yapacağız ve ilk bulduğumuzu filtreleme için kullanacağız.
 ' Filtrelemek istediğimiz alan adı tablodaki Otomatik Sayı olan alan adı yani Kimlik
 ' Kimlik = liste kutusunda Kimlik değeri hangi sütunda ise o kolonun indeksi
 rs.FindFirst "[Kimlik]=" & Me.lst_urungrubu.Column(0)
 
 ' Eğer son kayıt değilse bu formun bookmarkı ile seçilen kaydın bookmarkı aynı olsun yani kayıt gösterilsin
 If Not rs.EOF Then Me.Bookmark = rs.Bookmark

End Sub


Kayıt silme butonunun tıklanma olayı:

Private Sub btn_sil_Click()

   ' Silme işleminden önce kullancıdan onay isteyelim. Eğer evet butonuna basacak olursa alta dallanacak ve kodları uygulayacak
   If MsgBox("Bu kayıt geri döndürülemeyecek şekilde silinecek." & vbCrLf & vbCrLf & "Bu işlemi yapmak istediğinize emin misiniz?", vbQuestion + vbYesNo, "Uyarı") = vbYes Then
   
       ' Accessin kayıt silme uyarısını pasif yapalım çünkü biz üstteki satırda zaten onay aldık
       DoCmd.SetWarnings False
       
       ' kayıt silme komutu
       DoCmd.RunCommand acCmdDeleteRecord
       
       ' listeyi yenile
       Me.lst_urungrubu.Requery
       
       ' yeni kayıta git
       DoCmd.GoToRecord , , acNewRec
       
       ' ürün kodu yazmak için metin kutusuna odaklan
       Me.mtn_urungrubu.SetFocus
       
       ' kapattığımız uyarıları tekrar aktif ettik
       DoCmd.SetWarnings True
   
   End If

End Sub


Bu şekilde işlemlerinizi gerçekleştirebilirsiniz.

Verdiğiniz örnekleme ve aydınlatıcı tavsiyeler için teşekkür ederim. Bir tane formda denedim hepsini tek tek ufak tefek hatalar verdi ama sonunda mantığı az çok anladım sanırım yada ben öyle umuyorum. Şimdi elimde bir sürü form var ve için için yanıyorum
Sorunumda tam olarak giderildi bu sayede. Tekrar teşekkürler.
29/11/2016, 00:00

nightashes

Şimdi vermiş olduğunuz kodlar ile butonları tekrar düzenlemeye başladım. TANIM_DOVIZ ve TANIM_KDV formlarında başarılı bir şekilde uygulayabildim fakat TANIM_OLCU formunda hata alıyorum sebebi nedir acaba?[attachment=25920]
1 2