Clipper/FiveWin - ¿Como usar stored procedures con FWH 8.10?

   
Vista:

¿Como usar stored procedures con FWH 8.10?

Publicado por Luis (25 intervenciones) el 27/04/2009 02:45:34
Saludos a Todos

Llevo varios dias intentando entrar en el mundo de SQl 2000 con FWH8.10(me alegra tenerlo) y xharbour y mi intencion es cargar el resultado obtenido desde un stored procedure en un recordset, he navegado tratando de encontrar la forma de hacerlo y aun no logro lo que deseo. la parte en concreto es la siguiente:
// ---- Conexion al SQL -------
oConnection := TOleAuto():New( "ADODB.Connection" )

TRY
oConnection:Open("Provider=SQLOLEDB.1;Password=;Persist Security Info=False;User ID=Martin;Initial Catalog=APPLOCAL;Data Source=PERLIM_SYS_LCH")
CATCH oErr
MsgAlert( "Error de CONEXION con la Base de Datos..." )
FreeLibrary(hRec)
RETURN nil
END TRY
oRs := TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType := adOpenDynamic
oRs:CursorLocation := adUseClient
oRs:LockType := adLockOptimistic
oCmd:= TOleAuto():New( "ADODB.Command" )
oCmd:CommandType := adCmdStoredProc
oCmd:CommandText:= "sp_Menu"
oCmd:Activeconnection:=oConnection
oRs:Open(oCmd:Execute())
MsgAlert(oRs:RecordCount())

y el resultado que me muestra la ultima linea es (-1) con lo cual concluyo que el store no se ejecuta, el store sp_Menu es algo simple y es como sigue:
CREATE PROCEDURE sp_Menu
AS
SELECT * FROM MLC00 ORDER BY CNIV, COPC
GO

Agradecere me puedan apoyar indicando que estoy haciendo mal, y como debo trabajar Stored procedures y Recordset

Saludos

Luis
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:¿Como usar stored procedures con FWH 8.10?

Publicado por Gabriel Pascual (914 intervenciones) el 28/04/2009 03:11:33
Mal mal mal,

Vamos por partes a ver si nos aclaramos:

1) Tienes que crear primero la conexion, esta parte está bien:

oConnection := TOleAuto():New( "ADODB.Connection" )

TRY
oConnection:Open("Provider=SQLOLEDB.1;Password=;Persist Security Info=False;User ID=Martin;Initial Catalog=APPLOCAL;Data Source=PERLIM_SYS_LCH")

CATCH oErr
MsgAlert( "Error de CONEXION con la Base de Datos..." )
FreeLibrary(hRec) //<--- ????? esto saldría sobrando.
RETURN nil
END TRY

Asumo que tienes la cadena de conexión correcta.

2) Aqui viene lo interesante: NO USES UN OBJETO COMMAND. El COMMAND SIEMPRE devuelve un cursor estático por eso no tienes acceso a los datos obtenidos

Puedes ejecutar la llamada al Stored procedure directamente desde el recordset, sin intervención de Command de por medio.

En esta parte te falta "conectar" el RecordSet con el objeto conexion previamente creado:

oRs := TOleAuto():New( "ADODB.Recordset" )
oRs:CursorType := adOpenDynamic
oRs:CursorLocation := adUseClient
oRs:LockType := adLockOptimistic

/* esto te falta */

oRs:ActiveConnection(oConnection)

Y ahora estamos listos para ejecutar cualquier Query de SQL incluyendo una llamada a un stored procedure:

oRs:Source := "EXEC @Stored procedure"

/* y ejecutamos*/

oRS:Open()

El resultado ya es visible con los métodos del recordset.

No estoy muy empapado en llamadas a Stored procedure con SQL Server 2000, pero esto seguro que la instruccion es EXEC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:¿Como usar stored procedures con FWH 8.10?

Publicado por Luis (25 intervenciones) el 29/04/2009 19:19:30
Hola Gabriel

!Mil gracias por tu respuesta!, tu explicacion e indicaciones han funcionado a la perfección.

Gracias nuevamente.

Luis.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar