1- Öncelikle genel olarak tüm otomatik sayı alanları aslında birincil anahtar olarak seçilir. Böylece de herşey onun üzerinden bağlanarak alt formlar, alt kayıtlar, sorgu kriterleri falan oluşturulur.
2- Sonra da bir kayıt silinir. Doğal olarak da o değer artık kullanılamaz, çünkü ona bağlanan her bağlantının bir daha kullanılamaz hale gelmesi gerekir. Doğal olan bu değil midir? Ama biz ısrarla neden o sayı kullanılamaz deriz))
3- Ama şu yapılabilirdi denir hep: "Silinen sayıların yerine yeni kayıtlar gelseydi iyi olurdu..." Eeee.. O zaman da kayıtların sıralanması yanlış olurdu. 1 numaralı kayıtın tarihiyle mesela 12 numaralı kayıtın tarihi aynı olur, aralarında daha yeni kayıtlar olurdu. O da olmazdı di mi?
4- Bu maddeye gerek yok, çünkü Otomatik sayı alanının başka yapılabileceği bir alternatifi yok. En iyisi zaten yapılmış.
5- O zaman ne yapmak lazım? Otomatik sayıya ellemeyeleim o bildiği gibi tutarlı tutarlı gitsin. Bize neden bu kadar sıralı gitmesi lazım onu konuşalım.
Biz onu sıra no için bu kadar düzgün olsun isteriz. Ama olmuyor madem kendimiz sıra no mantığı kuramaz mıyız?
Kurarız tabii? Nasıl yapabiliriz? Şimdi gelin onu anlatalım:
1- Önce bir tablo yaparız. İçine otomatiksayı alanı koyarız. Birincil değer olarak da onu seçeriz. Sonra da bırakırız kendi haline)
2- Sırano alanımız olur. Oraya asıl sıra sayımızı koyacağız. Değeri sayı olmalı
3- Diğer kaydedilecek veriler için alanlarımızı ekleriz.
4- Bir sorgu yaparız. Bu sorguya sadece sırano alanımızı ekleriz. Sonra da toplam butonuna basarak buradaki değeri "enbüyük" olarak seçeriz. Artık bu sorgu kayıt sayımızın en büyük değerini gösterecektir.
5- Form üzerine gerekli alanlarımızı standart olarak ekledikten sonra bir altform üzerinden bu en büyük sayı değerini bir metin kutusuna getiririz.
6- Sonra bir başka metin kutusuyla (metin10) eğer bu değer null ise "1" olmasını sağlamak için
=IIf(IsNull([metin3]);"1";[metin3]+1)
komutunu kullanırız. (Burada metin3, en büyük sayı değerini getirdiğimiz metin kutusunun adıdır)Böylece yeni kayıta bastığımızda
[enbuyuksayi alt formu].Requery 'en büyük sayı değerini güncelle
DoCmd.GoToRecord , , acNewRec 'yeni kayda git
Me.kayitno = Metin10 'kayitno alanın metin10'dan al
adisoyadi.SetFocus 'adisoyadi alanına odaklan
komutlarını işleterek otomatik sayımızı metin10 üzerinden 1 artırılmış olarak alırız.
NOT: Dikkat edilirse aralardaki değerler silinirse bizim yöntemde de kullanılamıyor. İnanın mantıklısı da odur. İstesek kullanabilirdik ama yanlış olurdu. Bu işte silinen kayıt numarası kullanılmaz..
Konuyu daha iyi anlamak için örneğimi inceleyiniz.