Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-04-2010
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: Jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 13
Ledian_Fdez Va por buen camino
Thumbs down Incorrect syntax near

Hola amigos de este foro:
Tengo 2 tablas (Existencia y Salida)

Intento hacer un procedimiento almacenado donde se le de salida a un producto existente y cantidad.


Este es el código:
Código SQL [-]
 create procedure Nueva_BajaIns

@CodSAF varchar(4),
@CodIns varchar(5),
@Cant int,
@Motivo char(2),
@Fecha datetime,
@Observ varchar(50)

AS

declare @errorvar int
set @errorvar = 0

declare @Total int
set @Total = 0

begin transaction
 /* si el producto existe */
 if exists(select * from Existencia where SAF=@CodSAF and INS=@CodIns)  
   begin
     /* guardo en @Total la disponibilidad */
    @Total = select Cant from Existencia where SAF=@CodSAF and INS=@CodIns
    /* si la disponibilidad del producto satisface */
    if(@Total >= @Cant)
    begin
     /* inserto en salida */
     insert into Salidas (CodSAF, CodIns, Cant, Motivo, Fecha, Observ)
     values (@CodSAF, @CodIns, @Cant, @Motivo, @Fecha, @Observ)
     set @errorvar = @errorvar + @@ERROR   
     
     /* Si aun queda disponibilidad    */
     if(@Total > @Cant)
       begin 
  update Existencia
        set Cant = Cant - @Cant  -- realizo la resta para saber disponibilidad una vez hecha la salida
        where SAF=@CodSAF and INS=@CodIns
        set @errorvar = @errorvar + @@ERROR
       end
     else /* si la disponibilidad se queda en cero elimino el producto de existencia */
       begin
  delete from Existencia
  where SAF=@CodSAF and INS=@CodIns
  set @errorvar = @errorvar + @@ERROR
       end
    end
  
 if (@errorvar = 0)
   commit transaction
 else
   rollback transaction

Me da este error:
Cita:
Server: Msg 170, Level 15, State 1, Procedure Nueva_BajaIns, Line 26
Line 26: Incorrect syntax near '@Total'.

En espera de su ayuda y muchas gracias de antemano.

Salu2,
Ledian.

Última edición por Ledian_Fdez fecha: 30-04-2010 a las 22:56:40.
Responder Con Cita
  #2  
Antiguo 02-05-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.723
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
Pregunta: ¿Qué gestor de base de datos estás usando?

Otra pregunta, aún más importante: ¿Cuál es la línea 26? Porque en la que yo creo que es la 26 no hay ningún @Total.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #3  
Antiguo 03-05-2010
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: Jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 13
Ledian_Fdez Va por buen camino
Thumbs down Incorrect syntax near

Cita:
Empezado por Ñuño Martínez Ver Mensaje
Pregunta: ¿Qué gestor de base de datos estás usando?

Otra pregunta, aún más importante: ¿Cuál es la línea 26? Porque en la que yo creo que es la 26 no hay ningún @Total.
EL gestor de base de datos que utilizo es MSSQL Server 2000
La linea 26 es la que esta en rojo.


En espera de su ayuda un delphiano

Salu2,
Ledian.
Responder Con Cita
  #4  
Antiguo 03-05-2010
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: Jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 5.723
Poder: 19
Ñuño Martínez Va camino a la famaÑuño Martínez Va camino a la fama
No me había dado cuenta, o quizá lo cambiaste. Da igual, ahora sí la he visto. Que conste que yo de SQL sólo sé hacer consultas simples con SELECT, INSERT, UPDATE y DELETE.

Dicho esto, se me ocurre que en todas las asignaciones utilizas SET, pero en la línea del error no. Quizá sea eso, dicho desde la confesa ignorancia.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #5  
Antiguo 03-05-2010
Ledian_Fdez Ledian_Fdez is offline
Miembro
 
Registrado: Jun 2006
Ubicación: Ciudad Habana, Cuba
Posts: 242
Poder: 13
Ledian_Fdez Va por buen camino
Thumbs up Ok

Ya lo resolví, me quedo así.

Código SQL [-]
alter  procedure Nueva_BajaIns

@CodSAF varchar(4),
@CodIns varchar(5),
@Cant int,
@Motivo char(2),
@Fecha datetime,
@Observ varchar(50)

AS

declare @errorvar int
set @errorvar = 0

declare @Total int
set @Total = 0

begin transaction
 if exists(select * from Existencia where SAF=@CodSAF and INS=@CodIns)  
   begin
    select @Total = Cant from Existencia where SAF=@CodSAF and INS=@CodIns
    if(@Total >= @Cant)
      begin
       insert into Salidas (CodSAF, CodIns, Cant, Motivo, Fecha, Observ)
       values (@CodSAF, @CodIns, @Cant, @Motivo, @Fecha, @Observ)
       set @errorvar = @errorvar + @@ERROR      
       if(@Total > @Cant)
         begin 
    update Existencia
          set Cant = Cant - @Cant
          where SAF=@CodSAF and INS=@CodIns
          set @errorvar = @errorvar + @@ERROR
         end
       else 
         begin
    delete from Existencia
    where SAF=@CodSAF and INS=@CodIns
    set @errorvar = @errorvar + @@ERROR
         end
      end
   end
 if (@errorvar = 0)
   commit transaction
 else
  rollback transaction

Muchas gracias de todos modos !!!


Salu2,
Ledian.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Incorrect values within SQLDA structure fedelinardi SQL 5 01-02-2018 03:52:07
Como crear un "Cryptographic Message Syntax" en Delphi? old_martinez Varios 3 09-12-2016 15:41:59
Incorrect string value Willo MySQL 0 07-04-2010 19:45:55
error (incorrect token followed by ":") en query voldemmor Conexión con bases de datos 4 16-04-2008 18:27:00
Truncated incorrect Double value: 'Airport' richy08 MySQL 5 10-10-2007 17:11:22


La franja horaria es GMT +2. Ahora son las 10:01:29.


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