• Pegar retorno funcao em postegrsql com sqlrdd

    From Wagner Parron@21:1/5 to All on Wed Apr 28 10:58:02 2021
    Boa tarde

    Uso xHarbour + SQLRdd

    Não estou conseguindo chamar uma funçao da minha base de dados em postgresql e pegar o retorno
    Alguem poderia me ajudar.

    funcao do banco -> fnc_ret_cod_est_tbl( par1, par2, par3, par4, par5 ) : retorna varchar

    chamada do programa

    ....
    cComm := "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)
    ...

    Qdo chega na linha oSql:exec o aplicativo fecha sem mostrar nenhum erro

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ariel Paredes@21:1/5 to All on Wed Apr 28 13:01:28 2021
    El miércoles, 28 de abril de 2021 a las 12:58:03 UTC-5, Wagner Parron escribió:
    Boa tarde

    Uso xHarbour + SQLRdd

    Não estou conseguindo chamar uma funçao da minha base de dados em postgresql e pegar o retorno
    Alguem poderia me ajudar.

    funcao do banco -> fnc_ret_cod_est_tbl( par1, par2, par3, par4, par5 ) : retorna varchar

    chamada do programa

    ....
    cComm := "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)
    ...

    Qdo chega na linha oSql:exec o aplicativo fecha sem mostrar nenhum erro


    Prueba de esta forma:
    Ejemplo:

    ALTER PROCEDURE [dbo].[USP_MIRROR_COMPANY_INSERT]
    (
    @COID char(3),
    @Name char(60),
    @CurrLocal char(3)
    )
    AS
    INSERT INTO
    pcmfg_Company
    (
    COID, Name, CurrLocal
    )
    VALUES
    (
    @COID, @Name, @CurrLocal
    )

    Y lo ejecutas desde tu programa:

    sr_getconnection():exec("USP_MIRROR_COMPANY_INSERT(param1,param2,param3)",,.f.)
    sr_getconnection():commit()


    Saludos!!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wagner Parron@21:1/5 to All on Wed Apr 28 13:58:13 2021
    Ola

    a procedure esta ok, faco a chamada pela pgadminIII e retorna os dados como abaixo

    OK|21000006|0|0|0|0|0|0|0|0|0|||||||||A|

    Deste jeito funcionou e não travou
    oSql := SR_GetConnection()
    oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.f. )
    oSql:commit()

    mas como faço para pegar o retorno : OK|21000006|0|0|0|0|0|0|0|0|0|||||||||A|

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ariel Paredes@21:1/5 to All on Thu Apr 29 04:45:40 2021
    El miércoles, 28 de abril de 2021 a las 15:58:15 UTC-5, Wagner Parron escribió:
    Ola

    a procedure esta ok, faco a chamada pela pgadminIII e retorna os dados como abaixo

    OK|21000006|0|0|0|0|0|0|0|0|0|||||||||A|

    Deste jeito funcionou e não travou
    oSql := SR_GetConnection()
    oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.f. )
    oSql:commit()

    mas como faço para pegar o retorno : OK|21000006|0|0|0|0|0|0|0|0|0|||||||||A|
    Hola

    Según la documentación

    Method Exec()
    Executes a SQL statement, optionally retrieving the result set

    › Syntax


    Exec( <cCommand>, [<lMsg>], [<lFetch>], [<aArray>], [<cFile>, [<cAlias>]], [<nMaxRecords>], [<lNoRecno>], [<cRecnoName>], [<cDeletedName>], [<lTranslate>] ) ==> NIL


    › Arguments

    <cCommand> SQL command to execute
    <lMsg> If .T. (default) generates a run time error if there is an error in SQL
    <lFetch> If .F. (default), the result set is not recovered. If .T., the result set is retrieved as the parameters
    <aArray> Array that will receive the result set if he informed reference, and if lFetch be with .T.
    <cFile> DBF file name that will be used to store the result set in the case lFetch is .T.. This option has priority over the parameter <aArray>, ie, if informed of the name of the file is not written in the result set array of the previous one. <cFile>
    will be created with the structure of the result set of the SQL statement and will be opened exclusively after the implementation of the Method.
    <cAlias> Alias of DBF file to be created in the option above.
    <nMaxRecords> Maximum number of rows of result set to recover
    <lNoRecno> If .F. (default) includes the Recno() column in the result set. If .T., does not add
    <cRecnoName> Recno() Column Name
    <cDeletedName> Deleted() Column Name
    <lTranslate> If .T. (default) returns the information contained in Multi Language in the current language

    cResult:= ""
    oSql := SR_GetConnection()
    ********oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.f. )
    cResult:= oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.t. ) //<---- cambiar a (.t.), <lFetch> If .F. (default), the result set is not recovered. If .T., the result set is retrieved as the parameters

    oSql:commit()


    Saludos!!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wagner Parron@21:1/5 to All on Thu Apr 29 07:34:54 2021
    Ola

    Fiz um programa de teste como mostrado abaixo, mas quando chega na linha

    cRet := oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.T.)

    O programa fecha sem mostrar nada.

    #include "pgs.ch"
    #include "sqlrdd.ch"
    #define ID_MAINICON 100
    #define GTI_FONTWIDTH 5
    #define GTI_FONTSIZE 4

    REQUEST DBFCDX
    REQUEST DBFFPT
    REQUEST SQLRDD
    REQUEST SR_PGS
    REQUEST HB_LANG_PT
    REQUEST HB_CODEPAGE_PT850

    // FONTE DO PRG
    PROCEDURE Main()

    LOCAL GetList := {}, aReturn := {}, nErr, nPos, cComm, cRet

    CLEAR SCREEN

    SET AUTOPEN ON
    SET CENTURY ON
    SET DATE FORMAT TO "DD/MM/YYYY"
    SET EPOCH TO 1980
    SET CONFIRM ON
    SET SCOREBOARD OFF
    SET WRAP ON
    SET DATE BRITISH
    SET INTENSITY ON
    SET DELETED ON
    SET CONSOLE OFF
    SET EXCLUSIVE OFF
    SET SOFTSEEK OFF
    SET UNIQUE OFF
    SET DECIMAL TO 6
    SET ERRORLOG TO wjp_error.log ADDITIVE

    HB_LANGSELECT( "PT" )
    HB_SetCodePage( "PT850" )
    SetMode( 25, 80 )

    rddsetdefault( "SQLRDD" )
    // SR_SetBaseLang( "MSG_PT" ) // 2
    nCon := SR_AddConnection( CONNECT_POSTGRES , "pgs=localhost;uid=postgres;dtb=crc_wjp_1;pwd=root" )
    IF nCon < 0
    alert( "Falha na conexao com o banco de dados !" )
    QUIT
    ENDIF
    // handle da conexao ativa
    oSql := SR_GetConnection()

    cComm := "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )"
    oSql := SR_GetConnection()
    cRet := oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.T.)
    oSql:commit()

    alert( cRet )

    RETURN

    // PROJETO XHB

    CINI =
    C_OUTPUTFOLDER =
    DEFFILE =
    INCLUDEFOLDERS =
    LAUTORUN = .T.
    LDEBUG = .F.
    LGUI = .F.
    LIBFOLDERS =
    LMT = .F.
    LNOAUTOFWH = .F.
    LPRG_CLASSICDEBUG = .T.
    LPRG_DEBUG = .T.
    LUSEDLL = .F.
    MAPFILE =
    MYC_FLAGS =
    MYDEFINES =
    MYLINK_FLAGS =
    MYPRG_FLAGS =
    MYRC_FLAGS =
    MYSLY_FLAGS =
    OUTPUTFOLDER =
    PRG_OUTPUTFOLDER =
    RC_OUTPUTFOLDER =
    RUNARGUMENTS =
    SLY_OUTPUTFOLDER =
    STARTIN =
    TARGETFOLDER =

    [teste_slq1.PRG]
    MYC_FLAGS =
    MYDEFINES =
    MYPRG_FLAGS =

    [C:\xHB\Lib\SQL.lib]

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From culikr@gmail.com@21:1/5 to All on Thu Apr 29 14:09:18 2021
    Boa Tarde
    nenhuma das funcoes exec do sqlrdd retorna o valor
    use da seguinte forma
    cComm := "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    os arquivos pgs.log e sqlerror.log tem o motivo de nao retorno da funcao


    []S
    Luiz
    Em quarta-feira, 28 de abril de 2021 às 14:58:03 UTC-3, Wagner Parron escreveu:
    Boa tarde

    Uso xHarbour + SQLRdd

    Não estou conseguindo chamar uma funçao da minha base de dados em postgresql e pegar o retorno
    Alguem poderia me ajudar.

    funcao do banco -> fnc_ret_cod_est_tbl( par1, par2, par3, par4, par5 ) : retorna varchar

    chamada do programa

    ....
    cComm := "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)
    ...

    Qdo chega na linha oSql:exec o aplicativo fecha sem mostrar nenhum erro

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ariel Paredes@21:1/5 to All on Thu Apr 29 13:52:24 2021
    El jueves, 29 de abril de 2021 a las 9:34:55 UTC-5, Wagner Parron escribió:
    Ola

    Fiz um programa de teste como mostrado abaixo, mas quando chega na linha

    cRet := oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.T.)

    O programa fecha sem mostrar nada.

    #include "pgs.ch"
    #include "sqlrdd.ch"
    #define ID_MAINICON 100
    #define GTI_FONTWIDTH 5
    #define GTI_FONTSIZE 4

    REQUEST DBFCDX
    REQUEST DBFFPT
    REQUEST SQLRDD
    REQUEST SR_PGS
    REQUEST HB_LANG_PT
    REQUEST HB_CODEPAGE_PT850

    // FONTE DO PRG
    PROCEDURE Main()

    LOCAL GetList := {}, aReturn := {}, nErr, nPos, cComm, cRet

    CLEAR SCREEN

    SET AUTOPEN ON
    SET CENTURY ON
    SET DATE FORMAT TO "DD/MM/YYYY"
    SET EPOCH TO 1980
    SET CONFIRM ON
    SET SCOREBOARD OFF
    SET WRAP ON
    SET DATE BRITISH
    SET INTENSITY ON
    SET DELETED ON
    SET CONSOLE OFF
    SET EXCLUSIVE OFF
    SET SOFTSEEK OFF
    SET UNIQUE OFF
    SET DECIMAL TO 6
    SET ERRORLOG TO wjp_error.log ADDITIVE

    HB_LANGSELECT( "PT" )
    HB_SetCodePage( "PT850" )
    SetMode( 25, 80 )

    rddsetdefault( "SQLRDD" )
    // SR_SetBaseLang( "MSG_PT" ) // 2
    nCon := SR_AddConnection( CONNECT_POSTGRES , "pgs=localhost;uid=postgres;dtb=crc_wjp_1;pwd=root" )
    IF nCon < 0
    alert( "Falha na conexao com o banco de dados !" )
    QUIT
    ENDIF
    // handle da conexao ativa
    oSql := SR_GetConnection()

    cComm := "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" oSql := SR_GetConnection()
    cRet := oSql:exec( "select fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )", ,.T.)
    oSql:commit()

    alert( cRet )

    RETURN

    // PROJETO XHB

    CINI =
    C_OUTPUTFOLDER =
    DEFFILE =
    INCLUDEFOLDERS =
    LAUTORUN = .T.
    LDEBUG = .F.
    LGUI = .F.
    LIBFOLDERS =
    LMT = .F.
    LNOAUTOFWH = .F.
    LPRG_CLASSICDEBUG = .T.
    LPRG_DEBUG = .T.
    LUSEDLL = .F.
    MAPFILE =
    MYC_FLAGS =
    MYDEFINES =
    MYLINK_FLAGS =
    MYPRG_FLAGS =
    MYRC_FLAGS =
    MYSLY_FLAGS =
    OUTPUTFOLDER =
    PRG_OUTPUTFOLDER =
    RC_OUTPUTFOLDER =
    RUNARGUMENTS =
    SLY_OUTPUTFOLDER =
    STARTIN =
    TARGETFOLDER =

    [teste_slq1.PRG]
    MYC_FLAGS =
    MYDEFINES =
    MYPRG_FLAGS =

    [C:\xHB\Lib\SQL.lib]
    Hola wagner

    1.- El (SP) funciona ok
    2.- Porque necesita tener el resultado, si lo tiene grabado en su tabla
    (usted pasa los parámetros )
    3.- Qué quiere hacer o necesita controlar ?

    Saludos!!

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Eduardo Motta@21:1/5 to All on Fri Apr 30 09:36:59 2021
    Eu uso da seguinte forma, antes do END na procedure coloco o que quero retornar -- em SQL SERVER
    CREATE OR ALTER PROCEDURE SP_Test
    BEGIN
    SET @RECST2 = 0
    SELECT @RECST2
    END

    em xHarbour:
    cSelect := "EXEC SP_Test"
    Sr_GetConnection():exec( cSelect,,.t.,@aSql )
    If Len(aSql) == 0
    // ERROR
    Else
    nReturn := aSql[1,1]
    EndIf

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Carlos Vargas@21:1/5 to All on Fri Apr 30 10:29:17 2021
    podrias probar esto?
    no aparece info en la help
    :ExecSP( cComm, aReturn, nParam )
    :ExecSPRC( cComm, lMsg, lFetch, aArray, cFile, cAlias, cVar, nMaxRecords, lNoRecno, cRecnoName, cDeletedName, lTranslate, nLogMode )

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wagner Parron@21:1/5 to All on Fri Apr 30 15:59:25 2021
    Boa noite Luiz

    Fiz exatamente como mostra o seu modelo.
    Quando chega na linha :

    oSql:exec( cComm, ,.t. ,@aRet)

    o aplicativo fecha e não mostra nenhuma mensagem de erro, tambem não gera nehnhum arquivo de log.
    Os comandos de update, select e insert funcionam normalmente.
    Estaria faltando algum arquivo no projeto.

    []s
    Wagner

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wagner Parron@21:1/5 to All on Fri Apr 30 16:09:50 2021
    Ola Arielso

    Esta function no postgresql faz o controle de todos os numeradores do sistema, quando passo os parametros corretos me retorna o proximo numero.
    Por isto preciso pegar o retorno
    []s
    Wagner

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ariel Paredes@21:1/5 to All on Fri Apr 30 21:14:47 2021
    El viernes, 30 de abril de 2021 a las 18:09:51 UTC-5, Wagner Parron escribió:
    Ola Arielso

    Esta function no postgresql faz o controle de todos os numeradores do sistema, quando passo os parametros corretos me retorna o proximo numero.
    Por isto preciso pegar o retorno
    []s
    Wagner
    Hola wagner
    prueba de esta forma

    cComm := "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    If Len(aRet) > 0
    For x = 1 to Len(aRet)
    ? aRet[x, 1]
    inkey(0)
    Next
    Else
    ? "no hay información"
    Endif

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wagner Parron@21:1/5 to All on Sat May 1 06:58:28 2021
    Em sábado, 1 de maio de 2021 às 01:14:48 UTC-3, arielso...@gmail.com escreveu:
    El viernes, 30 de abril de 2021 a las 18:09:51 UTC-5, Wagner Parron escribió:
    Ola Arielso

    Esta function no postgresql faz o controle de todos os numeradores do sistema, quando passo os parametros corretos me retorna o proximo numero.
    Por isto preciso pegar o retorno
    []s
    Wagner
    Hola wagner
    prueba de esta forma

    cComm := "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    If Len(aRet) > 0
    For x = 1 to Len(aRet)
    ? aRet[x, 1]
    inkey(0)
    Next
    Else
    ? "no hay información"
    Endif

    Ola arielso

    Fiz como mostrada acima, mas fecha o programa na linha
    oSql:exec( cComm, ,.t. ,@aRet)
    Não sei qual e o motivo, os comandos de select,update e delete funcionam normais,
    mas quando chamo o select com a function "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" da o problema.
    estou usando o xhb de 09/05/2017 sera que tem algum bug no pacote deste periodo []s
    Wagner

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Ariel Paredes@21:1/5 to All on Sat May 1 08:17:35 2021
    El sábado, 1 de mayo de 2021 a las 8:58:29 UTC-5, Wagner Parron escribió:
    Em sábado, 1 de maio de 2021 às 01:14:48 UTC-3, arielso...@gmail.com escreveu:
    El viernes, 30 de abril de 2021 a las 18:09:51 UTC-5, Wagner Parron escribió:
    Ola Arielso

    Esta function no postgresql faz o controle de todos os numeradores do sistema, quando passo os parametros corretos me retorna o proximo numero.
    Por isto preciso pegar o retorno
    []s
    Wagner
    Hola wagner
    prueba de esta forma

    cComm := "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    If Len(aRet) > 0
    For x = 1 to Len(aRet)
    ? aRet[x, 1]
    inkey(0)
    Next
    Else
    ? "no hay información"
    Endif
    Ola arielso

    Fiz como mostrada acima, mas fecha o programa na linha
    oSql:exec( cComm, ,.t. ,@aRet)
    Não sei qual e o motivo, os comandos de select,update e delete funcionam normais,
    mas quando chamo o select com a function "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" da o problema.
    estou usando o xhb de 09/05/2017 sera que tem algum bug no pacote deste periodo
    []s
    Wagner
    Hola, Wagner

    El master, Luiz?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From culikr@gmail.com@21:1/5 to All on Sun May 2 07:05:45 2021
    Buenas

    use o seguinte
    cComm := "select cast( fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' ) as varchar(30))"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    If Len(aRet) > 0
    For x = 1 to Len(aRet)
    ? aRet[x, 1]
    inkey(0)
    Next

    por ser varchar e vc não especificou o tamanho do campo ele se perde ao decodificar o retorno

    []s
    Luiz

    Em sábado, 1 de maio de 2021 às 10:58:29 UTC-3, Wagner Parron escreveu:
    Em sábado, 1 de maio de 2021 às 01:14:48 UTC-3, arielso...@gmail.com escreveu:
    El viernes, 30 de abril de 2021 a las 18:09:51 UTC-5, Wagner Parron escribió:
    Ola Arielso

    Esta function no postgresql faz o controle de todos os numeradores do sistema, quando passo os parametros corretos me retorna o proximo numero.
    Por isto preciso pegar o retorno
    []s
    Wagner
    Hola wagner
    prueba de esta forma

    cComm := "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    If Len(aRet) > 0
    For x = 1 to Len(aRet)
    ? aRet[x, 1]
    inkey(0)
    Next
    Else
    ? "no hay información"
    Endif
    Ola arielso

    Fiz como mostrada acima, mas fecha o programa na linha
    oSql:exec( cComm, ,.t. ,@aRet)
    Não sei qual e o motivo, os comandos de select,update e delete funcionam normais,
    mas quando chamo o select com a function "select * FROM fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' )" da o problema.
    estou usando o xhb de 09/05/2017 sera que tem algum bug no pacote deste periodo
    []s
    Wagner

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Wagner Parron@21:1/5 to All on Mon May 3 05:08:43 2021
    Em domingo, 2 de maio de 2021 às 11:05:46 UTC-3, culikr@gmail.com escreveu:
    Buenas

    use o seguinte
    cComm := "select cast( fnc_ret_cod_est_tbl( '00', 'orccab', '0', 'num_orc', 'F' ) as varchar(30))"
    aRet :={}
    oSql := SR_GetConnection()
    oSql:exec( cComm, ,.t. ,@aRet)

    If Len(aRet) > 0
    For x = 1 to Len(aRet)
    ? aRet[x, 1]
    inkey(0)
    Next
    por ser varchar e vc não especificou o tamanho do campo ele se perde ao decodificar o retorno

    []s
    Luiz

    Bom dia Luiz

    Resolvido como no exemplo acima.
    Agradeço a todos que me ajudaram.

    []s
    Wagner

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)