Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2009
Nomed Nomed is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
Nomed Va por buen camino
Problemas con un job que cree

Buenas a todos bueno tengo un problema bastate simple pero que para mi es un mundo, he creado un job para el MSSQL server para mi servidor de MuOnline que hace los siguiente:

Cita:
UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('100000000')
WHERE clevel >= 370 AND ctlcode < 8 AND Resets <= 9 AND Money >= 100000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('200000000')
WHERE clevel >= 380 AND ctlcode < 8 AND Resets >= 10 AND Resets <= 14 AND Money >= 200000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('300000000')
WHERE clevel >= 390 AND ctlcode < 8 AND Resets >= 15 AND Resets <= 19 AND Money >= 300000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('400000000')
WHERE clevel >= 400 AND ctlcode < 8 AND Resets >= 20 AND Resets <= 29 AND Money >= 400000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('500000000')
WHERE clevel >= 400 AND ctlcode < 8 AND Resets >= 30 AND Resets <= 39 AND Money >= 500000000

UPDATE Character
SET clevel= ('1') , experience= ('0') , resets=resets +1, MapNumber = 0, MapPosX = 125, MapPosY = 125, Money = Money - ('650000000')
WHERE clevel >= 400 AND ctlcode < 8 AND Resets >= 40 AND Money >= 650000000
Ahora os explico lo que intentaba hacer y que no me a salido como esperaba, yo quería que segun el valor de la colunma resets te exigiera un clevel y money superior, y que te sumara 1 al valor de resets pero no se porque se me suman 2 o a veces más alguien me sabria ayudar?
Responder Con Cita
  #2  
Antiguo 27-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
supongamos que un registro tiene "Reset = 9"

Se ejecuta tu trabajo y el rango cae en la primer instrucción, con lo que al final de la instrucción tendrías "Reset = 10".

Luego se ejecuta la segunda instrucción y como ahora tienes "Reset = 10", también se ejecuta y ahora tienes el registro con "Reset = 11".

Lo mismo pasaría con los que tenga un valor igual al rango que estas revisando en cada reset.

Deberías validar el número de reset antes, con algún cursor o con un IF para que ejecutes una instrucción por cada vez que se ejecuta el trabajo, para que no te ocurra esta situación de que un registro con "Reset = 9" termine con "Reset = 11". Vamos, que ejecutar las instrucciones así secuencialmente te va a generar más errores de ese tipo.
__________________


Última edición por ContraVeneno fecha: 27-03-2009 a las 19:29:43.
Responder Con Cita
  #3  
Antiguo 27-03-2009
Nomed Nomed is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
Nomed Va por buen camino
Y si haga que entre cada uno de estos Update tenga 1 minuto de diferencia? Me pasaría lo mismo?
Responder Con Cita
  #4  
Antiguo 27-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
pues supongo que sí, no importa si es con un minuto o con un día de dierencia

si un registro tiene un valor límite (9, 14, 29, 29, 39), te lo va a sumar dos veces.

El problema es que se ejecutan las instrucciones secuencialmente y solo debería ejecutarse una.
__________________

Responder Con Cita
  #5  
Antiguo 27-03-2009
Nomed Nomed is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
Nomed Va por buen camino
Es que yo creia que poniendo en el where el clevel a 370, 380 y asi consecutivamnete no tendria este problema
Responder Con Cita
  #6  
Antiguo 27-03-2009
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
imagina un registro que tenga "clevel = 420", "ctlCode = 5", "Reset = 9" y "money = 650000000"

al final de tu trabajo, ese registro va a terminar con "Reset = 11" y "money = 350000000" porque las condiciones de las dos primeras instrucciones se cumplen, por lo que se ejecutan las dos.

La solución es ejecutar solo una instrucción por cada vez que se ejecute el trabajo.
__________________

Responder Con Cita
  #7  
Antiguo 27-03-2009
Nomed Nomed is offline
Registrado
 
Registrado: oct 2006
Posts: 4
Poder: 0
Nomed Va por buen camino
Una cosa si lo quisiera hacer todo en el mismo job como lo podria hacer?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Frames, esperar a que cree sus controles paubar Varios 12 02-09-2007 22:23:55
Cree el EXE en delphi 5 y lo corro en XP , marca error , alguna idea? kamik Varios 10 22-12-2005 17:03:10


La franja horaria es GMT +2. Ahora son las 18:07:37.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi