vanhelsingxx
Kayıtlı Üye
- Katılım
- 30 Ağustos 2012
- Mesajlar
- 762
- Reaction score
- 0
- Puanları
- 16
- Yaş
- 33
Beyler parayı - eksiye düşme olayını nasıl ortadan kaldırırım 21gbden fazla almasın.! :?:
WHERE strUserId = @id
IF @Gold > 2100000000
BEGIN
Update USERDATA SET Gold = 2100000000 WHERE strUserId = @id
END
IF @Exp > 2100000000
BEGIN
Update USERDATA SET Exp = 2100000000 WHERE strUserId = @id
END
IF @Gold < 0
BEGIN
Update USERDATA SET Gold = 0 WHERE strUserId = @id
END
IF @Exp < 0
BEGIN
Update USERDATA SET Exp = 0 WHERE strUserId = @id
END
IF @Exp < 0 OR @Exp > 2100000000
BEGIN
SET @Exp = 0
END
IF @Gold < 0 OR @Gold > 2100000000
BEGIN
SET @Gold = 0
END
CREATE PROCEDURE UPDATE_USER_DATA
@id varchar(21),
@Nation tinyint,
@Race tinyint,
@Class smallint,
@HairR smallint,
@HairG smallint,
@HairB smallint,
@HairColor tinyint,
@Rank tinyint,
@Title tinyint,
@Level tinyint,
@Exp int,
@Loyalty int,
@Face tinyint,
@City tinyint,
@Knights smallint,
@Fame tinyint,
@Hp smallint,
@Mp smallint,
@Sp smallint,
@Str tinyint,
@Sta tinyint,
@Dex tinyint,
@Intel tinyint,
@Cha tinyint,
@Authority tinyint,
@Points smallint,
@Gold int,
@Zone tinyint,
@Bind smallint,
@PX int,
@PZ int,
@PY int,
@dwTime int,
@QuestCount smallint,
@MannerPoint int,
@LoyaltyMonthly int,
@strSkill varchar(10),
@strItem varchar(1200),
@strSerial varchar(1200),
@strQuest varchar(1000)
AS
IF @Exp < 0 OR @Exp > 2100000000[COLOR="SeaGreen"] -- Prosedür calıstırıldıgında girilen değere göre kontrol yapılıyor[/COLOR]
BEGIN
SET @Exp = 0[COLOR="SeaGreen"] -- Prosedür icerisinde atanmış olan değişkenin değerini 0 yapıyor[/COLOR]
END
IF @Gold < 0 OR @Gold > 2100000000
BEGIN
SET @Gold = 0
END
UPDATE USERDATA
Set
Nation = @Nation,
Race = @Race,
Class = @Class,
HairR = @HairR,
HairG = @HairG,
HairB = @HairB,
HairColor = @HairColor,
Rank = @Rank,
Title = @Title,
[Level] = @Level,
[Exp] = @Exp, [COLOR="SeaGreen"]-- burada prosedür icerisinde atanmıs degiskeni Exp sütununa değer olarak giriyor[/COLOR]
Loyalty = @Loyalty,
Face = @Face,
City = @City,
Knights = @Knights,
Fame = @Fame,
Hp = @Hp,
Mp = @Mp,
Sp = @Sp,
Strong = @Str,
Sta = @Sta,
Dex = @Dex,
Intel = @Intel,
Cha = @Cha,
Authority = @Authority,
Points = @Points,
Gold = @Gold,
[Zone] = @Zone,
Bind = @Bind,
PX = @PX,
PZ = @PZ,
PY = @PY,
dwTime = @dwTime,
strSkill = @strSkill,
strItem = @strItem,
strSerial = @strSerial,
sQuestCount = @QuestCount,
strQuest = @strQuest,
MannerPoint = @MannerPoint,
LoyaltyMonthly = @LoyaltyMonthly
WHERE strUserId = @id
GO
[MENTION=84]PENTAGRAM[/MENTION] altında degiskene baglı olarak update kodu var zaten ben degisken icerisindeki degeri 0 ladım
mantıksal olarak - oldugu icin < 0 olması lazım
programlamada deger >= sizeof(int) gibi kontrol edilebiliyor ( büyükse )
yinede isi garantiye alalım
Kod:IF @Exp < 0 OR @Exp > 2100000000 BEGIN SET @Exp = 0 END IF @Gold < 0 OR @Gold > 2100000000 BEGIN SET @Gold = 0 END
sql da size kontrolu nasıl yapılıyor bilmedigim icin bu sekilde en mantıklısı
örnek prosedür
Kod:CREATE PROCEDURE UPDATE_USER_DATA @id varchar(21), @Nation tinyint, @Race tinyint, @Class smallint, @HairR smallint, @HairG smallint, @HairB smallint, @HairColor tinyint, @Rank tinyint, @Title tinyint, @Level tinyint, @Exp int, @Loyalty int, @Face tinyint, @City tinyint, @Knights smallint, @Fame tinyint, @Hp smallint, @Mp smallint, @Sp smallint, @Str tinyint, @Sta tinyint, @Dex tinyint, @Intel tinyint, @Cha tinyint, @Authority tinyint, @Points smallint, @Gold int, @Zone tinyint, @Bind smallint, @PX int, @PZ int, @PY int, @dwTime int, @QuestCount smallint, @MannerPoint int, @LoyaltyMonthly int, @strSkill varchar(10), @strItem varchar(1200), @strSerial varchar(1200), @strQuest varchar(1000) AS IF @Exp < 0 OR @Exp > 2100000000[COLOR="SeaGreen"] -- Prosedür calıstırıldıgında girilen değere göre kontrol yapılıyor[/COLOR] BEGIN SET @Exp = 0[COLOR="SeaGreen"] -- Prosedür icerisinde atanmış olan değişkenin değerini 0 yapıyor[/COLOR] END IF @Gold < 0 OR @Gold > 2100000000 BEGIN SET @Gold = 0 END UPDATE USERDATA Set Nation = @Nation, Race = @Race, Class = @Class, HairR = @HairR, HairG = @HairG, HairB = @HairB, HairColor = @HairColor, Rank = @Rank, Title = @Title, [Level] = @Level, [Exp] = @Exp, [COLOR="SeaGreen"]-- burada prosedür icerisinde atanmıs degiskeni Exp sütununa değer olarak giriyor[/COLOR] Loyalty = @Loyalty, Face = @Face, City = @City, Knights = @Knights, Fame = @Fame, Hp = @Hp, Mp = @Mp, Sp = @Sp, Strong = @Str, Sta = @Sta, Dex = @Dex, Intel = @Intel, Cha = @Cha, Authority = @Authority, Points = @Points, Gold = @Gold, [Zone] = @Zone, Bind = @Bind, PX = @PX, PZ = @PZ, PY = @PY, dwTime = @dwTime, strSkill = @strSkill, strItem = @strItem, strSerial = @strSerial, sQuestCount = @QuestCount, strQuest = @strQuest, MannerPoint = @MannerPoint, LoyaltyMonthly = @LoyaltyMonthly WHERE strUserId = @id GO
Yani user sonra arkamızdan sövmesin demi
IF @Exp < 0 OR @Exp > 2100000000
BEGIN
SET @Exp = 2100000000
END
IF @Gold < 0 OR @Gold > 2100000000
BEGIN
SET @Gold = 2100000000
END