Benzersiz olması gereken veri

Katılım
16 Ağustos 2004
Mesajlar
137
Excel Vers. ve Dili
Office 2010 En 64 Bit
Merhaba,

Otomatik sayı tarzındaki her kayıt girildiğinde birer birer artan sıra numaralarının tutulduğu bir tablodaki bu sayı değerini alıp bunu bir başka tabloya veri girerken sıra numarası olarak kullanmam gerekiyor.

Ancak birden fazla kullanıcı tarafından erişilen bir yapıda bulunduğum için iyi bir (Ya da kötü mü demeliyim :)) zamanlama ile iki kullanıcı birbirine çok çok yakın zamanlarda sql sorgularını yürüttüklerinde iki kullanıcının da aynı sayı numarasını alması ve içeride aynı sira numarasına sahip çift kayıt bulunması olasılığı mevcut.

Böyle bir durumu önleyebilmek için Internet'te biraz araştırma yaptım ve

Kod:
set implicit_transactions on
.
.
.
.
.
set implicit_transactions off
şeklinde bir yapıdan bahsedildiğini gördüm.

Anladığım kadarıyla "set implicit_transactions on" ile başlayan komut dizesi "set implicit_transactions off" komutunu görene dek arasında kalan sql kodlarında kullanılmakta olan table lara erişimi geçici olarak diğer kullanıcılara kapatıyor. Böylece benzersiz olması gereken bir değer birden fazla kullanıcıya tahsis edilmemiş oluyor.

Sorum da bu doğrultuda zaten; yazdığım bu iki kod satırı benim istediğim işi mi yapar? ve bu komutun alması gereken başka ön ekler varmıdır?

İşin özü; Aşağıdaki kodu çalıştırdığımda Sira değerini aynı anda bir başka kullanıcının da almasını önlemiş olur muyum?


Kod:
set implicit_transactions on
Update TbSiraNo Set Sira = Sira + 1
Set transaction isolation level read uncommitted
Select Sira From TbSiraNo 'Bu satırı VBA ile yürütüp Sira değişkenini öğreneceğim (Mesela Sira = 95 olsun).
Insert Into TbHareketler values (95,'Domates',125)    '95, yukarıda öğrendiğimiz Sıra No, 125 ise Domatesin miktarı
IF @@TRANCOUNT > 0 COMMIT TRAN
set implicit_transactions off
Not: Lütfen dene ve gör demeyiniz, iki kullanıcının aynı anda (Muhtemelen aynı milisaniye içinde) veri girmesini ummadan bunun çalışıp çalışmayacağını bilemeyeceğim :)
 
Katılım
15 Kasım 2006
Mesajlar
583
Excel Vers. ve Dili
Ms Office 2003 Türkçe
Aslında aradığınız cevap değil ama şöyle bir yöntem de kullanabilirsiniz:
TbSiraNo tablosuna 'deger string (50)' uzunlukta bir alan daha açılır.
her kullanıcı için, TbSiraNo tablosuna update işlemi yapacağı sırada random bir değer üretilir.
kullandığınız
Update TbSiraNo Set Sira = Sira + 1
cümlesi
Update TbSiraNo Set Sira = Sira + 1, deger = <random deger>
olarak değiştrilir
ve kullanıcı için üretilen sira numarası
select sira from TbSiraNo where deger = <random deger>
olarak elde edilir.
hemen sonrasında da
Update TbSiraNo Set deger = null where deger = <random deger>
olarak degeri silebilinebilir.
Kolay gelsin.
 
Katılım
16 Ağustos 2004
Mesajlar
137
Excel Vers. ve Dili
Office 2010 En 64 Bit
Aslında verdiğiniz öneri mantıklı, ancak benim bu işi yapacağım veritabanı bana ait değil (bir firmadan satın alınan program ile getirilmiş olan veritabanı).

Ben de tam olarak bu programa (istediğimiz ilaveyi yapamadıkları için) tabiri caiz ise korsan giriş yapmak durumundayım :).

Bu yüzden yeni bir alan eklemem ne yazık ki mümkün değil, ancak satır bazında kayıt ekleyebilirim.
 

Rafet

Altın Üye
Katılım
24 Mart 2005
Mesajlar
230
Excel Vers. ve Dili
Ofice 2010 - Türkçe
Altın Üyelik Bitiş Tarihi
01-12-2025
Aynı anda iki kullanıcı aynı numarayı alması ile ilgili bende bir sorun yaşamıştım.
Ben sorunu kayıtları tamamlama anında numaryı alma ile çözmeye çalışmıştım.
Numarayı kayıtlara başlarken aldıyordum. Kayıtları tamamlarken başkası bu numarayı aldı ise uyarı alıyor ve yeni numarayla kayıları yapıyordu. Yanlız burda bir sorunla daha karşılaştım. Yazıcıdan cıktı alırken kayda başlarken aldığı numara ile cıktı alabiliyordu. Bu yüzden önce kayıt alıyor sonra cıktıyı alıyordu.

Fakat dediğim çalışmada kullanıcı girişi yok . Kullanıcı girişli yapmayı düşündüğümden bu dediğiniz kodlar işime yarıya bilir.

Soruda sorarkende bilgilendirdiğiniz için teşekkürler.
 
Üst