Excel Forum
ALTIN ÜYELİK Hakkında Bilgi


Geri Git   Excel Forum > Diğer Yazılımlar > SQL
Atatürk
Şifremi Unuttum

DUYURU SİSTEMİ / REKLAM PANOSU

SQL Yapısal sorgulama dili hakkında sorularınızı buraya sorabilirsiniz.

Özel Arama


Yanıtla
 
Paylaş Konu Araçları Görünüm Modları
Eski 24-02-2009, 17:24   #1
sergions
 
sergions kullanıcısının avatarı
 
Giriş: 16/08/2004
Şehir: İstanbul
Mesaj: 132
Excel Vers. ve Dili:
Office 2010 En 64 Bit
Varsayılan Benzersiz olması gereken veri

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: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
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: (Rahat kopyalayabilmeniz için tüm kodu seçmenizi sağlar)
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
sergions Çevrimdışı   Alıntı Yaparak Cevapla
Eski 24-02-2009, 17:56   #2
yeni54
 
Giriş: 15/11/2006
Mesaj: 583
Excel Vers. ve Dili:
Ms Office 2003 Türkçe
Varsayılan

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.
__________________
[COLOR="Red"][B][I]"İmansız vatan, vatansız iman muhafaza edilmez..."[/I][/B][/COLOR]
yeni54 Çevrimdışı   Alıntı Yaparak Cevapla
Eski 24-02-2009, 18:10   #3
sergions
 
sergions kullanıcısının avatarı
 
Giriş: 16/08/2004
Şehir: İstanbul
Mesaj: 132
Excel Vers. ve Dili:
Office 2010 En 64 Bit
Varsayılan

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.
sergions Çevrimdışı   Alıntı Yaparak Cevapla
Eski 27-02-2009, 19:22   #4
Rafet
 
Giriş: 24/03/2005
Mesaj: 227
Excel Vers. ve Dili:
Ofice 2010 - Türkçe
Varsayılan

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.
__________________
Ofice 2007 - Türkçe
oneXLaz

excell ve sql olmasaydı biz ne yapardık ....
Rafet Çevrimdışı   Alıntı Yaparak Cevapla
Yanıtla


Konu Araçları
Görünüm Modları

Gönderme Kuralları
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Açık
SimgelerAçık
[IMG] kodu Açık
HTML kodu Kapalı


Saat 07:14


Bu forum Elit NET - www.elitnet.com.tr tarafından sunulmaktadır.

Excel Eğitimi - Mobil Uygulama - Çorlu - Çorlu Web Tasarım - Tarot Falı - invest in turkey - Lingerie - Dyeing Machine - Karton Bardak- Çorlu Özel Eğitim- Site Yönetimi- Led Aydınlatma- Pronet Tekirdağ- Çorlu Kamera- Pronet Edirne- Pronet Kırklareli- Pronet Çerkezköy- Pronet Çorlu- Pronet Lüleburgaz- Pronet Keşan- Çorlu Araç Takip- Çorlu Su Arıtma- Boru Profil- Gebze Emlak- Beylikdüzü Temizlik- İstanbul Burun Estetiği- Bakır Sülfat- Rampa- Rotary- Çorlu İnternet Sitesi- youngblood- Çorlu Palet- Çerkezköy Palet- Çorlu Prefabrik- Çorlu Sürücü Kursu- Çorlu Sandviç Panel- Şişli Avukat- Korona Test Kalemi- Çorlu Vinç- Çorlu Pimapen Tamiri- Çorlu Çelik Konstruksiyon-
Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Advertisement System V2.6 By   Branden