ADO STORED PROCEDURES

Post Reply
angstin
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

ADO STORED PROCEDURES

Post by angstin »

Buenas Tardes, alguien tendra un ejemplo de como llamar un store procedure y pasarles sus parametros MS-SQLSERVER a traves de ADO. Gracias.
Angel Stincone... Saludos...

FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: ADO STORED PROCEDURES

Post by horacio »

Select Tu_procedimiento( parametros )

Saludos
angstin
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Re: ADO STORED PROCEDURES

Post by angstin »

Gracias, por responder lo hago de esa manera y me da el siguiente error: Class: 'ERROR' has no exported method

Code: Select all

cad_sql0:="SELECT pp_actualiza_stock(@co_art='"+xc_art+"',@co_alma='"+xc_alma+"',@total_art="+str(xtot_art)
         cad_sql0:=cad_sql0+",@tipo_stock='stock_act',@costo_b="+str(xuct)+",@fecha_mov='"+dtoc(xf_lot)
         cad_sql0:=cad_sql0+"',@stotal_art="+str(xst_art)+",@costo_om="+str(xuctom)+",@total_uni="+str(xtot_uni)
         cad_sql0:=cad_sql0+",@co_us_in='PROFIT',@co_sucu='01',@r_stock_neg=2,@accion='R',@desde='NDD')"
                 oRs := CreateObject("ADODB.RecordSet")   
         ors:CursorType     = adOpenDynamic 
                 ors:CursorLocation = adUseClient
                 ors:LockType       = adLockOptimistic
                 oRs:ActiveConnection:= bc:ado
                 oRs:source := cad_Sql0
                 oRs:Open()
 
Angel Stincone... Saludos...

FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: ADO STORED PROCEDURES

Post by horacio »

No entiendo como pasas los parámetros, aqui un ejemplo

Code: Select all

        cQuery     := "Select Neto( " + cNroLegajo + " ), Bruto( " + cNroLegajo + " )"
        oRec := TOleAuto() : New ("ADODB.RecordSet")
        oRec : CursorLocation     := adUseClient
        oRec : CursorType          := adOpenDynamic
        oRec : LockType             := adLockOptimistic
        oRec : ActiveConnection := oVarGlobales : oCon
        oRec : Source                 := cQuery
        oRec : Open()
 
Saludos
angstin
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Re: ADO STORED PROCEDURES

Post by angstin »

Y cual es el nombre del procedimiento ahi en tu ejemplo y cuales son los parametros? gracias
Angel Stincone... Saludos...

FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: ADO STORED PROCEDURES

Post by horacio »

Neto y bruto son los procedimientos, y cNroLegajo es el parámetro. Sería bueno que que pusieras aqui como programaste el procedimiento

Saludos
angstin
Posts: 31
Joined: Tue Sep 16, 2008 3:27 pm
Location: Venezuela

Re: ADO STORED PROCEDURES

Post by angstin »

me sigue dando el mismo error
cad_sql0:="SELECT pp_actualiza_stock('"+xc_art+"','"+xc_alma+"',"+str(xtot_art)
cad_sql0:=cad_sql0+",'stock_act',"+str(xuct)+",'"+dtoc(xf_lot)
cad_sql0:=cad_sql0+"',"+str(xst_art)+","+str(xuctom)+","+str(xtot_uni)
cad_sql0:=cad_sql0+",'PROFIT','01',2,'R','NDD')"

es un procedimiento almacenado en el server MS-SQLSERVER

Code: Select all

USE [demo]
GO
/****** Object:  StoredProcedure [dbo].[pp_actualiza_stock]    Script Date: 03/11/2013 15:08:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROC [dbo].[pp_actualiza_stock]
/******************************************************************************
* Stored Procedure : pp_actualiza_stock                                       *
* Fecha Creación   : 22/11/2001                                               *
* Parámetros       : - @co_art char(30) código del articulo al cual se le mo- *
*                      difica el stock.                                       *
*                    - @co_alma char(6) código del almacen donde se afectará  *
*                      el stock.                                              *
*                    - @total_art decimal(28,12) cantidad de artículos.       *
*                    - @tipo_stock char(9) tipo de operación a ser realizada: *
*                      - stock_com --> comprometido,                          *
*                      - stock_act --> actual,                                *
*                      - stock_des --> por despachar,                         *
*                      - stock_lle --> por llegar.                            *
*                    - @costo_b decimal(28,12) costo en la moneda base.       *
*                    - @fecha_mov smalldatetime fecha del movimiento.         *
*                    - @stotal_art decimal(28,12) cantidad de artículos en la *
*                      unidad secundaria.                                     *
*                    - @costo_om decimal(28,12) costa en otra moneda.         *
*                    - @total_uni decimal(28,12) unidad de la venta.          *
*                    - @co_us_in char(6) usuario que realiza la operación.    *
*                    - @co_sucu char(6) sucursal del movimiento.              *
*                    - @r_stock_neg tinyint indica cual será el comportamien- *
*                      to con respecto al stock negativo:                     *
*                      - 0 --> indica que no se puede facturar en negativo.   *
*                      - 1 --> indica que se debe preguntar al usuario si de- *
*                              sea facturar con estoc en negativo.            *
*                      - 2 --> indica que puede facturar con stock en negati- *
*                              vo o que la respuesta fue positiva.            *
*                    - @accion char(1) indica cual es el tipo de operación a  *
*                      realizar sobre el stock:                               *
*                      - S --> aumentar el stock.                             *
*                      - R --> disminuir el stock.                            *
*                    - @desde char(4) indica desde donde se llama a este      *
*                      procedimiento.                                         *
* Descripción      : Este procedimiento se encarga modificar el stock de un   *
*                    artículo y de manejar el esquema de _ de negati- *
*                    vo de acuerdo a los parámetros que recibe.               *
* Desarrollador    : Noel Quiroz A.                                           *
******************************************************************************/
@co_art char(30),@co_alma char(6),@total_art decimal(28,12),@tipo_stock char(9),
@costo_b decimal(28,12),@fecha_mov smalldatetime,@stotal_art decimal(28,12),
@nro_lote char(10),@fech_lote smalldatetime,@costo_om decimal(28,12),
@total_uni decimal(28,12),@co_us_in char(6),@co_sucu char(6),@r_stock_neg tinyint,
@p_lotefec_amb bit,@p_lotefec_res bit,@accion char(1),@desde char(4)
as
declare @cantidad_act decimal (28,12),@scantidad_act decimal (28,12),
        @total_artc decimal(28,12)   ,@status_sal int,@des_art varchar(120),
        @ult_cos_un decimal(28,12)   ,@cos_pro_un decimal(28,12),
        @ult_cos_om decimal(28,12)   ,@cos_pro_om decimal(28,12),
        @fec_ult_co smalldatetime    ,@fec_pro_un smalldatetime,
        @fec_ult_om smalldatetime    ,@fec_pro_om smalldatetime,
        @relac_aut int               ,@uni_relac decimal(28,12),
        @p_lotenro bit               ,@p_lotefec bit,
        @lote bit                    

select @des_art    = art_des   ,@cantidad_act = stock_act,
       @ult_cos_un = ult_cos_un,@cos_pro_un = cos_pro_un,
       @ult_cos_om = ult_cos_om,@cos_pro_om = cos_pro_om,
       @fec_ult_co = fec_ult_co,@fec_pro_un = fec_cos_pr,
       @fec_ult_om = fec_ult_om,@fec_pro_om = fec_pro_om,
       @relac_aut  = relac_aut ,@uni_relac  = uni_relac,
       @lote       = lote
from art where co_art = @co_Art

if @relac_aut in (2,3) and @uni_relac != 0
   begin
      set @stotal_art = 0
   end

select @p_lotenro = p_lotenro, @p_lotefec = p_lotefec from par_emp

/******************************************************************************
* Proceso para el Stock comprometido.                                         *
******************************************************************************/
if @tipo_stock = 'stock_com' 
   begin
      if @accion = 'S'
         begin
            update art set stock_com = stock_com + (@total_art * @total_uni),
                           sstock_com = sstock_com + @stotal_art
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock comprometido en la tabla de artículos ' + 
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art as Mensaje
                  RETURN 1
               end

            if not exists (select * from st_almac where co_alma = @co_alma
                                                    and co_art = @co_art)
               begin
                  insert into st_almac (co_alma,co_art)
                                values (@co_alma,@co_art)

                  if @@error != 0
                     begin
                        select 1 as Errores,'No se pudo insertar registro en la tabla de st_almac para el stock comprometido ' +
                                 'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                                 rtrim(@co_alma) as Mensaje
                        RETURN 1
                     end
               end

            update st_almac set stock_com = stock_com + (@total_art * @total_uni),
                               sstock_com = sstock_com + @stotal_art 
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock comprometido en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
               end
         end
      else
         begin
            update st_almac set stock_com = stock_com - (@total_art * @total_uni),
                               sstock_com = sstock_com - @stotal_art 
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo disminuir el stock comprometido en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
               end

            update art set stock_com = stock_com - (@total_art * @total_uni),
                          sstock_com = sstock_com - @stotal_art
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo disminuir el stock comprometido en la tabla de artículos ' + 
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art as Mensaje
                  RETURN 1
               end
         end
   end

/******************************************************************************
* Proceso para el Stock actual.                                               *
******************************************************************************/
if @tipo_stock = 'stock_act' 
   begin
      if @accion = 'S'
         begin
            /*Actualizar los costos*/
            if @fecha_mov >= @fec_ult_co
               begin
                  set @fec_ult_co = @fecha_mov
                  set @ult_cos_un = @costo_b
                  set @cos_pro_un = ((@ult_cos_un * @cantidad_act) + (@total_art * @costo_b)) 
                                    / (@cantidad_act + @total_art)
               end

            update art set stock_act = stock_act + (@total_art * @total_uni),
                           sstock_act = sstock_act + @stotal_art,
                           ult_cos_un = @ult_cos_un,
                           cos_pro_un = @cos_pro_un,
                           fec_ult_co = @fec_ult_co
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock actual en la tabla de artículos ' + 
                           'para el artículo ' + rtrim(@co_art)  + ' ' + @des_art as Mensaje
                  RETURN 1
               end

            if not exists (select * from st_almac where co_alma = @co_alma
                                                    and co_art = @co_art)
               begin
                  insert into st_almac (co_alma,co_art)
                                values (@co_alma,@co_art)

                  if @@error != 0
                     begin
                        select 1 as Errores,'No se pudo insertar registro en la tabla de st_almac para el stock actual ' +
                                 'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' +
                                 rtrim(@co_alma) as Mensaje
                        RETURN 1
                     end
               end

            update st_almac set stock_act = stock_act + (@total_art * @total_uni),
                               sstock_act = sstock_act + @stotal_art
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock actual en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
               end
         end
      else
         begin
/******************************************************************************
* Manejo de lotes, para este fin se utilizan 3 variables:                     *
* - p_lotenro --> esta indica si en parámetros de la empresa está activada la *
*                 marca de trabajar los lotes por número.                     *
* - p_lotefec --> esta indica si en parámetros de la empresa está activada la *
*                 marca de trabajar los lotes por fecha de vencimiento.       *
* - lote      --> esta indica si el artículo en curso maneja lotes.           * 
******************************************************************************/
            if (@p_lotenro = 1 or @p_lotefec = 1) and @lote = 1
               begin
                  if len(rtrim(@nro_lote)) = space(0)
                     begin
                         select 3 as Errores,'El número de lote para el artículo ' + rtrim(@co_art) + 
                                  ' no fue especificado '

                         return 3
                     end

                  if @fecha_mov > @fech_lote and @p_lotefec_res = 0
                     begin
                        if @p_lotefec_amb = 1
                           begin
                              select 3 as Errores,'El número de lote ' + rtrim(@nro_lote) + ' se encuentra vencido ' + 
                                        convert(varchar,@fech_lote,103)

                              return 3
                           end
                        else
                           if @p_lotefec_amb = 0
                              begin
                                 select 2 as Errores,'El número de lote ' + rtrim(@nro_lote) + ' se encuentra vencido ' + 
                                           convert(varchar,@fech_lote,103) + '.' + char(13) + 'Desea Continuar?' as Mensaje

                                 return 2
                              end
                     end

                  update st_lote set stock_act      = stock_act - (@total_art * @total_uni),
                                     @cantidad_act  = stock_act - (@total_art * @total_uni),
                                     sstock_act     = sstock_act - @stotal_art,
                                     @scantidad_act = sstock_act - @stotal_art
                   where co_art   = @co_art
                     and co_alma  = @co_alma
                     and nro_lote = @nro_lote

                  if @@error != 0 or @@rowcount = 0
                     begin
                        select 1 as Errores,'No se pudo actualizar el stock actual para el lote ' + 
                               @nro_lote as Mensaje
                        RETURN 1
                     end

                  if @cantidad_act < 0
                     begin
                        if @r_stock_neg = 0
                           begin
                              if @desde in ('FACT','COMP')
                                    select 3 as Errores,'No hay suficiente stock para el artículo ' + rtrim(@co_art) + ' almacén ' +
                                           rtrim(@co_alma) + ' Nro lote ' + rtrim(@nro_lote) + '.' + char(13) +
                                           'Stock actual: ' + convert(varchar,(@cantidad_act + (@total_art * @total_uni))) 
                                           as Mensaje
                              return 3
                           end
                        else
                           if @r_stock_neg = 2
                              begin
                                 select 2 as Errores,'No hay suficiente stock para el artículo ' + rtrim(@co_art) + ' almacén ' +
                                           rtrim(@co_alma) + ' Nro lote ' + rtrim(@nro_lote) + '.' + char(13) +
                                           'Stock actual: ' + convert(varchar,(@cantidad_act + (@total_art * @total_uni)))  + char(13) + 
                                           'Desea Continuar?' as Mensaje
                                 return 2
                              end
                     end
               end

            if exists (select * from art where co_art = @co_art 
                                           and compuesto = 1 
                                           and @desde in ('FACT','COMP')
                                           and stock_act < @total_art)
               begin
                  select @total_artc = (@total_art - stock_act) from art where co_art = @co_art

                  exec @status_sal = pp_genera_compuesto @co_art,@co_alma,@total_artc,
                                                         @tipo_stock,@costo_b,@fecha_mov, 
                                                         @stotal_art,@costo_om,@total_uni,
                                                         @co_us_in,@co_sucu,@r_stock_neg,
                                                         @accion

                  if @status_sal != 0
                     begin
                        return 0
                     end
               end

 if not exists(select * from st_almac where co_art  = @co_art and co_alma = @co_alma)
            Insert into st_almac (co_art, co_alma) values (@co_art, @co_alma)

            update st_almac set stock_act      = stock_act - (@total_art * @total_uni),
                                @cantidad_act  = stock_act - (@total_art * @total_uni),
                                sstock_act     = sstock_act - @stotal_art,
                                @scantidad_act = sstock_act - @stotal_art
             where co_art  = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo actualizar el stock actual para el almacen ' + 
                         @co_alma as Mensaje
                  RETURN 1
               end

            if @cantidad_act < 0
               begin
                  if @r_stock_neg = 0
                     begin
                        if @desde in ('FACT','COMP')
                              select 3 as Errores,'No hay suficiente stock, en el almacén: ' + rtrim(@co_alma) +
                                     ' para el artículo: ' + rtrim(@co_art) +  ' ' + rtrim(@des_art) + '.' + char(13) 
                                     + 'Stock actual: ' + convert(varchar,(@cantidad_act + (@total_art * @total_uni))) 
                                     as Mensaje
                        return 3
                     end
                  else
                     if @r_stock_neg = 2
                        begin
                           select 2 as Errores,'No hay suficiente stock, en el almacén: ' + rtrim(@co_alma) +
                                     ' para el artículo: ' + rtrim(@co_art) + ' ' + rtrim(@des_art) + '.' + ' Stock actual: ' + 
                                     convert(varchar,(@cantidad_act + (@total_art * @total_uni))) + '.' + char(13) + 
                                     'Desea Continuar?' as Mensaje
                           return 2
                        end
               end

            if @scantidad_act < 0 and @stotal_art != 0
               begin
                  if @r_stock_neg = 0
                     begin
                        if @desde in ('FACT','COMP')
                              select 3 as Errores,'No hay suficiente stock(Secun), en el almacén: ' + rtrim(@co_alma) +
                                     ' para el artículo: ' + rtrim(@co_art) +  ' ' + rtrim(@des_art) + '.' + char(13) 
                                     + 'Stock actual: ' + convert(varchar,(@scantidad_act + (@stotal_art * @total_uni))) 
                                     as Mensaje
                        return 3
                     end
                  else
                     if @r_stock_neg = 2
                        begin
                           select 2 as Errores,'No hay suficiente stock(Secun), en el almacén: ' + rtrim(@co_alma) +
                                     ' para el artículo: ' + rtrim(@co_art) + ' ' + rtrim(@des_art) + '.' + ' Stock actual: ' + 
                                     convert(varchar,(@scantidad_act + (@stotal_art * @total_uni))) + '.' + char(13) + 
                                     'Desea Continuar?' as Mensaje
                           return 2
                        end
               end
            
            update art set stock_act  = stock_act - (@total_art * @total_uni),
                           sstock_act = sstock_act - @stotal_art 
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo disminuir el stock actual en la tabla de artículos ' + 
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art as Mensaje

                  RETURN 1
               end            
         end
   end

/******************************************************************************
* Proceso para el Stock por despachar.                                        *
******************************************************************************/
if @tipo_stock = 'stock_des' 
   begin
      if @accion = 'S'
         begin
            update art set stock_des = stock_des + (@total_art * @total_uni),
                           sstock_des = sstock_des + @stotal_art
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock por despachar en la tabla de artículos ' + 
                         'para el artículo ' + rtrim(@co_art) + ' ' + @des_art as Mensaje
                  RETURN 1
               end

            if not exists (select * from st_almac where co_alma = @co_alma
                                                    and co_art = @co_art)
               begin
                  insert into st_almac (co_alma,co_art)
                                values (@co_alma,@co_art)

                  if @@error != 0
                     begin
                       select 1 as Errores,'No se pudo insertar registro en la tabla de st_almac para el stock por despachar ' +
                                'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                                rtrim(@co_alma) as Mensaje
                       RETURN 1
                     end
               end

            update st_almac set stock_des = stock_des + (@total_art * @total_uni),
                               sstock_des = sstock_des + @stotal_art 
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock por despachar en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
              end
         end
      else
         begin
            update st_almac set stock_des = stock_des - (@total_art * @total_uni),
                               sstock_des = sstock_des - @stotal_art 
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo disminuir el stock por despachar en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
               end

            update art set stock_des = stock_des - (@total_art * @total_uni),
                          sstock_des = sstock_des - @stotal_art
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo disminuir el stock por despachar en la tabla de artículos ' + 
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art as Mensaje
                  RETURN 1
               end
         end
   end

/******************************************************************************
* Proceso para el Stock por entregar.                                         *
******************************************************************************/
if @tipo_stock = 'stock_lle' 
   begin
      if @accion = 'S'
         begin
            update art set stock_lle = stock_lle + (@total_art * @total_uni),
                           sstock_lle = sstock_lle + @stotal_art
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock por llegar en la tabla de artículos ' + 
                         'para el artículo ' + rtrim(@co_art) + ' ' + @des_art as Mensaje
                  RETURN 1
               end
            if not exists (select * from st_almac where co_alma = @co_alma
                                                    and co_art = @co_art)
               begin
                  insert into st_almac (co_alma,co_art)
                                values (@co_alma,@co_art)

                  if @@error != 0
                     begin
                       select 1 as Errores,'No se pudo insertar registro en la tabla de st_almac para el stock poe llegar ' +
                                'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' +
                                rtrim(@co_alma) as Mensaje
                       RETURN 1
                     end
               end

            update st_almac set stock_lle = stock_lle + (@total_art * @total_uni),
                               sstock_lle = sstock_lle + @stotal_art 
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock por llegar en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
              end
         end
      else
         begin
            update st_almac set stock_lle = stock_lle - (@total_art * @total_uni),
                               sstock_lle = sstock_lle - @stotal_art 
             where co_art = @co_art
               and co_alma = @co_alma

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo aumentar el stock por llegar en la tabla de artículos ' +
                           'para el artículo ' + rtrim(@co_art) + ' ' + @des_art + ' en el almacén ' + 
                           rtrim(@co_alma) as Mensaje
                  RETURN 1
               end

            update art set stock_lle = stock_lle - (@total_art * @total_uni),
                          sstock_lle = sstock_lle - @stotal_art
             where co_art = @co_art

            if @@error != 0 or @@rowcount = 0
               begin
                  select 1 as Errores,'No se pudo disminuir el stock por llegar en la tabla de artículos ' + 
                           'para el artículo ' + rtrim(@co_art)  + ' ' + @des_art as Mensaje
                  RETURN 1
               end
         end
   end

RETURN
 
Angel Stincone... Saludos...

FWH 8.08
XHARBOUR 1.1.0
VERCE 5.3
ADS 9.0
horacio
Posts: 1270
Joined: Wed Jun 21, 2006 12:39 am
Location: Capital Federal Argentina

Re: ADO STORED PROCEDURES

Post by horacio »

No trabajo mssql, imagino que el paso de parámetros debe estar normalizado para cualquier motor sql. Lo que no entiendo son las igualdades que ponés en el paso de parámetros po ej '@co_art='"+xc_art', en MySql el paso sería solamente el valor. Acá se me acabó la sapiencia.

Saludos
User avatar
anserkk
Posts: 1280
Joined: Fri Jun 13, 2008 11:04 am
Location: Kochi, India

Re: ADO STORED PROCEDURES

Post by anserkk »

If you are looking for a Sample on how to call a stored procedure on MS-SQL Server with parameters, here is one which may be useful to you

Code: Select all

// Trying to initiate the Stored Procedure
oCmd:=CreateObject("ADODB.Command")
oCmd:ActiveConnection:=oApp:oConnection
oCmd:CommandType:=adCmdStoredProc
oCmd:CommandText:="StockUpDate"  // Strored Procedure Name

// Creating Parameters before sending parameters to Stored Procedure
oParam := oCmd:CreateParameter( "cPartNo", adChar, adParamInput, 25 )
oCmd:Parameters:Append( oParam )
oParam := oCmd:CreateParameter( "cPartName",adChar, adParamInput, 25 )
oCmd:Parameters:Append( oParam )
oParam := oCmd:CreateParameter( "cQty",adChar, adParamInput, 25 )
oCmd:Parameters:Append( oParam )
oParam := oCmd:CreateParameter( "cColumName",adChar, adParamInput, 25 )
oCmd:Parameters:Append( oParam )

// Assigning Values to the Paramter
TRY
   oCmd:Parameters( "cPartNo" ):Value := SparMast->PART
   oCmd:Parameters( "cPartName" ):Value := Rtrim(Ltrim(SparMast->DESC))
   oCmd:Parameters( "cQty" ):Value := LTrim( Str(Int(SparMast->CURR_QTY))  )
   oCmd:Parameters( "cColumName" ):Value := "Alpy_Parvr_Qty"
CATCH oError
   ShowSqlError( oError )
END     

// Executing or Calling Stored Procedure    
TRY
   oCmd:Execute()
CATCH oError
   ShowSqlError( oError )
END 
 
Regards
Anser
Simon
Posts: 105
Joined: Thu Oct 20, 2005 12:29 pm
Location: Maracaibo, Venezuela.

Re: ADO STORED PROCEDURES

Post by Simon »

Em sql server (microsoft) los store procedures se llaman con EXECUTE no con SELECT.

por ejemplo, si necesito el SP me devuelva un recordset:

Code: Select all


oClientes := adoRecordSet( oApp:oAdoConnector, "EXEC sp_buscar_cliente '" + aVars[ 1 ] + "'" )
xBrowse( oClientes )

Function ADORecordSet( oConnect, cSql, lConnect )

   Local oRs
   Local cError := "No se ha podido crear el objeto contenedor RECORDSET !"

   try
      oRs := CreateObject("ADODB.RecordSet")
      oRs:CursorLocation  := 3
      oRs:LockType        := 4
      oRs:ActiveConnection:= oConnect
      oRs:source := cSql
      oRs:Open()
      lConnect := .t.
   catch
      
      msadoerror( cSql, "Error de Conexion con servidor" )
      return nil

   end try

Return oRS


 
Post Reply