Skip to main content

AccessTr.neT


iptal butonu

iptal butonu

Çözüldü #1
öncelikle merhaba
forumda access'in otomatik kaydetme sorunuyla ilgili yardım ararken şu başlıkla karşılaştım
"https://accesstr.net/konu-kaydet-butonu-hk.html"
gerçektende tam istediğim çözümü verdi. konu kilitli olduğundan teşekkür faslı buraya kaldı Img-grin

benim sorunum yine bu konu ile ilgili. bu başlık altında verilen örnek dosyada (ilgili sayfada kaydet.zip içinde) bir veri değişikliği sonrası form kapatılmak istendiğinde uyarı bilgisi geliyor (değişiklik kaydedilsin mi diye). buraya kadar herşey güzel. ancak bu uyarıda iki seçenek var "Yes ve No". ben birde Cancel butonu istiyorum. bu seçenektede, çıkış iptal olsun ve form'a veri girişi kalındığı yerden devam etsin. VB kodlarıyla aram pek yok (hiç yok Img-grin ). örneği incelemeyle butonu eklemeyi başardım Img-grin ama ne yazıkki bir işe yaramıyor Img-grin tıkladığımda değişikliği kaydetmiş ve formu kapatmış oluyor. özetle MsgBox da cancel butonum olsun ama işede yarasın Img-grin
Şimdiden teşekkürler.
Son Düzenleme: 20/04/2009, 01:45, Düzenleyen: RkNxSR.
Cevapla
Çözüldü #2
Anladığım kadarıyla bahsettiğiniz kodlar şunlar:
Kod:
If NewRecord = False Then
If MsgBox("Kayıtlarda değişiklik görüldü, değişiklik kaydedilsin mi?", vbInformation + vbYesNo, "Onay") = vbNo Then
DoCmd.RunCommand acCmdUndo

End If
End If

Burda iki seçenek var. Gelin önce bunların ne demek olduğuna ve ne yaptıklarına bir bakalım:

Evet: Değişikliği kaydetmesi için onay veririz.
Hayır: Değişikliği geri alır. Yapılan değişiklik onaylanmaz. Peki, onaylanmadığı zaman ne yapar? DoCmd.RunCommand acCmdUndo komutu en son yapılan değişiklikleri geri alır.

Sizin bahsettiğiniz ise 3 seçenekli. Siz 3 seçeneğin 3'ünde de farklı bir olay kullanmak istiyorsanız yapı tamamen değişmeli. Kodlama bilmiyorum diyorsunuz. Size bunu anlatmak çok zor olacak. Yine de bir deneyelim...

Sizin bahsettiğiniz yapı için gerekli olan yapı şu şekilde:

Kod:
Select Case MsgBox("Kayıtlarda değişiklik görüldü, değişiklik kaydedilsin mi?", vbYesNoCancel Or vbQuestion Or vbDefaultButton1, "Kaydedilsin mi?")

    Case vbYes
DoCmd.RunCommand acCmdSave
    Case vbNo
DoCmd.RunCommand acCmdUndo
    Case vbCancel
    ad.SetFocus
    Exit Sub
End Select

Select Case (Durum Seç) komutu bu şekilde kullanılır. 3 farklı durum olduğu için 3 ihtimalden seçime göre işlem yaptırmaya yarar.

Hemen bu arada bir noktayı özellikle hatırlatmakta fayda var: Sizin örnek verdiğiniz uygulama olan kaydet.zip dosyasındaki örnekte kapat butonunun olayında DoCmd.Close var. Yani formu kapatma olayı var. Form kapatılmadan önce ise Formun Güncelleştiğinde olayına yazılmış bu kodlar. Formu kapatmaya çalıştığınızda formda bir güncelleme varsa bu İletişim kutusu çıkıyor. Eğer siz de aynı yöntemi kullanıyorsanız bu sizin için doğru bir yöntem olmayacaktır. Çünkü bu kodlarda da evet ve hayır kullanılabilirken iptal için girdiğiniz kod kullanılamayacaktır. Çünkü form kapanmaktadır. Ben bu nedenle soyad alanının güncelleştirme sonrasında olayına yaptım bu kodları... Bu noktaya dikkat edin...

Şimdi 3 ihtimale tek tek bakalım:

vbYes: DoCmd.RunCommand acCmdSave diyerek kaydetmesini sağladık.
vbNo: DoCmd.RunCommand acCmdUndo diyerek geri almasını sağladık.
vbCancel: Güncellenen alandan bir önceki alan olan "ad" alanına ad.SetFocus diyerek odaklanmasını sağladık ve Exit Sub diyerek döngüden çıkmasını sağladık. Güncellenen alana odaklanamaz. Bunun için güncellenen alana değil, başka bir alana odaklandık.

Örnek olmadan anca bu kadar anlatabilirim. Siz bu anlattıklarım doğrultusunda yapmaya çalışın. Eğer yapamayacak olursanız da örneğinizi ekleyin. Örnek üzerinden anlatmaya çalışalım...

Kolay gelsin...
NZ Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
DSum ve Sum Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
DLookup Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
Cevapla
Çözüldü #3
Çok teşekkürler hocam, anlattığınız kodların mantığını anladığımı düşünüyorum.
Ancak uygulama kısmında bir sorun yaşıyorum. dediğiniz gibi deneme amaçlı, önceki (kapanma öncesi form güncelleme) kodlarını kaldırdım ve sizin verdiğiniz kodu "film adı güncelleştirme sonrasına" ekledim. beklendiği gibi uyarı msgbox ekrana geliyor, "yes ve no" seçenekleri düzgün çalışıyor ancak "cancel" seçildiğinde "Run-time error 424... Object required" hatası veriyor. hatayı incelediğimde "ad.setFocus" komutu sarı renkle işaretlenmiş oluyor.
Acaba tools menusunden bir reference mi yüklemem gerekli? bende öyle bir fikir olustu.

Ayrıca bu şekilde her text bölgesi için "güncelleştirme sonrası" diye kod eklemek, kod kalabalığına neden olmaz mı?

Yine de her ihtimale karşın ben hazırladığım programı ekledim, eski haliyle.

Bu arada aklıma gelmişken daha önce hazırladığım bir formda "sonraki kayda git" tuşuna tıklandığında en sonda boş (veri girilmeye hazır) bir sayfa oluşmuyordu. Ancak bu denememde ne yaparsam yapayım bu duruma engel olamadım (en sonda boş bir sayfa geliyor). daha önce ne yaptığımı da bir türlü hatırlayamadım. Yardımı olursanız çok sevinicem.

Son olarak konuyla pek alakalı değil ama merak ettiğimden ve çalıştığım programda olmasını hayal ettiğimden... access'de resim ekelemek gibi (bu programdaki gibi yalnızca adresi saklanıp), video eklemek ve görüntülemek mümkün müdür?

Şimdiden teşekkürler
Son Düzenleme: 20/04/2009, 12:10, Düzenleyen: RkNxSR.
Cevapla
Çözüldü #4
Kod:
vbCancel: Güncellenen alandan bir önceki alan olan "ad" alanına ad.SetFocus diyerek odaklanmasını sağladık ve Exit Sub diyerek döngüden çıkmasını sağladık. Güncellenen alana odaklanamaz. Bunun için güncellenen alana değil, başka bir alana odaklandık.
Hata veren ad.SetFocus ile ilgili açıklamayı okumamışsınız. Sizin örnek olarak verdiğiniz kaydet.zip dosyasından çıkan kaydet.mdb dosyasındaki formda iki alan vardı. Biri ad, diğeri soyad... Ben de soyad alının güncelleştirme sonrasında olayına o kodları yazdım ve ad alanına odaklanmasını sağladım. Yani iptal'e bastığınızda döngüyü başa aldım. Siz de bunu kendinize göre düzelteceksiniz. Formunuzdaki alanlardan herhangi birine odaklayacaksınız. Mesela, Deneme.SetFocus

Her text bölgesine yapmayın. Hatta text alanlarına bile yapmayın. Formun Güncelleştirme Sonrasında olayına koymanız bile yeterlidir. O ad.SetFocus bölümünü de film_adı_orijinal.SetFocus olarak değiştirin mesela...

Yalnız, bunlardan daha ziyade, İptal tuşunun bir işlevi olmalı. Siz sadece hiçbir şey yapmasın diyorsunuz. Hiçbir şey yapmaması ne demek? Hiçbir şey yapmasın derseniz kod "son yapılan değişikliği kabul et ve öyle bırak" olarak çalışacaktır. Mesela Evet/Hayır mesaj kutusunda Evet'i tıklayınca kaydediyor. Hayır'ı tıklayınca ise son yapılan değişiklikleri geri alıyor. Peki İptal'i tıklayınca ne olacak? Forma veri girişi kaldığı yerder devam edecekse, o zaman forma geri döndürmemiz lazım. Bunun için de bir alana odaklanmalı ve o alandan devam etmeli... Ha, tabi burda bi noktayı unutmayın: Eğer forma geri döndürülmenize rağmen hiçbir değişiklik yapmadan son yapılan değişikliklerle sonraki kayda falan geçecek olursanız bu defa uyarı almazsınız...

Lütfen dikkatle okuyun...

Kolay gelsin...
Diğer sorularınız için de lütfen forumumuzda arama yapın. O sorularınızın hepsinin cevabı daha önce defalarca verildi...
NZ Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
DSum ve Sum Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
DLookup Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
Son Düzenleme: 20/04/2009, 11:52, Düzenleyen: tdsharun.
Cevapla
Çözüldü #5
"ad." konusuyla ilgili olarak çok özür dilerim. ne akla hizmet bilmiyorum ama, ben onu çok farklı yerlere yordum. sanırım bunda saatlerdir bu programla uğraşmam yatıyor.

iptal butonu için... aslında istediğim tam olarak "uyarı msgbox kapansın ve form u kapatma işlemi dursun". şöyle anlatmak daha kolay sanırım. nasıl ki bir metin editöründe yazının ortasında programı kapatmak istersiniz ve bir uyarı menusu gelir. "değişiklikleri kaydetmek istiyormusunuz" (evet, hayır ve iptal seçenekleriyle) diye ve iptal e tıkladığınızda çıkış (programı kapatma) talebiniz iptal edilir ve siz yazmaya devam edersiniz, aynen bu şekilde çalışan bir cancel butonuydu amacım. sanırım olduğu kadar demek daha iyi olucak, sonuçta amatör bir çalışma.

yardım ettiğiniz için çok teşekkür ederim, iyi çalışmalar.
Cevapla
Çözüldü #6
Zaten anlattığım da tam olarak sizin istediğiniz şey...

İptal butonuna tıklayınca yaptığı tek şey belli bir alana odaklanıp işlemi sonlandırmak. Son yapılan işlemi geri almadan, herhangi bir değişiklik yapmadan formdaki bir alana odaklanarak işleme kaldığı yerden devam etmek...

Lütfen anlattıklarım doğrultusunda birkaç deneme yapın...

NOT: Bir şeyi öğrenmeden yapmaya çalışmak doğal olarak çok zordur. Bu sebeple size Access Dersleri bölümümüzü incelemenizi tavsiye ediyorum...
NZ Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
DSum ve Sum Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
DLookup Fonksiyonunun (İşlevinin) Ayrıntılı Anlatımı İçin Tıklayın...
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da
Task