Yeni kayıtların ID'lerindeki atlama problemi,

1 2
01/02/2016, 20:02

kouzo

Merhaba,

Daha önce aşağıdaki linkte görebileceğiniz konuda sorduğum soruya istinaden geliştirmeye çalıştığım dosyada karşılaştığım bir problem var.  

Üç farklı alandaki degerleri tek bir alanda birlestirme

Form kısmında "Proje No" ve "Kategori" alanlarına bilgi girilmesi zorunluluğuna yönelik (atoz112 tarafından yazılmış) bir makro mevcut. Bu kısımlardan birini boş bırakıp kaydet düğmesine basıldığında bir uyarı mesajı çıkıyor ancak bu sırada "Problem_ID" kısmından okuduğu rakam bir artıyor. Bu şekilde hatalar verdiğinde aralarda bazı numaralar atlanıyor. Bu numaranın birbirini takip ediyor oluşu ve eksiksiz olması bir zorunluluk. Eklediğim dosyada en son iki kaydın öncekilerden 3'er rakam daha fazla olduğunu görebilirsiniz. Bunu engellemek için yeni kaydın "Problem_ID" değerinin en son kaydın "Problem_ID" değerinden bir fazla olacak şekilde düzenlemek istiyorum. Bunu nasıl yapabilirim?

Teşekkürler,

iyi çalışmalar,
01/02/2016, 20:14

atoz112

sayın kouzo,

Alıntı:...Form kısmında "Proje No" ve "Kategori" alanlarına bilgi girilmesi zorunluluğuna yönelik (atoz112 tarafından yazılmış) bir makro mevcut. Bu kısımlardan birini boş bırakıp kaydet düğmesine basıldığında bir uyarı mesajı çıkıyor ancak bu sırada "Problem_ID" kısmından okuduğu rakam bir artıyor. Bu şekilde hatalar verdiğinde aralarda bazı numaralar atlanıyor. Bu numaranın birbirini takip ediyor oluşu ve eksiksiz olması bir zorunluluk. Eklediğim dosyada en son iki kaydın öncekilerden 3'er rakam daha fazla olduğunu görebilirsiniz. Bunu engellemek için yeni kaydın "Problem_ID" değerinin en son kaydın "Problem_ID" değerinden bir fazla olacak şekilde düzenlemek istiyorum. Bunu nasıl yapabilirim?...

ifadenize yönelik olarak;
bu durumun nedeni şu:
eğer her iki denetimden biri boş bırakılacak olursa,bağlantısını verdiğiniz konuda hazırlanan örneklerde de görüleceği üzere,kayıt yapması engellenmiş olacağından ve kaydetmeksizin işlemden vazgeçilmesini sağlamak içindir.

bundan dolayı da,yeni açılan bir kayıt aşamasından bu denetimlerden birinin boş bırakılması akabinde de,kayıt yapmadan yeni kayıt işleminin iptal edilmesi (undo) sağlanmış olmaktadır.bu da,sonrasında yeni bir kayıt açıldığında ID değerinin bir değer daha artması demektir ya da kaç kez kayıt yapma işlemi iptal edilmişse o değer kadar.

ID değerinin kaldığı yerden devam etmesini sağlamak için iki yöntem geçerlidir.

birincisi;ya undo işlemi yaptırmaksızın formda bekletip boş kalan değerleri de kullanıcının doldurmasını sağlatmak ya da (yanılmıyorsam konularda olması gerekliydi arama sayfasından araştırmak lazım) ID değerinin kaldığı yerden devam etmesi veya sıfırlanıp tekrar sıralamasını sağlatma işlemi yaptırılabilir.

bilginize...iyi çalışmalar,saygılar.
01/02/2016, 22:42

kouzo

(01/02/2016, 20:14)atoz112 yazdı: sayın kouzo,



Alıntı:...Form kısmında "Proje No" ve "Kategori" alanlarına bilgi girilmesi zorunluluğuna yönelik (atoz112 tarafından yazılmış) bir makro mevcut. Bu kısımlardan birini boş bırakıp kaydet düğmesine basıldığında bir uyarı mesajı çıkıyor ancak bu sırada "Problem_ID" kısmından okuduğu rakam bir artıyor. Bu şekilde hatalar verdiğinde aralarda bazı numaralar atlanıyor. Bu numaranın birbirini takip ediyor oluşu ve eksiksiz olması bir zorunluluk. Eklediğim dosyada en son iki kaydın öncekilerden 3'er rakam daha fazla olduğunu görebilirsiniz. Bunu engellemek için yeni kaydın "Problem_ID" değerinin en son kaydın "Problem_ID" değerinden bir fazla olacak şekilde düzenlemek istiyorum. Bunu nasıl yapabilirim?...

ifadenize yönelik olarak;
bu durumun nedeni şu:
eğer her iki denetimden biri boş bırakılacak olursa,bağlantısını verdiğiniz konuda hazırlanan örneklerde de görüleceği üzere,kayıt yapması engellenmiş olacağından ve kaydetmeksizin işlemden vazgeçilmesini sağlamak içindir.

bundan dolayı da,yeni açılan bir kayıt aşamasından bu denetimlerden birinin boş bırakılması akabinde de,kayıt yapmadan yeni kayıt işleminin iptal edilmesi (undo) sağlanmış olmaktadır.bu da,sonrasında yeni bir kayıt açıldığında ID değerinin bir değer daha artması demektir ya da kaç kez kayıt yapma işlemi iptal edilmişse o değer kadar.

ID değerinin kaldığı yerden devam etmesini sağlamak için iki yöntem geçerlidir.

birincisi;ya undo işlemi yaptırmaksızın formda bekletip boş kalan değerleri de kullanıcının doldurmasını sağlatmak ya da (yanılmıyorsam konularda olması gerekliydi arama sayfasından araştırmak lazım) ID değerinin kaldığı yerden devam etmesi veya sıfırlanıp tekrar sıralamasını sağlatma işlemi yaptırılabilir.

bilginize...iyi çalışmalar,saygılar.

Sayın Atoz112,

Bahsettiğiniz gibi kod içindeki "undo" işlemini çıkartıp onun yerine "refresh" ekledim bu sayede eksik alan uyarısı verdikten sonra forma kaldığı yerden devam edilebiliyor. Bu sayede "Problem_ID" değeri de artmamış oluyor. Elimden geldiği kadar denedim herhangi bir hata vermedi. Şimdilik kalan tek sorunum formdaki geri kalan beş alan için de aynı şekilde eksik alan uyarısı tanımlamak. Yol gösterdiğiniz şekilde biraz daha deneme yaptıktan sonra o sorunu da çözebilirim inşallah.

Destek ve yardımlarınız için teşekkürler,

iyi çalışmalar,
01/02/2016, 23:04

atoz112

sayın kouzo,

Alıntı:...kod içindeki "undo" işlemini çıkartıp onun yerine "refresh" ekledim bu sayede eksik alan uyarısı verdikten sonra forma kaldığı yerden devam edilebiliyor. Bu sayede "Problem_ID" değeri de artmamış oluyor...

ifadenize yönelik olarak;
Me.Refresh kod satırını UNDO kodu ile değiştirme işlemi,bahsettiğiniz anlamda bir ID değerinde düzenleme yapmayı sağlamamaktadır.

yapılan işlem sadece;UNDO kodlarının çıkarılması ile mevcut girilmekte olan kayıt bilgisinin boş olan iki denetime göre ancak bir uyarı iletisi vermesini sağlamak ve akabinde boş denetimlerin tamamının doldurulmasını sağlamak.

fakat bu dolu hali ile kayıt yaparken,ID alanında bir düzenleme yapmaz.en son değer ne ise o değerden sonrasına devam eder.örneğin;birkaç kayıt siliniz tablodan ve yeni bir kayıt ekleyiniz.kast edilen açıklamanın işlerliğini fark edeceksiniz.

bu nedenle,otomatik sayı alanının sıfırlanıp yeniden sıralanmasını sağlatmak gerekecektir.site arama sayfasında "autonumber","otomatik sayı" (çift tırnaklar içinde olacak şekilde) ya da "sıfırlama" ifadelerini aratmak sureti ile bu konuda araştırmada bulunabilirsiniz.

bilginize...iyi çalışmalar,saygılar.
03/02/2016, 23:54

kouzo

(01/02/2016, 23:04)atoz112 yazdı: sayın kouzo,



ifadenize yönelik olarak;
Me.Refresh kod satırını UNDO kodu ile değiştirme işlemi,bahsettiğiniz anlamda bir ID değerinde düzenleme yapmayı sağlamamaktadır.

yapılan işlem sadece;UNDO kodlarının çıkarılması ile mevcut girilmekte olan kayıt bilgisinin boş olan iki denetime göre ancak bir uyarı iletisi vermesini sağlamak ve akabinde boş denetimlerin tamamının doldurulmasını sağlamak.

Merhaba,

Ben aslında "Me.Refresh" komutunu sadece kod içinde "Me.Undo" silince hata vermesin diye eklemiştim. Vba konusunda bilgim olmadığından böyle bir mantık yürüttüm. Bu sayede undo yaparak formun sıfırlanması engellenmiş oldu. Bu sayede de ID numaraları bu sebeple atlanmış olmuyor.

Ancak bahsettiğiniz gibi bir durumu düşünemedim açıkçası. Bahsettiğiniz gibi kayıt silinmesi söz konusu olursa yine aynı sorunla karşılaşırım.

Yol gösterdiğiniz şekilde arattım ve aşağıdaki linkte gördüğüm metodu denemeye karar verdim. En kısa sürede deneyip geri dönüş yapmaya çalışacağım.

Otomatik sayıyı el ile olusturalım.

iyi çalışmalar,
04/02/2016, 14:15

atoz112

Sayın kouzo,

1)
Alıntı:...Ben aslında "Me.Refresh" komutunu sadece kod içinde "Me.Undo" silince hata vermesin diye eklemiştim...

ifadenize yönelik olarak;

(kısa bir bilgilendirme olması adına)

Me.Refresh komutu:
Mevcut olan kayıt işlemi esnasında veya duruma göre sonrasında,aktif olan kayıt üzerinde kalınmasını sağlamak için Tazeleme yapmak ve o aktif kayıt üzerinde kalmak anlamındadır.

Me.Undo komutu:
Mevcut olan bir kayıt üzerinde iken duruma ve tercihe göre ya kayıt işleminden vazgeçilmesini ve kayıt yapılmamasını sağlamak ya da bir kritere veya bir sonuç durumuna göre edinilen bir veri söz konusu olduğunda bu sonuca göre kayıt işleminden vazgeçilmesini sağlamak için kullanılmaktadır.

Alıntı:...hata vermesin diye eklemiştim...

Hata vermemesinden kast ettiğiniz olası kriter veya durum gelişirse (örneğinizdeki gibi;eğer denetimlerden biri ya da birkaçı boş ise) boş (NULL) hatası vermemesi ya da kod sayfasına yönlendirmemesi için,yapılması gereken;denetime boş (NULL) fonksiyonu yazmakla birlikte mesaj kodunun bir alt satırına Exit Sub kod satırını veya bu kodun da bir üzerine hangi denetim boş ise o denetime odaklanma (.setfocus) ifadesini yazmak yeterlidir.

Alıntı:...Bu sayede undo yaparak formun sıfırlanması engellenmiş oldu...

ifadenize yönelik olarak;
önceki mesajlardaki açıklamalarda da bahsi yapıldığı üzere,sıfırlanma ile kast ettiğiniz id değerinin silinme işlemi olmaksızın bütün denetimlerin boş geçilmeksizin hepsinin doldurulmasını sağlamak.zaten,tüm denetimleri doldurduktan sonra bilerek kayıt silme işlemi olmaksızın direkt olarak id sırasının peşi sıra devam etmesini sağlamış oluyorsunuz.yapılan işlemin özeti bu aslında.

Fakat,yine önceki mesajlardaki açıklamalarda da bahsi geçtiği üzere,bu işlemleri yapmak (kast edilen;tüm denetimleri doldurmak) ile istediğiniz id değerinin kaldığı yerden devam etmesini sağlatmaz.

Aksine,bir ya da birkaç kaydı tablodan kasti olarak silip,akabinde yeni bir kayıt girdiğinizde silinen id değerlerinin sonrasındaki ilk değer ne gelecekse o değerden başlamaya devam eder.örneğin;son kayıt id değeri 10 olsun.fakat,siz,iki kaydı sildiniz.sonrasında,yeni bir kayıt girdiğinizde,yeni kaydın id değeri 11 olur.tüm mesajlarda anlatılmak istenen de bu aslında.

2)
örnek edinmek üzere bağlantısını yazdığınız konu;sizin yapmayı veya olmasını düşündüğünüz sonucu edinmenizi sağlamayacaktır.sizin olmasını istediğinizin aksine,benzer bir işlem gibi görünse de ayrı bir hususa dair bahsi yapılan bir konudur.

O konuda,sayın demiral’ın bahsettikleri husus şu,özetle:otomatik sayı veri türünü içeren tablodaki bu alana dokunmaksızın,yeni bir alan açılıp bu alan üzerinden kayıt sıralaması verdirmek.tercihe göre uygulamada eğer ilişkilendirme kullanılacaksa otomatik sayı veri türü olarak oluşturulan alan üzerinden işlemler sağlanırken,diğer sıralama benzeri işlemlerde ise bu yeni alan üzerinden gerçekleştirilir.

Bu bağlantısı verilen örnek üzerinden bir çalışma yapıldığında,şu ayrıntılara dikkatinizi çekmek gerektiğini de belirtmekte fayda var kanısındayım.

a) Düşündüğünüz ve istediğiniz gibi otomatik sayı üzerinden bir işlem olmayacaktır.sadece,yeni bir sıralama alanı üzerinden yapılan bir çalışmadır.

b) Eğer tüm denetimleri doldurma zorunluluğu ve undo işlemi uygulanmayacaksa,örnekteki gibi kullanmanız gerekecektir.yeni alandaki kayıt sırası kaldığı yerden devam edecektir.

c) Eğer bu mesajdaki 1.maddede örnek vererek bahsi yapıldığı gibi,mevcut kayıtlar içerisinden yine örnek verilecek olunduğunda önceki kayıtlardan bir ya da birkaçı silindiğinde;bu kayıtlar içerisinde herhangi bir yerine sayma veya yerine numara atama gibi bir durum olmayacaktır.

d) Bağlantısı verilen örnekteki işlemler sadece;mevcut aktif olan bir kayıt üzerinde iken bu kayıt silindikten sonra ya da undo işlemini uygulasanız bile aktif kayıt üzerinde,yeni bir kayıt girildiğinde yeni alan olarak açılan kayıt sayısını gösteren denetimde son kalan değer ne ise bir artırılması demektir.sağlayacağı olumlu sonuç bu olacaktır.

ÖRNEK
Bağlantısı verilen örnek uygulamadaki kod sayfasını açıp, telefonu adlı denetimin ÇIKILDIĞINDA olay yordamını aşağıdaki kodlar ile değiştirdiğinizde dahi;undo komutu ile kaydetmekten vazgeçip sonrasında yeni bir kayıt eklediğinizde,kaldığı yerden devam edecektir.

Kod:
'[enbuyuksayi alt formu].Requery
 
If MsgBox("İslemi iptal etmek istiyor musunuz?", vbYesNo, "GERİ ALMA UYARISI") = vbYes Then
    Cancel = True
    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdUndo
    DoCmd.SetWarnings True
Me.Requery
Exit Sub
Else
[enbuyuksayi alt formu].Requery
End If

Paylaşılan bilgilendirmelerin faydalı olması temennisi ile.

Son olarak;bahsi yapılmışken,sayın demiral’a bağlantıdaki konusu için teşekkürler.

Bilginize…iyi çalışmalar,saygılar.
1 2