Skip to main content

AccessTr.neT


eksik sayıyı sıra olarak atama

eksik sayıyı sıra olarak atama

Çözüldü #1
Merhaba iyi günler

Bir tablo üzerinde birincil anahtar olarak otomatik sayı verilen bir sütunum var. Her yeni kayıtta otomatik olarak bir sayı veriyor. Ancak veri otomatik sayı ve birincil anahtar olması sebebi ile tablodan silenen herhangi bir satırın numarasında tekrardan kayıt yapmıyor. Ben bu durumu aşmak için şöyle bir çözüm düşündüm.

Yeni bir sutun açayım ve bu sutuna form uzerinde kayıt yaptığım esnada kaydet butonunun click özelliğine bu sütunu sayıp sıradan ilk sayıyı vermesini ve eğer arada silinen bir sayı var ise yani eksik olan bir sayı varsa yeni kayıta bu sayıyı vermesini istiyorum. Bunun için Vba kodunda ne yapabilirim yardımlarınız için teşekkür ederim.
Cevapla
#2
bildiğim pratik bir yol yok belki döngü ile 1 ile en büyük kayıt No arasında ilgili sayının olup olmadığına bakılabilir yada her kayıt silme işleminden sonra silinen no ayrı bir tabloya kaydedilip en küçük değer çekilebilir ama bence sıralı bir sütuna ihtiyaç yok ve fazladan yapılacak her işlem VTnin performansını olumsuz etkiler.
neden sıralı bir sütuna ihtiyaç duyuyorsunuz?
Cevapla
#3
(06/08/2021 00:27)berduş Adlı Kullanıcıdan Alıntı: bildiğim pratik bir yol yok belki döngü ile 1 ile en büyük kayıt No arasında ilgili sayının olup olmadığına bakılabilir yada her kayıt silme işleminden sonra silinen no ayrı bir tabloya kaydedilip en küçük değer çekilebilir ama bence sıralı bir sütuna ihtiyaç yok ve fazladan yapılacak her işlem VTnin performansını olumsuz etkiler.
neden sıralı bir sütuna ihtiyaç duyuyorsunuz?

Kayıt numarası eklemem gerekiyor ve bu numaranında kayıt silinse bile atlamaması gerekiyor. Silinen kayıdın numarasını yeni katıda verip bir sonraki kayıtda da kaldığı yerden devam etmesi gerekiyor.
Eksiksiz kayıt numarasına ihtiyaç duyduğum için. Verilen bu kayıt numarasınında sonradan değişmemesi gerekli(her kayıttan baştan numara verdireceğimiz bir kod işime yaramaz yani)

Public Function Yok()
Dim Kayit as recordset,Sayac as long
set Kayit=cuurentdb.openrecordset("Select Kimlik from TabloAdi order by Kimlik")
Kayit.movefirst
do until Kayit.EOF
Sayac=Sayac+1
if sayac<>Kayit!Kimlik then Yok=Sayac:exit do
Kayit.Movenext
loop
Kayit.close:Set Kayit=nothing
end function

Böyle bir kod buldum ama işe yaratıp yaramayacağından emin değilim
Son Düzenleme: 06/08/2021, 00:40, Düzenleyen: lemoncher2.
Cevapla
#4
yukardaki kod da döngü mantığını kullanmış, yani işe yarar gibi görünüyor ama buradaki Kimlik otomatik tam sayı olan kimlik mi sizin oluşturduğunuz kimlik mi?

bir de az kayıtta yada düşük nolar silindiğinde pratik olabilir ama 100 bin kayıtta 99.998ci kayıt silinmişse zaman almaz mı döngü?
Son Düzenleme: 06/08/2021, 00:55, Düzenleyen: berduş.
Cevapla
#5
Bunu bilmiyorum kodu diğer forumdan aldım orada da bir açıklama yoktu. Sanırım bizim oluşturduğumuz sütun. Kodu çalıştıramadım siz çalıştırabilirmisiniz rica etsem

Max kayıt satısı 10.000 olacak bir tablo. 10 bin olma ihtimali de çok düşük
Cevapla
#6
bunu
(06/08/2021 00:56)lemoncher2 Adlı Kullanıcıdan Alıntı: Kodu çalıştıramadım siz çalıştırabilirmisiniz rica etsem
bunu yapmak için yeni bir VT , tablo, form oluşturmam, kayıt eklemem .... gerek
siz çalışmanızın ilgili kısmını ekleyin öyle deneyelim
Cevapla

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

Yorum yapmak için üye olmanız gerekiyor

ya da