Neler yeni

"No such registered id" Hatası ve Çözümü (1299)

Jetain

Uzman Üye
Kullanıcı
Katılım
27 Ara 2015
Mesajlar
248
Puanları
158
Konum
BiteKO / Bursa
Kredi
1
Merhabalar,

Bugünkü konumuzda server kurulumu sırasında sıkça karşılaşılan hatalardan birisi olan "no such registered id" hatasını nasıl çözebileceğimize bakacağız.

"No such registered id" hatası nedir?
Bu hata, Türkçe'ye çevrildiğinde : "Böyle bir ID yok" demektir. Bu hata ile normalde KO , veritabanında kullanıcı eğer TB_USER tablosuna kayıtlı değilse karşılaşılır. Eğer girilen kullanıcı adı, veritabanında mevcutsa ve yine de bu hata ile karşılaşılıyor ise, veritabanında "login prosedürü" dediğimiz prosedürde bir hata, veya eksiklik mevcuttur.

Öncelikle, tipik bir login prosedürünü ele alalım.


Kod:
Değerli ziyaretçimiz, içeriği görebilmeniz için lütfen Giriş yap veya ücretsiz Kayıt ol anlayışınız için teşekkürler.

Yukarıdaki prosedür, orjinal v1397 linux sisteminden, knight_account veritabanından alıntılanmıştır. Şimdi, bu prosedürde dikkat etmemiz gereken bir kaç nokta mevcut.

"Bu prosedür ne işe yarıyor kardeşim?"
Bu prosedür, siz oyuna giriş yapmaya çalıştığınız anda, loginserver tarafından çağrılıyor. Prosedür içerisindeki @AccountID ve @Password değerleri, sizin sağlamış olduğunuz ID ve Password değerleridir. @nRet değeri ise, prosedürün geriye döndüreceği sonuç değeridir. Örneğin
SET @nRet = 1
RETURN
derseniz, login işleminin başarılı olduğunu loginserver'a iletmiş olursunuz, loginserver'da bu sonucu isteği yapan cliente, yani size iletir. Eğer
SET @nRet = 2
RETURN
derseniz, isteği yapan clientte "No such registered id" hatasını göreceksiniz.

Diğer kullanabileceğiniz nRet kodları
Kod:
Değerli ziyaretçimiz, içeriği görebilmeniz için lütfen Giriş yap veya ücretsiz Kayıt ol anlayışınız için teşekkürler.

Şimdi, konumuza geri dönecek olursak, hatamızın sebebi herşey doğru olduğu halde prosedürden SET @nRet = 2 RETURN dönmesi. Dolayısı ile, prosedürde SET @nRet = 2 yapılmış her yeri kontrol etmeli, ve hatanın kaynağını bulmalıyız.

İlk yapacağınız şey, prosedürü hiç değiştirmeden F5'e basarak prosedürü kaydetmeyi deneyin. Eğer prosedür kaydedilemez, hata ile karşılaşırsanız bilin ki prosedür içerisinde, şu an veritabanında mevcut olmayan bir tabloya erişim denenmiş, veya hatalı bir kod dizilimi mevcut. Bu durumda, hatalı olan kısımı düzeltip, prosedürünüzü kaydettiğinizde hatanız ortadan kalkacaktır.

Eğer prosedür sorunsuz derleniyor ise, SET @nRet = 2 yapılmış yerlerden önce gelen IF deyimlerini kontrol edin.

Örnek olarak verdiğim prosedürde yalnızca bir SET @nRet kısmı var, dolayısıyla eğer ben "No such registered id" hatası görüyorsam, sorunun kaynağı kesinlikle bu deyimdir.

Kod:
Değerli ziyaretçimiz, içeriği görebilmeniz için lütfen Giriş yap veya ücretsiz Kayıt ol anlayışınız için teşekkürler.
Yukarıdaki IF deyiminde pwd(parola) değeri boş ise, no such registered id hatası verilsin denmiş.


"Herşey iyi güzel hoş da, hangi prosedürün çağrıldığını nasıl bulacağım?"

Kolay. İlk önce, bütün server dosyalarınızı kapatın ve yalnızca login server'ı açın.

Başlat-çalıştır (veya windows+r) diyerek "profiler" (tırnaksız) yazın. SQL Server Profiler başlatılacaktır.

Sol üstteki "File" menüsünden "New trace"'yi seçin. Karşınıza SQL Server bağlantı diyalogu gelecektir. SQL Server Management Studio'da olduğu gibi, veritabanınıza bağlanın.

Gelen pencereden hiçbir şeyi değiştirmeden "Run" butonuna basın.

Şimdi clientinizi başlatın ve herhangi bir hesaba giriş yapmayı deneyin. SQL Server Profiler ekranında, çağrılan bütün sorgular ve prosedür adları gözükecektir.

Örneğin, benim sistemimde kullandığım prosedür adı "PROC_ACCOUNT_LOGIN" miş.

Konunun bütün noktalarını incelediğimize göre, son olarak da sizler için temiz bir ACCOUNT_LOGIN prosedürü yazarak konuyu tamamlıyorum.
Kod:
Değerli ziyaretçimiz, içeriği görebilmeniz için lütfen Giriş yap veya ücretsiz Kayıt ol anlayışınız için teşekkürler.
 

Üst