invocar funciones sql con ado

invocar funciones sql con ado

Postby artu01 » Wed Jul 31, 2019 12:35 am

Gente:
Estoy tratando de llamar a una funcion sql con ADO pero no consigo hacerlo y también como capturo el resultado

sql:
Code: Select all  Expand view  RUN

CREATE FUNCTION [dbo].[CalcSaldo]
(
  @Codigo varchar(8), @nMes int, @codusu char(2)
)
RETURNS int
AS
BEGIN
  -- Declare the return variable here
  DECLARE @nResul int

  -- Halla el stock actual
  Set @nResul = (dbo.CalcIngAno(@Codigo, @nMes,@codusu) - dbo.CalcSalAno(@Codigo, @nMes, @codusu)) + (dbo.CalcIngMes(@Codigo, @nMes, @codusu) - dbo.calcSalMes(@Codigo, @nMes, @codusu))
  RETURN @nResul

END
GO

codigo fwh:

Code: Select all  Expand view  RUN

oCon1:=AbreConexBD()

oCon1:Execute( "CALL CalcSaldo('T25CD', '01', '00' )" )


Function AbreConexBD()
  LOCAL cCString, oError //, oRS, lRS := .f.

  cCString := "Provider=SQLOLEDB;"
  cCString += "Server=PYSASERVER;"
  cCString += "Database=PysaBD;Uid=sa;Pwd=Pysa123456;"
  TRY
    oCon1 := CreateObject( "ADODB.Connection" )
    oCon1:Open( cCString )
  CATCH oError
     MsgStop( oError:Description )
     //RETURN
  END
Return Nil
 


error que sale:
Code: Select all  Expand view  RUN

   Error description: (DOS Error -2147352567) WINOLE/1007  Sintaxis incorrecta cerca de 'T25CD'. (0x80040E14): Microsoft OLE DB Provider for SQL Server
   Args:
     [   1] = C   CALL CalcSaldo('T25CD', '01', '00' )
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: invocar funciones sql con ado

Postby jacgsoft » Wed Jul 31, 2019 9:35 pm

En el SQl

create PROCEDURE [dbo].[CalcSaldo](@Codigo varchar(8), @nMes int, @codusu char(2), @nResul Int Output )
As
Begin
Set Nocount On;

Set @nResul = (dbo.CalcIngAno(@Codigo, @nMes,@codusu) - dbo.CalcSalAno(@Codigo, @nMes, @codusu)) +
(dbo.CalcIngMes(@Codigo, @nMes, @codusu) - dbo.calcSalMes(@Codigo, @nMes, @codusu))


End

********************
En tu programa

Obtener_saldo(_Cod_,_Mes_,_Usu_,@Saldo)

MsgInfo('Saldo '+Str(Saldo,6),'Aviso')



Static Function Obtener_saldo(_Cod_,_Mes_,_Usu_,Saldo)
Local _oCmd_,_oPar_,_Cnx_

Connect_sql(@_Cnx_,G_sql_u,G_sql_c)

_oCmd_:=TOleAuto():New("ADODB.Command")
_oCmd_:ActiveConnection:=_Cnx_
_oCmd_:CommandType:=4
_oCmd_:CommandText:="CalcSaldo"
_oCmd_:CommandTimeout:=0

_oPar_:=_oCmd_:CreateParameter("Codigo",129,1,8,_Cod_)
_oCmd_:Parameters:Append(_oPar_)
_oPar_:=_oCmd_:CreateParameter("nMes",16,1,2,_Mes_)
_oCmd_:Parameters:Append(_oPar_)
_oPar_:=_oCmd_:CreateParameter("Codusu",129,1,2,_Usu_)
_oCmd_:Parameters:Append(_oPar_)
_oPar_:=_oCmd_:CreateParameter("nResul",3,2,6)
_oCmd_:Parameters:Append(_oPar_)

_oCmd_:Execute()
Saldo:=_oCmd_:Parameters("nResul"):Value

_Cnx_:Close()

Return(Nil)
User avatar
jacgsoft
 
Posts: 105
Joined: Fri Nov 24, 2006 9:03 pm
Location: Lima - Peru

Re: invocar funciones sql con ado

Postby armando.lagunas » Wed Jul 31, 2019 11:04 pm

yo utilizo procedimientos almacenados, mi experiencia es la siguiente:

el comando CALL se utiliza en MySql para llamar los procedimientos y los parámetros se pasan entre perentesis, yo al cambiarme a MS-Sql tuve que cambiar el comando CALL por EXECUTE y sacar los parentesis.

prueba de esta forma:

Code: Select all  Expand view  RUN
oCon1:Execute( "Execute dbo.CalcSaldo 'T25CD', '01', '00' " )


ojala funcione.

Saludos
SkyPe: armando.lagunas@hotmail.com
Mail: armando.lagunas@gmail.com
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

Re: invocar funciones sql con ado

Postby artu01 » Thu Aug 01, 2019 12:03 am

Gracias jacgsoft y armando por responder

[quote=

prueba de esta forma:

Code: Select all  Expand view  RUN
oCon1:Execute( "Execute dbo.CalcSaldo 'T25CD', '01', '00' " )


ojala funcione.

Saludos[/quote]

Armando si funciona pero como capturo lo que me devuelve el procedure?, quiero intentar de esa forma que es mas corta sino optare por la sugerencia de jacgsoft

Gracias
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima

Re: invocar funciones sql con ado

Postby artu01 » Fri Aug 02, 2019 12:25 am

Gracias por su apoyo
De esta forma trabaja
Code: Select all  Expand view  RUN

cSql1:="SELECT dbo.CalcSaldo('T25CD' ,1, '00')"
    TRY
      oRsr := TOleAuto():New( "ADODB.RecordSet" )
      WITH OBJECT oRsr
        :ActiveConnection := oCon1
        :Source             := cSql1
        :CursorLocation     := adUseClient
        :CursorType         := adOpenStatic
        :LockType           := adLockOptimistic
        :Open()
      END
    CATCH oError
      MsgStop( oError:Description )
    END
    nResult :=oRsr:Fields(0):Value
 
fwh 17.12, harbour 3.2.0, pelles C, bcc7, Ms-Sql
artu01
 
Posts: 400
Joined: Fri May 11, 2007 8:20 pm
Location: Lima


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 46 guests