AccessTr.neT

Tam Versiyon: Sürekli Form'da Yapılmış Değişikliği Yakalamak
Şu anda arşiv modunu görüntülemektesiniz. Tam versiyonu görüntülemek için buraya tıklayınız.
Herkese merhaba;
Sitemizde ve google amcada araştırma yaptım ancak aradığım cevaba ulaşamadım. Belki de aradığım cevaba ulaşabilmek için doğru aramayı yapamamış olabilirim. Sorunum ile alakalı olarak destek verebilecek olan olursa çok memnun olurum.

Öncelikle Access kullanmayı tamamen bu siteden öğrendim ve geçmiş tecrübem pek yok. Çalıştığım iş yerinde birimler arasında İletişim kuran ve veri kaydı sonrası bir sonraki birime kendisiyle alakalı verileri girmesi için bir program yazdım.

Program servis firması tarafından müşteriden arızası için alınan ürünün fabrikaya onarımı için gönderim sürecinden başlıyor ve fabrikanın deposu ürünü teslim aldığını servise ve fabrikanın ilgili bölümüne  mail ile bilgi geçiyor. Fabrikada ürünün kendisinemi yoksa export üretimse exporta gönderileceğinin bilgisini kayıt ediyor ve program mail atıyor. Depo fabrikadan yapılan bilgi girişine istinaden gönderim süreci başlatıyor gibi bir döngü mevcut.

Bu döngüyü ilk etapta programı her bir ürün için tek kayıtlık form kurgulamıştım. Ancak formu kullanacak kişilerden bir kayıt altına birden fazla veri oluşturma talebi geldi ve bende Servis firması tarafından girilen formda listboxlı bir formda update yöntemi ile bir servis no altında artan kalem nolar ile birden fazla veri girişini başarılı şeklide uyguladım. Ancak Depo ve fabrika tarafının kullandığı formlarda ise tek bir ana tablo üzerinden filtreleme yöntemi ile sürekli form kullanarak forma gelen bilgiler üzerinde değişiklik yapılarak kayıt etmelerini sağladım. Buraya kadar her şey çok iyi ancak problem şu noktada başlıyor. Önceki birim veri girişi yapıp mail gönderdiğinden bir sonraki birim kayıt üzerinde değişiklik yapmış ise önceki birimin aynı kayıt üzerinde önceki girdiği veriyi değiştirmesini önlemeye çalışıyorum. Bu nedenle de formun kaydet butonuna sonraki birim için önceden mail gönderilip gönderilmediğini kontrol ettiriyorum ve önceden mail ile bilgisi gönderilmiş olan kayıta değişiklik yapılmasını engelliyorum.

iptal butonumda sorun yaşıyorum. Formum bir sürekli form ve ana tablodan filtreleme ile gelen veriler üzerinde sonraki aşama bilgileri oluşturulduğundan Access'in özelliği olan ilgili satırda değişiklik yapıldığında anında veriyi tabloya kayıt ediyor olması sebebiyle aşağıdaki kodumda değişiklik yapılıp yapılmadığını yakalayamıyorum ve dolayısıyla kullanıcının kaçak bir yöntem ile art niyeti olduğunda iptal butonundaki açık sebebiyle bir sonraki birimin verilerini yanıltabilir. Textboxları ilişkisiz olarak denedim ancak formun sürekli form olması sebebiyle yine değişikliği algılatamadım. Bana bu konuda nasıl bir yol izleyebileceğim konusunda mantık ve kod yardımı yapabilirseniz çok memnun olurum...

Umarım meramımı anlatabilmişimdir.

Kod:
Private Sub btnIptal_Click()
If Me.Dirty Then
      If MsgBox("Bilgilerde değişiklik yapılmış." & vbCrLf & vbCrLf & "Düzenlemeyi iptal etmek ister misiniz?", vbExclamation + vbYesNo, "Dikkat") = vbYes Then
          Me.Undo
          Me.cboServisNo = ""
         
          TumDenetimPasif 'bu kod formdaki butonları ve text alanlarını pasif yapmakta
         
      End If
Else
 
    Me.cboServisNo = ""
   
    TumDenetimPasif 'bu kod formdaki butonları ve text alanlarını pasif yapmakta
   
End If
End Sub
Merhaba
Öncelikle örneğiniz olmadıgı için konuşmalar ferazi olacak,ancak anlatılanlardan anladıgım kadarıyla;
Firmada ayrı ayrı birimlerden girilen değerlerin değiştirlmesini önlemek veya takip etmek olarak anladım,bunun için
farklı yöntemler var ancak ilk akla gelen ve benimde bazı programlarımda kullandıgım yöntem ise; Yetki yöntemidir.
örnegin Personel bölümündeki bir kullanıcı sadece o bölüm ile ilgili giriş ve kayıtlarda güncelleme,silme yapabilmeli, Muhasebe bölümünde ise sadece verileri görebilmeli,silme yapmasına izin verilmemeli gibi düşünüp buna göre bir alt yapı ile halledilir.,Tabi bu işleri düzenlemek ve ciddi bir işyerinde verilerin düzenli girilmesi,yetki verilmesi şeklinde yapabilmeniz için çok iyi bir bilgiye ve çok iyi bir kurguya yada bu konuda uzmandan yardım almanız gerekebilir.,yoksa bütün işleri karıştırmak,hesabı altüst etmek kaçınlmaz olacaktır.
Yetkilendirme konusunda sıkıntım yok. Yetkilendirme olayını çözdüm ve uyguladım. Her birim kendisiyle alakalı formları sadece açabiliyor. Burdaki problem örneğin fabrika birimi depoya bu ürünü bana gönder veya exporta gönder bilgisini girdi ve işlemini bitirdikten sonra kaydet butonu haricinde kullandığım bir mail gönder butonum var ve buton mail gönderme işlemi yaptığında ana tablomda yer alan onay kutusuna update olayı ile işaretleme yapıyor ve ben fabrikanın artık bu dakikadan sonra eğer kendisinden sonraki birim olan depo ürünleri bu bilgiye istinaden gönderimini yaptıysa fabrika birimi daha sonradan deponun gönderimini yaptığı ürün için yönlendirme bilgisini değiştirmesini engellemeye çalışıyorum. Eğer fabrika mail gönderdikten sonra depo halen işlem yapmadıysa fabrikanın değişiklik yapmasına izin veriyorum.

Sorun tam olarak bu noktada çıkıyor depo eğer işlem yaptıysa fabrikanın değişiklik yapmasını engelleyebilmek istiyorum. Ancak formumdaki ilk mesajımda yazdığım değişikliklerden vaz geçmeye yaraması gereken iptal butonum formun sürekli form olması sebebiyle değişikliği yakalayamıyor ve yapılan değişikliği kayıt etmiş oluyor. Bu durumda fabrika birimindeki birim bu butonun açığından faydalanıp art niyetli veya istemsiz olarak depo ürünleri gönderdikten sonra veriyi değiştirip programdaki bilgilerin hatalı ve aldatıcı olmasına sebebiyet verebilir.

Bu durumu nasıl çözebileceğim konusunda sayısız denemeler ve araştırmalar yaptım ancak sonuca bir türlü ulaşamadım.
Öncelikle örneksiz soruya verilecek cevap bulmaca çözmek gibidir.

Fikir olması açısından
değiştirilmesini önlemek istediğiniz denetimin güncelleştirme öncesinde olayına

deponun işlem yapıp yapmadığını kontrol ettirebilirsiniz
evet ise engelle
hayır ise müsade et gibi