FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Ejecutar Stored procedure de SQl server
Posts: 131
Joined: Tue Dec 26, 2006 04:50 PM
Ejecutar Stored procedure de SQl server
Posted: Mon Aug 13, 2018 10:22 PM
Buenas tardes compañeros, después de dar vueltas en el foro sin encontrar la respuesta les pido su ayuda, necesito ejecutar un stored procedure desde SQL, generé y ejecuté el stored procedure exitosamente desde el SQL, pero no le doy al clavo de como ejecutarlo desde Fivewin (al stored procedure le paso somo para metro dos fechas y debe darme como resutado un recordset).

Les explico, normalmente siempre hago mis consultas directamente en SQL, una vez que he comprobado que el query me da los resultados que necesito lo inserto a mi programa en Fivewin, así lo hice en este caso y tras comprobar que mis datos eran correctos lo agregué a mi "PRG", lo curioso del caso es que cuando presenté el desarrollo a mis usuarios me daba error al generar el recordset, por alguna causa que no he podido determinar si ejecuto el query desde fivewin me marca error, pero si lo ejecuto primero desde SQL (SQL Server Managment Studio) ahi si funciona correctamente y a partir de esa ejecución ya empieza a funcionar dentro de la aplicación también (Si, lo sé, suena a mentira, pero por alguna causa así pasa).

Para ejecutar el SP desde SQL uso este código:
Code (fw): Select all Collapse
USE [MiBase] 
GO
DECLARE @return_value int EXEC  @return_value = [dbo].[Mi_StoredProdcedure] @FECHAI = '01/01/2018',   @FECHAF = '13/08/2018' 
GO


Que sintaxis debería usar para que funcionara también desde Fivewin?

Así ejecuto normalmente mis consultas desde Fivewin:

Code (fw): Select all Collapse
cSql1:="select campo1,campoi2,campo3 from tabla where campo1='Valor' order by campo2"

oRs1 := TOleAuto():New( "ADODB.Recordset" )
oRs1:CursorType := 1 // opendkeyset
    
oRs1:CursorLocation := 3 // local cache
oRs1:LockType := 3 // lockoportunistic

TRY
    oRS1:Open( cSql1,'Provider='+xPROVIDER+';Data Source='+xSOURCE+';Initial Catalog='+xCATALOG+';User Id='+xUSERID+';Password='+xPASSWORD ) 

CATCH oErr 
  MsgInfo( "Error al generar el recordset" )
  RETURN(.F.) 
END TRY 

oRs1nr:=oRs1:RecordCount()
 
oRs1:MoveFirst()



Uso Fivewin 16.04
Harbour
BCC7
Posts: 346
Joined: Mon Oct 05, 2009 03:35 PM
Re: Ejecutar Stored procedure de SQl server
Posted: Mon Aug 13, 2018 11:18 PM
hola:

yo ocupo Odbc para realizar lo que solicitas, no uso ADO, pero si necesitas un ejemplo de como yo lo utilizo, te doy unos tips.

pero se me ocurre que tiene que ser algo asi:

Code (fw): Select all Collapse
oRs1:Execute("EXECUTE Nombre_de_la_stored_procedure, '01/01/2018', '13/08/2018' ")


el comando "Execute" es el que te llama la stored procedure y depende de como la construyas es el resultado obtenido.
el comando "Call es su respectiva equivalencia en MySql.

espero de que te pueda ayudar un poco.

Saludos.
SkyPe: armando.lagunas@hotmail.com

Mail: armando.lagunas@gmail.com
Posts: 131
Joined: Tue Dec 26, 2006 04:50 PM
Re: Ejecutar Stored procedure de SQl server
Posted: Tue Aug 14, 2018 03:14 PM

Armando, muchas gracias por tu respuesta, si me puedes mandar un ejemplo de como lo haces con ODBC te lo agradecería mucho.

Posts: 131
Joined: Tue Dec 26, 2006 04:50 PM
Re: Ejecutar Stored procedure de SQl server (RESUELTO)
Posted: Wed Aug 15, 2018 01:36 PM
Buenos días, yendo contra todo lo que he leido en el foro y despues de no haber obtenido una respuesta clara me puse a intentar diferentes opciones y a pesar de que en varias fuentes leí que los stored procedures no se "llaman" con el comando "Select" de SQL, intente este opción y si funciona:

Code (fw): Select all Collapse
fPer:=date()
cFeini:="01/01/"+alltrim(str(year(fPer)))
cFefin:=dtoc(fPer)

cCadsql1:="EXEC [dbo].[MyStoredProcedure] @FECHAI = '&cFeini',  @FECHAF = '&cFefin' "
    
    oRs1 := TOleAuto():New( "ADODB.Recordset" )
    oRs1:CursorType := 1 // opendkeyset
    oRs1:CursorLocation := 3 // local cache
    oRs1:LockType := 3 // lockoportunistic

    TRY
        cursorwait()
        oRs1:Open( cCadSql1,'Provider='+xPROVIDER+';Data Source='+xSOURCE+';Initial Catalog='+xCATALOG+';User Id='+xUSERID+';Password='+xPASSWORD )

        CATCH oErr
            MsgInfo( "Error al generar el recordset de ventas por vendedor" )
        RETURN(.F.)
   END TRY


Espero que el tip les sea util a alguno de ustedes.

Continue the discussion