Jetain
Bilgili Üye
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.
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ı
Ş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.
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.
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:
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:
Ş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:
"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.