FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Funci贸n "ReturnCall" de Dolphin
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Funci贸n "ReturnCall" de Dolphin
Posted: Tue Jun 13, 2023 09:24 PM

Hola,

estoy utilizando la funci贸n ReturnCall para un STORE PROCEDURE que tengo en mi BD Mysql.

En este STORE PROCEDURE, tengo un WHERE con un IN, o sea, por ejemplo tengo:

SELECT codigo,nombre FROM clientes WHERE codigo IN (cod1,cod2,cod3...)

Cuando llamo a mi funci贸n:

oServer:ReturnCall("busca_clientes",parametrowhere)

este "parametrowhere", como lo debo mandar? Hice varias pruebas con diferentes formatos y no

tengo una respuesta v谩lida para mi select.

El ejemplo es burdo pero es para que se entienda bien.

Quien pueda ayudarme, se lo agradecer茅! Hace todo el d铆a que estoy parado con esto y no lo

puedo hacer funcionar...

Muchas muchas gracias!

Roberto

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Funci贸n "ReturnCall" de Dolphin
Posted: Wed Jun 14, 2023 06:21 PM
Code (fw): Select all Collapse
METHOD ReturnCall( ... ) CLASS TDolphinSrv
聽 聽LOCAL n
聽 聽LOCAL oQry
聽 聽LOCAL aParams 聽:= HB_AParams()
聽 聽LOCAL cExecute := "CALL "

#ifndef NOINTERNAL
聽 聽IF Len( aParams ) < 1 .or. ValType( aParams[ 1 ] ) <> "C"
聽 聽 聽 ::nInternalError := ERR_INVALID_PARAMETER_CALL
聽 聽 聽 ::CheckError()
聽 聽ENDIF

聽 聽IF ::lError
聽 聽 聽 聽RETURN ::lError
聽 聽ENDIF
#endif

聽 聽cExecute += aParams[ 1 ] + "( "

聽 聽FOR n := 2 TO Len( aParams )
聽 聽 聽 cExecute += ClipValue2Sql( aParams[ n ] ) + ","
聽 聽NEXT

聽 聽cExecute := Left( cExecute, Len( cExecute ) - 1 ) + ")"
聽 聽oQry 聽 聽 := ::Query( cExecute )

聽 聽::NextResult()

RETURN oQry
ReturnCall (cProcName,aParameters)
oServer:ReturnCall("busca_clientes",{ cCodClie })
En tu caso es una lista, muestranos un ejemplo y el storeproceure para ver como acomodamos ese parametro por favor.
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Wed Jun 14, 2023 06:33 PM
a como comentas, bastar铆a con hacerlo de esta forma
Code (fw): Select all Collapse
oServer:ReturnCall("busca_clientes","cod1,cod2,cod" )
asumiendo que
SELECT codigo,nombre FROM clientes WHERE codigo IN (cod1,cod2,cod3...)
lo que cambia aca es la lista der busqueda, si tu lo tienes de forma de array, deberas cambiarlo por:
Code (fw): Select all Collapse
oServer:ReturnCall("busca_clientes", ArrayToList( { "010", "020", "030" } ) )
...
function ArrayToList( aItems )
聽local cList := ""
聽local nLen := len( aItems )
聽if hb_isArray( aItems)
聽 for x:=1 to nLen
聽 聽cList += aItems[x] + iif( x < nLen, ",", "" )
聽 next
聽endif
return cList
algo asi. :-)
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Wed Jun 14, 2023 08:14 PM

Genial Carlos!!!!!

C贸mo deber铆a definir mi campo IN en la Procedure? Como Varchar() ??

Muchas gracias!!!

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 114
Joined: Fri Nov 24, 2006 09:03 PM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Wed Jun 14, 2023 10:03 PM

Deber铆as poner aqui tu Procedimiento Almacenado, para entenderlo.

Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Wed Jun 14, 2023 10:34 PM

As铆 creer铆a yo, tipo varchar, pero mejor mu茅stranos el procedure para revisar.

Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 1789
Joined: Tue Oct 11, 2005 05:01 PM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Thu Jun 15, 2023 12:32 AM
debes tener en cuenta esto:
? ArrayToList( { "010", "020", "030" }
no regresara -> "010, 020, 030" lo cual no pudiera servirte, si los item de la lista son caracter, debes trabajar un poco con la funcion ArrayToList
para que te retorne -> "'010','020','030'" que es lo mas segures que necesites. por ejemplo, ser铆a adecuado agregar un par谩metro lQuote que cuando sea verdadero te agregue las comillas por cada 铆tem
Salu2

Carlos Vargas

Desde Managua, Nicaragua (CA)
Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Thu Jun 15, 2023 11:03 AM

Carlos, esta es mi Procedure:

SELECT c.cantidad,c.no_sirve,c.identificacion AS identifi,c.id_comprobante,c.fecha_movimiento,c.id,c.id_articulo,c1.tipo AS t1,0 AS t2,c3.tipo AS t3,0 AS t4,c.comprobante,c.id_unidad_medida FROM comprobantes_cuerpo AS c

LEFT JOIN comprobantes_compras AS c1 ON c.identificacion='C' and c1.id=c.id_comprobante

LEFT JOIN comprobantes_ventas AS c3 ON c.identificacion='V' and c3.id=c.id_comprobante

WHERE c.id_empresa=BDempresa and FIND_IN_SET(c.id_articulo,BDArticulo)

ORDER BY c.fecha_movimiento,c.id

Donde, mis variables son:

IN BDempresa int,IN BDarticulo varchar(200)

Ahora estoy usando el FIND_IN_SET() que funciona, pero me gustar铆a volver al "WHERE IN"

Gracias!

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar
Posts: 114
Joined: Fri Nov 24, 2006 09:03 PM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin
Posted: Thu Jun 15, 2023 08:40 PM

Con el WHERE IN, no es posible, debido a que la lista de codigos es variable. En SQL SERVER si he podido hacerlo, con sentencia SQL din谩micas.

Otra opci贸n ser铆a NO usar Store Procedure, sino, una sentencia select.

** C贸digos Alfanum茅ricos

cCadena:="'001','002','003','004'"

Text In Sql

SELECT c.cantidad,c.no_sirve,c.identificacion AS identifi,c.id_comprobante,c.fecha_movimiento,c.id,c.id_articulo,c1.tipo AS t1,0 AS t2,c3.tipo AS t3,0 AS t4,c.comprobante,c.id_unidad_medida

FROM comprobantes_cuerpo AS c

LEFT JOIN comprobantes_compras AS c1 ON c.identificacion='C' and c1.id=c.id_comprobante

LEFT JOIN comprobantes_ventas AS c3 ON c.identificacion='V' and c3.id=c.id_comprobante

WHERE c.id_empresa=BDempresa and c.codigo in (cCadena)

ORDER BY c.fecha_movimiento,c.id

EndText

Sql:=StrTran(Sql,'cCadena',cCadena)


** C贸digos num茅ricos

nCadena:="001,002,003,004"

Text In Sql

SELECT c.cantidad,c.no_sirve,c.identificacion AS identifi,c.id_comprobante,c.fecha_movimiento,c.id,c.id_articulo,c1.tipo AS t1,0 AS t2,c3.tipo AS t3,0 AS t4,c.comprobante,c.id_unidad_medida

FROM comprobantes_cuerpo AS c

LEFT JOIN comprobantes_compras AS c1 ON c.identificacion='C' and c1.id=c.id_comprobante

LEFT JOIN comprobantes_ventas AS c3 ON c.identificacion='V' and c3.id=c.id_comprobante

WHERE c.id_empresa=BDempresa and c.codigo in (nCadena)

ORDER BY c.fecha_movimiento,c.id

EndText

Sql:=StrTran(Sql,'nCadena',nCadena)


Posts: 470
Joined: Fri Feb 05, 2010 11:30 AM
Re: Funci贸n &quot;ReturnCall&quot; de Dolphin (solucionado)
Posted: Wed Jun 21, 2023 11:53 AM

Muchas gracias "jacgsoft"...

Solucionado!!

Univ@c I.S.I.
Desarrolladores de Software
http://www.elcolegioencasa.ar

Continue the discussion