Skip to main content

AccessTr.neT


Write conflict hatasi (yazma çakışması hatası)

Write conflict hatasi (yazma çakışması hatası)

Çözüldü #1
üstadlara bir sorum olacak,

kendi bölümüm için tasarlamış olduğum ufak bir database'de write conflict (yazma çakışması) hatası almaktayım. bu konuda yardımcı olabilirseniz çok sevinirim. şimdiden herkese teşekkürler..
.rar gatmaca.rar (Dosya Boyutu: 148,59 KB | İndirme Sayısı: 8)


sorun şöyleki, ekli dosyada bulunan mdb dosyasında bir main form ve buna bağlı sürekli bir sub form mevcut. bu sürekli sub formda bir comboyu secip ( Sub Comment, Responsible comboları) değiştirmek istediğimde sürekli formdaki diğer kayıtlara ait combo değerleri de secmiş olduğum değer ile değiştirilsin. seçimi yapıp değiştiriyor ama aynı ekranda başka bir satıra geçtiğimde bir hata ve hemen ardından Write conflict uyarısı almaktayım. save record dedikten sonra kayıt işlemini yapabiliyorum. bu durumu nasıl aşarım.. yardımlarınızı bekliyorum..
Cevapla
Çözüldü #2
Responsible combo'sunun after update'i şu şekildeydi.
Kod:
If MsgBox("Do you want to change record ?", vbYesNo + vbQuestion + vbDefaultButton1, " W A R N I N G") = vbYes Then
    DoCmd.SetWarnings False
    DoCmd.RunMacro "MCR_Resp_Update"
    Me.Kayıtlı.Value = True
    Me.Lsst_Update_Date.Value = Now()
    Me.Text54.Value = Username()
    Me.Combo58.Requery
    DoCmd.SetWarnings False
    Else
    SendKeys "{ESC}"
    End If

* Msgbox'tan Yes cevabını aldıktan sonra "DoCmd.SetWarnings False" ile uyarıları kapatıyorsunuz
ancak then bloğunun sonunda true ile tekrar açmanız gerekiyordu, atlamış ve tekrar false yaptırmışsınız.

* DoCmd.RunMacro "MCR_Resp_Update"
komutu ile "QRY_Responsible_Update" adlı güncelleme sorgusunu çalıştırıp arkasından formu requery ile güncelliyorsunuz.
Ama burada atladığınız şu, siz henüz üzerinde olduğunuz mevcut kaydı kaydetmediniz.
Combo ile bir alanda değişiklik yaptığınız için mevcut kayıt güncelleme pozisyonunda kaldı.
Kod:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Bu makroyu çalıştırmadan önce bu komut ile değişikliği tabloya kaydetmelisiniz.

* Devamında mevcut kayıtta kod ile yine değişiklik yapıyorsunuz.
Kod:
Me.Kayıtlı.Value = True
    Me.Lsst_Update_Date.Value = Now()
    Me.Text54.Value = Username()

ve yine tabloya kaydetmiyorsunuz, kayıt güncelleme pozisyonunda kalıyor.
Kod:
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
yine aynı komut ile yapılan değişikliği tabloya kaydetmelisiniz.

* Me.Combo58.Requery
comboyu güncellemişsiniz ancak bunu niye yaptığınızı anlamadım.
combonun verilerinde değişiklik yoksa, güncellemeye de gerek yok.

Bu şekilde mevcut kaydı 2 defa üst üste kaydetmiş oldunuz tabloya.
Eğer işlemlerin yerlerini değiştirirseniz bir defa kaydederek çözebilirsiniz.
Yani önce update ile ilgili yaptığınız değişiklikleri atayıp, kaydedin.
Sonra güncelleme sorgusunu çalıştırın.

Kod:
If MsgBox("Do you want to change record ?", vbYesNo + vbQuestion + vbDefaultButton1, " W A R N I N G") = vbYes Then
        Me.Kayıtlı.Value = True
        Me.Lsst_Update_Date.Value = Now()
        Me.Text54.Value = Username()
        DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
        DoCmd.SetWarnings False
        DoCmd.RunMacro "MCR_Resp_Update"
        DoCmd.SetWarnings True
    Else
        SendKeys "{ESC}"
    End If

Diğer comboların kodlarını değiştirmek size kalıyor.
Bildiğini bilenin arkasından git, bildiğini bilmeyeni uyar, bilmediğini bilene öğret, bilmediğini bilmeyenden kaç.
Konfüçyüs
Cevapla
Çözüldü #3
Sayın dereza
Nerdeyse 10 ay önce üye olmuşsunuz ama ilk mesajınızı şimdi yazmışsınız. Özel bir sebebi yoksa, sorabilir miyim neden diye?

Sorunuza gelince; genelde güncelleme sorgularından sonra bu çakışma oluşuyor. Benim önerim formu kapatıp işlemi bir paravan arkasında gerçekleştirip sonra tekrar formu açtırmanız. Böylece form üzerinde kullanılmakta olan bir değerin değiştirilmesi daha sorunsuz olacaktır.

Kolay gelsin.
İnadına, ille de Accesstr.net...
Cevapla
Çözüldü #4
Sayın Seruz ayrıntılı bir çalışma sunmuş zaten.. Benim önerimi artık dikkate almanıza gerek yok. Fakat bu arada birşey daha dikkatimi çekti. Listeye eklenmesi için sorulan soruya "Hayır" derseniz ısrarla yeniden soruyor Img-grin)
İnadına, ille de Accesstr.net...
Cevapla
Çözüldü #5
Sayın Seruz verdiğiniz detaylar için çok teşekkür ederim,
yazmış olduğunuz bilgileri okuyup kafamda aşama aşama tasarlayınca nerelerde hata yaptığımı daha iyi anlamış oldum , dediğiniz gibi setwarnings.false olayını true olarak değiştirmeyi unutmuşum, siz yazınca farkettim onuda, tekrardan destekleriniz için çok çok teşekkür ederim. sayın mehmet demiral'in sorusuna da cevap vermek istiyorum, ozel bir sebebi yok tabiki, doğrudur uzun zaman once uye oldum ama sürekli ziyaret ederim siteyi takıldığım konularda daha onceden yazılmış cevaplara bakarak sorunlarımı bir şekilde gideriyordum, yazmış olduğum sorunu yabancı sitelerde de aradım ama genelde Sql hatası tazında cevaplar verilmiş. sonucta çözümü bulamayınca bu konuda deneyimli kişilere sormak istedim.ve konuyu açtım. sağolsun sayın Seruz hemen cevap yazmış. konularda cevap vermek istediğim sorularda olmuştur ama benden hızla cevap veren arkadaşlar olduğunu görünce verilmiş cevabın üstüne tekrar birşeyler yazmak istemediğimden aktif görünmemiş olabilirim.
Listeye eklenmesi için sorulan soruya "Hayır" ısrarla soruyor kısmını da
cancel=true
me.undo
komutu ile düzelttim. bu ayrıntı içinde teşekkür ederim. tekrar görüşmek dileğiyle, herkese iyi çalışmalar.
Cevapla
Çözüldü #6
O zaman aramıza -geç de olsa- hoşgeldiniz. İyi çalışmalar..
İnadına, ille de Accesstr.net...
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da
Task