Merhaba arkadaşlar.
Ekteki örnekte bir sipariş ve planlama çalışması yapmaktayım. Birbiri ile ilişkili 6 tablo (siparis**) ve bunlara bağlı 1 adet form mevcut.
Yapı olarak formda sipariş müşteri bazında kaydı açılıp sonrasında gerekli planlamalar yapılmakta.
Sipariş numaraları benzersiz olup bu numaralar üzerinden mükerrer kayıt kontrolü oluşturdum.
Yapmak istediğim formda girilen sipariş numarası mükerrer kayıt kontrolünde vbYesNo kullanarak kayıt mevcut ise ilgili sipariş noya ait verilerini forma geri yükleyerek yapılacak düzenlemeler sonrasında kaydı güncellemek veya iptal etmek.
Mükerrer kaydı kontrol edebiliyorum, siparişi ilgili tablolardan sorgulayıp recordset oluşturarak formda ilgili alanlara yüklemeleri yapabiliyorum ancak güncellemek istediğimde birincil anahtar hatası ile güncellemeleri yapamıyorum. Nerede hata yaptığım, nasıl düzeltebileceğim hususlarında bana yol gösterebilecek deneyimli arkadaşlardan yardım rica ediyorum.
Şimdiden sonsuz teşekkürlerim ve en derin saygılarımla.
Murtaza AF
Kayıt Varsa Güncelle Yoksa Yeni Kayıt Oluştur
dilerim işinize yarar
tüm değişiklikler FRM_101_Siparisler formunda yapılmıştır
1 - formun veri girişi:Hayır yapıldı. Bu özellik formun sadece kayıt eklemesine izin verir
2 - form yüklenme olayına açılışta yeni kayda gitmesi için
3 - txt_Siparis_No güncellendiğinde olayındaki kodlar değiştirilmiştir, formunuz zaten bir sorguyla ilişkili dolayısıyla verileri recordset ile atamaya gerek yok doğrudan filter özelliği de o işi görür
tüm değişiklikler FRM_101_Siparisler formunda yapılmıştır
1 - formun veri girişi:Hayır yapıldı. Bu özellik formun sadece kayıt eklemesine izin verir
2 - form yüklenme olayına açılışta yeni kayda gitmesi için
DoCmd.GoToRecord , , acNewRec
kodu eklenmiştir, böylece sipariş no girildiğinde ilgili kayda gidilebilir3 - txt_Siparis_No güncellendiğinde olayındaki kodlar değiştirilmiştir, formunuz zaten bir sorguyla ilişkili dolayısıyla verileri recordset ile atamaya gerek yok doğrudan filter özelliği de o işi görür
Dim SPNO, gcSpNo As String
Dim SPNKR As String
SPNO = Me.txt_Siparis_No.Value
SPNKR = "SIPARISNO = '" & Forms!FRM_101_Siparisler!txt_Siparis_No & "'"
If Dlookup ("SIPARISNO", "SiparisA0", SPNKR) > 0 Then
If MsgBox(SPNO & " SİPARİŞ NO İLE KAYIT BULUNMAKTADIR." & vbCrLf & _
"DEVAM EDİLMESİ HALİNDE MEVCUT KAYITTA GÜNCELLEME YAPILACAKTIR." & vbCrLf & _
"DEVAM ETMEK İSTİYOR MUSUNUZ?", vbYesNo) = vbNo Then
' güncelleme onaylanmaz ise değişiklikleri geri al
' select case için değişken değerini ata
' kayıt düğmesinin resim yazısını kayıt ekle olarak değiştir
Me.Undo
Me.txt_kayıttanimlama = 0
Btn_KaydetGuncelle.Caption = "YENİ KAYIT EKLE"
Me.txt_Siparis_No.SetFocus
Else
' select case için değişken alan değerini ata
' kayıt düğmesinin resim yazısını güncelleme olarak değiştir.
gcSpNo = Me.SIPARISNO
Me.Undo
Me.txt_kayıttanimlama = 1
Btn_KaydetGuncelle.Caption = "KAYIT GÜNCELLE"
' kayıt güncellemenin onaylanması halinde sorgu sonuçlarını ilgili form alanlarına yükle
Me.Filter = "[SIPARISNO]='" & gcSpNo & "'"
Me.FilterOn = True
End If
End If
Murtaza Bey bende mesai sonrası ancak bakabildim sorunuza. Gördüğüm kadarı ile de Berduş Üstad son derece pratik bir şekilde çözümlemiş sorununuzu her ikinizin dblerini karşılaştırdığımda. Benim takıldığım bir diğer husus değişken tanımlamalarınızdaki doublelar. Sayısal anlamda ihtiyaçlarınızı bire bir karşılayacağı noktasında emin misiniz? Kodlama tarzınıza baktığımda bir kaç kaynaktan öğrendiğiniz verileri güzelce kendinize göre işlediğinizi ama mantık noktalarında taşların pek yerine oturmamış olduğu izlenimine kapıldım. Lütfen alınmayın nacizane mantığı anlamanız ve ihtiyacınızı doğru belirlemeniz hususlarında minik bir dikkat çekme gayretindeyim sadece.
Bir de Berduş Üstadın kodunda ufak bir değişiklik yapmanız gerekli onu belirtmeyi unutmuşum özür dileyerek onun için düzenliyorum. 3. maddedeki maddedi txt_siparis_no güncellediğinde olayı için yazılan kodlarla ilgili olarak Berduş Üstad son derece pratik çözümlemiş sorununuzu dediğim gibi ancak 25. satırda geçici değişken değerinizi tabloadaki alan değil formunuzdaki alan belirlemeli bu kodun çalışması için.
Bir de Berduş Üstadın kodunda ufak bir değişiklik yapmanız gerekli onu belirtmeyi unutmuşum özür dileyerek onun için düzenliyorum. 3. maddedeki maddedi txt_siparis_no güncellediğinde olayı için yazılan kodlarla ilgili olarak Berduş Üstad son derece pratik çözümlemiş sorununuzu dediğim gibi ancak 25. satırda geçici değişken değerinizi tabloadaki alan değil formunuzdaki alan belirlemeli bu kodun çalışması için.
Dim SPNO, gcSpNo As String
Dim SPNKR As String
SPNO = Me.txt_Siparis_No.Value
SPNKR = "SIPARISNO = '" & Forms!FRM_101_Siparisler!txt_Siparis_No & "'"
If Dlookup ("SIPARISNO", "SiparisA0", SPNKR) > 0 Then
If MsgBox(SPNO & " SİPARİŞ NO İLE KAYIT BULUNMAKTADIR." & vbCrLf & _
"DEVAM EDİLMESİ HALİNDE MEVCUT KAYITTA GÜNCELLEME YAPILACAKTIR." & vbCrLf & _
"DEVAM ETMEK İSTİYOR MUSUNUZ?", vbYesNo) = vbNo Then
' güncelleme onaylanmaz ise değişiklikleri geri al
' select case için değişken değerini ata
' kayıt düğmesinin resim yazısını kayıt ekle olarak değiştir
Me.Undo
Me.txt_kayıttanimlama = 0
Btn_KaydetGuncelle.Caption = "YENİ KAYIT EKLE"
Me.txt_Siparis_No.SetFocus
Else
' select case için değişken alan değerini ata
' kayıt düğmesinin resim yazısını güncelleme olarak değiştir.
gcSpNo = Me.txt_siparis_no.value '(buradaki değeri formunuzdaki alandan almalısınız o yüzden tablodaki değil bu şekilde formdaki alanı belirtmelisiniz)
Me.Undo
Me.txt_kayıttanimlama = 1
Btn_KaydetGuncelle.Caption = "KAYIT GÜNCELLE"
' kayıt güncellemenin onaylanması halinde sorgu sonuçlarını ilgili form alanlarına yükle
Me.Filter = "[SIPARISNO]='" & gcSpNo & "'"
Me.FilterOn = True
End If
End If
@berduş ve @atoykan hocalarım öncelikle kıymetli vaktinizi ayırıp sorunuma yardımcı olmak için verdiğiniz desteğe minnettarım, elleriniz dert görmesin.
@berduş Hocam sağolun varolun istediğim tam bunu yapmaktı teşekkür ederim. Açıklamalarınız içinde çok teşekkür ederim, derdim balık tutmayı öğrenmek olduğundan açıklamalarınız benim için son derece kıymetli. Gönlünüze sağlık hocam.
@atoykan Hocam sizde sağolun, estağfurullah alınmak haddimize değil hocalarımız karşısında. Dediğiniz gibi sizler gibi hakim değilim bir yandan öğreniyorum bir yandan uygulamaya çalışıyorum. Özellikle bu siteden çok şey öğrendim ama üye olmamıştım bilmediğim hakim olmadığım bir konuda yer işgal etmemek adına. Sizler sayesinde öğrenmeye devam ediyorum ama sorunuma çözüm bulamayınca başka yerlerre değil öğrendiğim insanlara danışmak istedim üye oldum sorumu paylaştım sağolun ilgi gösterdiniz. doublelar ile ilgili olarak 16 haneye kadar rasyonel sayıları ifade ettiği ve virgülden sonra sadece 3 sayı kullandığım için bana yeteceğini düşündüm alan kullanımının da önemine yaptığınız vurguları düşünerek. yaptığım hesaplamalarda karşıma çıkan sayılar en fazla 150.000,00 gibi olduğundan double yeter diye düşündüm. Yanlış mıyım bilmiyorum dediğiniz gibi henüz öğreniyorum hatam var ise nasıl düzeltebileceğimi mantığını sizlerden paylaşımlarınızdan öğreniyorum. Bir de eğitim seti satın aldım oradan da öğreniyorum sayın hocam. Tekrar çok teşekkür ederim.
@berduş Hocam sağolun varolun istediğim tam bunu yapmaktı teşekkür ederim. Açıklamalarınız içinde çok teşekkür ederim, derdim balık tutmayı öğrenmek olduğundan açıklamalarınız benim için son derece kıymetli. Gönlünüze sağlık hocam.
@atoykan Hocam sizde sağolun, estağfurullah alınmak haddimize değil hocalarımız karşısında. Dediğiniz gibi sizler gibi hakim değilim bir yandan öğreniyorum bir yandan uygulamaya çalışıyorum. Özellikle bu siteden çok şey öğrendim ama üye olmamıştım bilmediğim hakim olmadığım bir konuda yer işgal etmemek adına. Sizler sayesinde öğrenmeye devam ediyorum ama sorunuma çözüm bulamayınca başka yerlerre değil öğrendiğim insanlara danışmak istedim üye oldum sorumu paylaştım sağolun ilgi gösterdiniz. doublelar ile ilgili olarak 16 haneye kadar rasyonel sayıları ifade ettiği ve virgülden sonra sadece 3 sayı kullandığım için bana yeteceğini düşündüm alan kullanımının da önemine yaptığınız vurguları düşünerek. yaptığım hesaplamalarda karşıma çıkan sayılar en fazla 150.000,00 gibi olduğundan double yeter diye düşündüm. Yanlış mıyım bilmiyorum dediğiniz gibi henüz öğreniyorum hatam var ise nasıl düzeltebileceğimi mantığını sizlerden paylaşımlarınızdan öğreniyorum. Bir de eğitim seti satın aldım oradan da öğreniyorum sayın hocam. Tekrar çok teşekkür ederim.
Rica ederim, yardımı olduysa ne mutlu bize)
Bu arada soru sormaktan çekinmeyin kendi adıma bir çok şeyi soruları çözmeye çalışırken öğrendim. O nedenle sorular, bazan en saçma yada basit olanı bile, yeri geliyor dikkatimizden kaçan bir şeyi fark etmemizi yeni birşey daha öğrenmemizi sağlıyor.
Iyi calismalar)
Bu arada soru sormaktan çekinmeyin kendi adıma bir çok şeyi soruları çözmeye çalışırken öğrendim. O nedenle sorular, bazan en saçma yada basit olanı bile, yeri geliyor dikkatimizden kaçan bir şeyi fark etmemizi yeni birşey daha öğrenmemizi sağlıyor.
Iyi calismalar)
Konuyu Okuyanlar: 2 Ziyaretçi