Sayın scavusoglu,
Konunuzda bahsini geçtiğiniz hususlara dair Test_Calismasi isimli uygulamanızın eklediğiniz hali ile yapılan inceleme neticesinde edinilen izlenimler şunlardır:
İŞLEYİŞİ:
1-frm_ana isimli form çalıştırıldığında 2 kayıt söz konusu.bu iki kayıttan sonuncusu herhangi bir soru ve cevap eklenmemiş şekilde boş gelmekte,birinci kayıtta ise soru niyetine bir ifade ve soru id’sine göre cevap şıkları gelmektedir.
1-a) DoCmd.GoToRecord , , acNewRec ifadesi ile form açıldığında yeni kayıttan başlatıldığı için ilk sorudan başlama durumu da söz konusu olmamaktadır.
1-b)formun yüklendiğinde olayının ilk satırına Me.SORU_ID = [frm_sorular].Form.[SORU_ID] ifadesi eklenmiş durumda fakat sorular formunda öyle bir id bilgisi alınabilecek tanımlama bulunmamaktadır.bunun sonucunda da açılışta hata vermektedir.
1-c)ister soru olmayan ikinci kayıt için isterse de soru içeren birinci kayıt cevaplansın,DEVAM ET butonuna basıldığında cevap sonucu bildirildikten sonra, TSORUCEVAPDOKUM formu ekrana gelmekte ardından da Form1 formu açılmaktadır.peşisıra cevap verme durumu geçersiz kalmakta ve tek kayıt olarak Ana_Tablo isimli tabloya kaydedilmektedir.
2-Form1 isimli formun kapandığında olayına
DoCmd.SetWarnings False
CurrentDb.Execute "insert into Ana_Tablo2 select * from Ana_Tablo"
Kodlaması ile,birinci tabloda yer alan tek kaydın,ikinci tabloya aktarılmak istendiği görülmektedir.
DoCmd.RunSQL "delete from Ana_Tablo where 1=1"
İfadesi ile de birinci tablodaki kayıt silinmek istenmektedir.
YAPILMAK İSTENEN:
Form1 isimli formun kapandığında olayına Ana_Tablo isimli tablodaki sadece dolu kayıtların Ana_Tablo2 isimli tabloya kaydedilmesi ve akabinde de, Ana_Tablo isimli tablodan boş kayıtların silinmesi.
YORUMLAR:
1-yapılmak istenen kısmında bahsi geçen silinme işlemi gerçekleştirildiği takdirde,Form1 isimli form tekrar açıldığında boş gelecek,zira,bu formun kayıt kaynağı Ana_Tablo isimli tablo.buradaki bilgilerin silinmesi demek tekrar çalıştırmada bilgi olmaması demek.bu durum giderilmeli.
2-soruların sorulma biçimi önceden tanımlı sıralı şekilde mi yoksa rastgele bir şekilde mi sorulacağı önceden ayarlanmış olmalı.böylece,yukarıdaki duruma dair de işleyiş netleşmiş olacaktır.Form1 isimli form her yeni den çalıştırıldığında,bu iki tanımlamadan birine göre yeniden sorulacak halde ekranda belirmeli.ayrıca,eğer rastgele tercihi yapılacaksa,soru sorma süreci içerisinde aynı soruların tekrar gelmesi engellenmeli.
3- frm_ana isimli formda sorular tek cevap alındıktan sonra değerlendirme formuna yönlendirmeden sonraki soruların da cevaplanmasına imkan verecek şekilde yeniden düzenlenmeli.
4- frm_ana isimli form tekrar çalıştırılmalarda,soru ve cevap sayısal değerleri birbirini tutmamaktadır.bu giderilmeli.
5-cevap kısmı boş geçilen soru söz konusu olduğunda değerlendirmede boş geçildiğine dair bu sonucun yansıtılmamış olduğu görülmektedir.bu giderilmeli.
6- frm_ana isimli formda henüz hiçbir cevaplandırma yapmadan doğru-yanlış göstergesinde yanlış alanı yanlış cevap olduğunu göstermekte.bu giderilmeli.
Sonuç olarak;benzer örnek uygulamalar incelenmek ve gerekli olabilecek kodlama bilgileri edinilerek yapılmak istenen uygulama amacına uygun hale getirilmek üzere yeniden gözden geçirilerek gerekli kısımlar tekrar düzenlenmeli ve yeniden amacına uygun olarak yapılandırılmalı.
Ek’te, YAPILMAK İSTENEN başlığında yer alan açıklamaya yönelik örnek çalışma mevcuttur.inceleyebilirsiniz.
İyi çalışmalar,
Saygılar.
Test Çalışması - Soru 1: Tablodan Tabloya Veri Aktarımı (Boş satırları aktarmayalım)
Sn.Atoz112,
İlginize teşekkürler bir önceki mesajı okursanız projeyle ilgili ilk mesajda sorduğum soruya yönelik sonuca ulaştığımı bildirmiştim. Projeyle ilgili değerli yorumlarınız için teşekkürler. Değerlendireceğim. Son yaptığım değişiklikle ve yeni eklediğim uygulamalarla birlikte programı stabil kullanabilmekteyim.. Takıldığım yer olursa tekrar soracağım sağolun..
İlginize teşekkürler bir önceki mesajı okursanız projeyle ilgili ilk mesajda sorduğum soruya yönelik sonuca ulaştığımı bildirmiştim. Projeyle ilgili değerli yorumlarınız için teşekkürler. Değerlendireceğim. Son yaptığım değişiklikle ve yeni eklediğim uygulamalarla birlikte programı stabil kullanabilmekteyim.. Takıldığım yer olursa tekrar soracağım sağolun..
Son Düzenleme: 01/06/2014, 16:13, Düzenleyen: SCavusoglu.
sayın SCavusoglu,
Bahsettiğiniz çözüm kodlaması incelendiğinde kayıt silme işlemi için harici olarak üç kodlama hazırladığınız görülmektedir.frm_ana kapandığında olayında yazdığınız kodlama,form1 formundaki tbsil kodunda da mevcut.bu aynı işlemlerin tekrarından ve dolayısıyla da uygulamayı yormaktan dolayı yeniden düzeltilmesi gereken bir husus diye bakılmasını düşündürtmektedir.
son eklenen örnek çalışma bu şekilde hazırlanmıştır.fakat örneği inceleme isteğinde olmadığınız da görülmektedir.
Yorumlar ise,sadece ilk etapta edinilen izlenimlere dair düşünce paylaşımlarıdır.amaç ise,daha verimli ve sizi ve uygulamayı yormayacak,uğraştırmayacak sorunsuz ve rahat bir kullanım elde edilebilmesinin sağlanmasına dairdir.
İyi çalışmalar,
Saygılar.
Bahsettiğiniz çözüm kodlaması incelendiğinde kayıt silme işlemi için harici olarak üç kodlama hazırladığınız görülmektedir.frm_ana kapandığında olayında yazdığınız kodlama,form1 formundaki tbsil kodunda da mevcut.bu aynı işlemlerin tekrarından ve dolayısıyla da uygulamayı yormaktan dolayı yeniden düzeltilmesi gereken bir husus diye bakılmasını düşündürtmektedir.
Alıntı:...Şeklinde değiştirerek önce boş satır varsa silmesini, ardından tablo2 ye aktarmasını ve son olarak tümünü silmesini sağladım...diye açıklamışsınız.Çalışma anlamında verim alıyor olabilirsiniz fakat bu kadar yayılmış ve tekrarlı kodlamadansa aşağıdaki gibi bir kodlama yeterli olmaktadır.
Sub tblsil()
'Ana_Tablo2 tablosuna kaydetmek için
DoCmd.SetWarnings False
DoCmd.RunSQL "INSERT INTO Ana_Tablo2 (SORULANSORU, VERILENCEVAP) SELECT Ana_Tablo.SORULANSORU, Ana_Tablo.VERILENCEVAP FROM Ana_Tablo LEFT JOIN Ana_Tablo2 ON Ana_Tablo.ID_ANA = Ana_Tablo2.ID_ANA where Ana_Tablo.VERILENCEVAP is not null"
'eğer Ana_Tablo'dan sadece cevabı BOŞ olan kayıtlar silinsin istenirse aşağıdaki Sql sorgulama yeterli
DoCmd.RunSQL "delete from Ana_Tablo where VERILENCEVAP is null"
'eğer Ana_Tablo isimli tablodaki BÜTÜN kayıtları silmek istiyorsanız aşağıdaki kodu geçerli yapınız
' DoCmd.RunSQL "delete * from Ana_Tablo"
DoCmd.SetWarnings True
MsgBox "kaydetme ve silme işlemleri tamamlandı"
'DoCmd.OpenForm "frm_ana", acNormal
'DoCmd.Close acForm, "Form1", acSaveNo
End Sub
son eklenen örnek çalışma bu şekilde hazırlanmıştır.fakat örneği inceleme isteğinde olmadığınız da görülmektedir.
Yorumlar ise,sadece ilk etapta edinilen izlenimlere dair düşünce paylaşımlarıdır.amaç ise,daha verimli ve sizi ve uygulamayı yormayacak,uğraştırmayacak sorunsuz ve rahat bir kullanım elde edilebilmesinin sağlanmasına dairdir.
İyi çalışmalar,
Saygılar.
Konuyu Okuyanlar: 1 Ziyaretçi