Page 1 of 1

Procedimientos Almacenados (Store Procedure) Error

PostPosted: Thu Feb 03, 2022 1:28 pm
by Willi Quintana
Estimados colegas_
Éste prpocedimiento lo declaro en el servidor de ésta manera, en un servidor local o en una red local funciona perfectamte, pero cuando utilido un servidor rn la "nube" (MySQL de CPanel), me manda un error:
no exiete el procedimiento: lo llamo asi desde MariaDb:

oProd := oCn:Call( "proc001" ) // lista de productos
en redl local funciona perfectamte,,, en un server remoto no funciona,,,,
Alguna sugerencia??
GRAcias

Code: Select all  Expand view

//----------------------------------------------------------------------------------------------------------------------------
Function CargaStoreProc(oCn)
local cProc, oDatos

cProc  := "SELECT specific_name FROM information_schema.routines WHERE specific_name = 'proc001'"
oDatos := oCn:Query(cProc)

If oDatos:RecCount() = 0                 // no existe el procedure  y lo creamos

  cProc := "CREATE PROCEDURE proc001() "
  cProc += "SELECT productos.cod_producto, productos.producto, productos.precio_venta1, productos.unidad, productos.saldo, productos.cod_proveedor, productos.cod_marca, productos.cod_grupo, productos.codbar1, productos.codbar2, productos.observaciones, proveedor.razon_social, marca.detalle AS marca, grupo.detalle AS grupo "
  cProc += "FROM productos "
  cProc += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
  cProc += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
  cProc += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
  cProc += "ORDER BY productos.producto"

  oCn:Execute(cProc)
  if oCn:nError != 0    //     //     //
    Return(.f.)
  EndIf

Endif

Return(.t.)
 

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Thu Feb 03, 2022 2:48 pm
by Willi Quintana
Mr. Rao:
Al llamar a un procedimiento almacenado, esta sentencia no funciona en un servdor remoto
oProd := oCn:Call( "proc001" ) // lista de productos

Esta si funciona, pero me devuelve en un array, no en un cursor de datos....
oProd := oCn:Execute( "CALL proc001" ) // return array

Alguna sugerencia?

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Fri Feb 11, 2022 2:22 pm
by armando.lagunas
buenas colega:

como te conectas al servidor de la nube?
ODBC u otro tipo de conexión?

muestra un trozo de código en donde te conectas, así poder ayudarte

Saludos!

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Sat Feb 12, 2022 3:54 am
by Willi Quintana
Hola amigos...
Hago la conexion igual que en nua red local

oCn := Maria_Connect({ "201.264.555.454", "", "usuario", "contraseña" } )

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Sat Feb 12, 2022 1:36 pm
by carlos vargas
Verifica permisos de ejecucion, y que el procedure pertenesca al usuario que esta logeado al server

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Sun Feb 13, 2022 8:51 am
by nageswaragunupudi
When calling a stored procedure, this statement doesn't work on a remote
server oProd := oCn:Call( "proc001" ) // product list

I can not respond unless I test myself. Please give me time.

This one works, but it returns an array, not a cursor data....
oProd := oCn:Execute( "CALL proc001" ) // return array


For now, glad this works. This is a multi-dim array of the same data. Check xbrowse oProd and make sure.
Immediately after that, run
Code: Select all  Expand view

aStruct := oCn:Execute()
 

again without any parameters.
Very likely you will get aStructure as an array
Check "xbrowser aStruct" to make sure.

oData := TArrayData():New( oProd, aStruct )

Note: This is a workaround for the time being.
But ideally we should make the oCn:Call( "proc001" ) work.

I am assuming your FWH version is not too old. May I know your version?

Regret delayed response. I was unable to devote much time till recently.
I am back now.

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Sun Feb 13, 2022 8:53 am
by nageswaragunupudi
carlos vargas wrote:Verifica permisos de ejecucion, y que el procedure pertenesca al usuario que esta logeado al server


I too thought it might have to do with execution permissions, but oCn:Execute( "CALL proc" ) is working. If the problem is with permissions, I think this also should not work

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Mon Feb 14, 2022 2:01 am
by Willi Quintana
Mr. Rao hello.... Ragards
Code: Select all  Expand view


//local mode.   local lan    

CargaStoreProc(oCn)

? oCn:cServerInfo                      5.5.5-10.5.6-MariaDB
? oCn:OS                               Win64
? oCn:IsProcedure( "proc001" )         .t.

xbrowser oCn:ListProcedures()          LIst View with "proc001" in register        

oProd := oCn:Call( "proc001" )        
? VALTYPE(oProd)                       O
? oProd:producto                       ACEITE VEGETAL

oProd := oCn:CallSP( "proc001" )
? VALTYPE(oProd)                       O
? oProd:producto                       ACEITE VEGETAL

aProd := oCn:Execute( "CALL proc001" )
? VALTYPE(oProd)                       O
? oProd:producto                       ACEITE VEGETAL

aProd := oCn:Execute( "CALL proc001()" )
? VALTYPE(oProd)                       O            
? oProd:producto                       ACEITE VEGETAL    

all OK

//remote mode.   in cloud    // cpanel

CargaStoreProc(oCn)

? oCn:cServerInfo                      5.6.41-84.1
? oCn:OS                               Linux
? oCn:IsProcedure( "proc001" )         .f.

xbrowser oCn:ListProcedures()          empty        

oProd := oCn:Call( "proc001" )        
? VALTYPE(oProd)                       U
? oProd:producto                       error


//----------------------------------------------------------------------------------------------------------------------------
Function CargaStoreProc(oCn)           // inversiones2bhs is user database
local cProc, oDatos

cProc  := "SELECT specific_name FROM information_schema.routines WHERE specific_name = 'proc001'"
oDatos := oCn:Query(cProc)

? oDatos:RecCount()

If oDatos:RecCount() = 0                 // no existe el procedure  y lo creamos          inversiones2bhs   is user database

  cProc := "CREATE PROCEDURE inversiones2bhs.proc001() "
  cProc += "SELECT productos.cod_producto, productos.producto, productos.precio_venta1, productos.unidad, productos.saldo, productos.cod_proveedor, productos.cod_marca, productos.cod_grupo, productos.codbar1,
                            productos.codbar2, productos.observaciones, proveedor.razon_social, marca.detalle AS marca, grupo.detalle AS grupo "

  cProc += "FROM productos "
  cProc += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
  cProc += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
  cProc += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
  cProc += "ORDER BY productos.producto"

  oCn:Execute(cProc)
  if oCn:nError != 0    //     //     //
    Return(.f.)
  EndIf

Endif

Return(.t.)
 

Re: Procedimientos Almacenados (Store Procedure) Error

PostPosted: Mon Feb 14, 2022 11:13 am
by cmsoft
Hola Willi.
Si en lugar de generar un store procedure, creas una vista?
Code: Select all  Expand view

CargaStoreProc(oCn)
oQry := oCn:Query("SELECT * FROM proc001")
xbrwose(oQry)

Function CargaStoreProc(oCn)           // inversiones2bhs is user database
local cProc, oDatos

cProc  := "SELECT table_name FROM information_schema.views WHERE table_name = 'proc001' AND table_schema = 'inversiones2bhs'"
oDatos := oCn:Query(cProc)

? oDatos:RecCount()

If oDatos:RecCount() = 0                 // no existe el procedure  y lo creamos          inversiones2bhs   is user database
 cProc := "CREATE VIEW inversiones2bhs.proc001 AS  "
  cProc += "(SELECT productos.cod_producto AS cod_producto, productos.producto as producto, productos.precio_venta1 as precio_venta1, productos.unidad as unidad, productos.saldo as saldo, productos.cod_proveedor as cod_proveedor, productos.cod_marca as cod_marca, productos.cod_grupo as cod_grupo, productos.codbar1 as codbar1, productos.codbar2 as codbar2, productos.observaciones as observaciones, proveedor.razon_social as razon_social, marca.detalle AS marca, grupo.detalle AS grupo "
  cProc += "FROM productos "
  cProc += "LEFT JOIN proveedor ON productos.cod_proveedor = proveedor.ruc_dni "
  cProc += "LEFT JOIN marca ON productos.cod_marca = marca.codigo "
  cProc += "LEFT JOIN grupo ON productos.cod_grupo = grupo.codigo "
  cProc += "ORDER BY productos.producto)"
  oCn:Execute(cProc)
  if oCn:nError != 0    //     //     //
    Return(.f.)
  EndIf

Endif

Return(.t.)
 

De esta manera, tambien podrías aplicar filtros despues a los datos que necesitas sacar
Code: Select all  Expand view

oQry := oCn:Query("SELECT * FROM proc001 WHERE saldo > 0")
 


Igualmente creo que el Execute debería devolver el resultado de los registros cuando el store es una consulta a la base, pero en este caso creo que te puede ser de igual utilidad.