Pular para o conteúdo principal

Postagem em destaque

BlackTDN :: LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring

_Créditos das imagens: ChatGPT_ ### LeetCode :: Comparando Implementações Harbour e TLPP para o Desafio Longest Palindromic Substring Resolver o problema do [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/description/) é um exercício clássico de programação, que desafia desenvolvedores a encontrar a maior substring palindrômica dentro de uma string. Recentemente, exploramos soluções tanto em Harbour quanto em TLPP (Total Language Protheus Programming). Neste artigo, comparamos as implementações nessas duas linguagens, destacando suas semelhanças, diferenças e funcionalidades específicas. #### Implementações em Harbour ##### Versão 5.1 Essa solução utiliza a técnica de expansão a partir do centro do palíndromo. Cada caractere ou par de caracteres consecutivos é considerado um possível "centro". O algoritmo expande em ambas as direções enquanto os caracteres forem iguais, retornando o maior palíndromo encontrado. ##### Versão 5....

BlackTDN :: Função não documentada TCCommit

TCCommit é uma função não documentada no TDN (não para nós, meros mortais). Ela é uma função de uso Exclusivo com o dbAcces (TOPCONN) e possui as seguintes características.

Função:TCCommit( nOpc , uParam  )

nOPC : Obrigatório Tipo Numérico, define as opções para TCCommit
uParam : Opcional Tipo Indefinido.

nOPC

1 Begin Transaction
2 Commit
3 RollBack
4 End Transaction
5 uParam==.T. (prepara a Criação de Tabela no AS/400)
uparam==.F.(finaliza a Criação de Tabela no AS/400)

Um exemplo de uso para a TCCommit é o programa U_R3V2Sal.prg (usado pelo meu “Brother” Rodrigo “OverFail” para retornar o salário do funcionário a partir do SR3 e de acordo com a Data de Referência. Rodrigo teve que recalcular a Folha de Pagamento de uma Empresa do ano de 2011) .

#INCLUDE "PROTHEUS.CH"
#INCLUDE "TRYEXCEPTION.CH"
/*
    Funcao:     R3V2Sal
    Autor:      Marinaldo de Jesus
    Data:       02/03/2012
    Descricao:  Atualizar Salario do SRA de acordo com o R3_VALOR e Data de Referencia
*/
User Function R3V2Sal( cFil , cMat , cSData )

    Local aArea          := GetArea()
    Local aSRAArea       := SRA->( GetArea() )

    Local cCRLF          := CRLF
    Local cQuery         := ""
    Local cMsgOut        := ""
    Local cKeySeek       := ""

    Local cSRASqlName    := RetSqlName("SRA")
    Local cSR3SqlName    := RetSqlName("SR3")
    Local cTCSqlError

    Local nSalario       := 0
    Local nRecno         := 0
    Local nSRAOrder      := RetOrder( "SRA" , "RA_FILIAL+RA_MAT" )

    DEFAULT cFil         := SRA->RA_FILIAL
    DEFAULT cMat         := SRA->RA_MAT
    DEFAULT cSData       := Dtos( dDataBase )

    cKeySeek             += ( cFil + cMat )

    cQuery    += "UPDATE" + cCRLF
    cQuery    += "    " + cSRASqlName + cCRLF
    cQuery    += "SET" + cCRLF
    cQuery    += "    " + cSRASqlName+".RA_SALARIO = " + cSR3SqlName+".R3_VALOR" + cCRLF
    cQuery    += "FROM" + cCRLF
    cQuery    += "    (" + cCRLF
    cQuery    += "        SELECT" + cCRLF
    cQuery    += "            SRA.RA_FILIAL," + cCRLF
    cQuery    += "            SRA.RA_MAT," + cCRLF
    cQuery    += "            MAX(SR3.R3_DATA) R3_DATA" + cCRLF
    cQuery    += "        FROM" + cCRLF
    cQuery    += "            " + cSRASqlName + " AS SRA," + cCRLF
    cQuery    += "            " + cSR3SqlName + " AS SR3" + cCRLF
    cQuery    += "        WHERE" + cCRLF
    cQuery    += "            SRA.D_E_L_E_T_ = ' '" + cCRLF
    cQuery    += "        AND" + cCRLF
    cQuery    += "            SR3.D_E_L_E_T_ = ' '" + cCRLF
    cQuery    += "        AND" + cCRLF
    cQuery    += "            SRA.RA_FILIAL = SR3.R3_FILIAL" + cCRLF
    cQuery    += "        AND" + cCRLF
    cQuery    += "            SRA.RA_MAT = SR3.R3_MAT" + cCRLF
    cQuery    += "        AND" + cCRLF
    cQuery    += "            SR3.R3_DATA <= '" + cSData + "'" + cCRLF
    cQuery    += "        GROUP BY" + cCRLF
    cQuery    += "            SRA.RA_FILIAL," + cCRLF
    cQuery    += "            SRA.RA_MAT" + cCRLF
    cQuery    += "    ) AS SAL," + cCRLF
    cQuery    += "    " + cSR3SqlName+ " AS " +cSR3SqlName + cCRLF
    cQuery    += "WHERE" + cCRLF
    cQuery    += "    " +cSRASqlName+".RA_FILIAL = '" + cFil + "'" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " +cSRASqlName+".RA_MAT = '" + cMat + "'"  + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    SAL.RA_FILIAL = "+cSRASqlName+".RA_FILIAL" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    SAL.RA_MAT    = "+cSRASqlName+".RA_MAT" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " + cSRASqlName+".D_E_L_E_T_ = ' '" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " + cSR3SqlName+".D_E_L_E_T_ = ' '" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " + cSRASqlName+".RA_FILIAL = " + cSR3SqlName+".R3_FILIAL" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " + cSRASqlName+".RA_MAT = " + cSR3SqlName+".R3_MAT" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " + cSR3SqlName+".R3_DATA = SAL.R3_DATA" + cCRLF
    cQuery    += "AND" + cCRLF
    cQuery    += "    " + cSR3SqlName+".R3_VALOR > 0" + cCRLF

    TRYEXCEPTION

        TcCommit(1,ProcName())    //Begin Transaction

        IF ( TcSqlExec( cQuery ) < 0 )
            cTCSqlError := TCSQLError()
            ConOut( cMsgOut += ( "[ProcName: " + ProcName() + "]" ) )
            cMsgOut += cCRLF
            ConOut( cMsgOut += ( "[ProcLine:" + Str(ProcLine()) + "]" ) )
            cMsgOut += cCRLF
            ConOut( cMsgOut += ( "[TcSqlError:" + cTCSqlError + "]" ) )
            cMsgOut += cCRLF
            UserException( cMsgOut )
        EndIF

        TcCommit(2,ProcName())    //Commit
        TcCommit(4)                //End Transaction
        SRA->( dbSetOrder( nSRAOrder ) )
        nRecno := SRA->( Recno() )
        SRA->( dbGoTop() )        //Forco o Refresh no TOP
        SRA->( dbGoTo( nRecno ) )
        IF SRA->( MsSeek( cKeySeek , .F. ) )
            nSalario := SRA->RA_SALARIO
        Else
            SRA->( dbGoTo( nRecno ) )
        EndIF

    CATCHEXCEPTION   

        TcCommit(3) //RollBack
        TcCommit(4) //End Transaction

    ENDEXCEPTION

    RestArea( aSRAArea )
    RestArea( aArea )

Return( nSalario )

outro exemplo:

#ifdef TOP
    If ( TCSrvType() == 'AS/400' ) .And. ( cDriver == 'TOPCONN' )
        TCCommit(5,.T.)
        DbCreate(cArquivo,aStru,cDriver)
        TCCommit(5,.F.)
        cCommand := "CHGOBJOWN OBJ("+AllTrim(cArquivo)+") OBJTYPE(*FILE) NEWOWN(QUSER)"
        TCSysExe(cCommand)
    Else
        DBCreate(cArquivo,aStru,cDriver)
    EndIf
#else
    DBCreate(cArquivo,aStru,cDriver)
#endif

[]s

иαldσ dj

Comentários

  1. A função ficou show no Roteiro de Calculo!!!! Rodrigo OverFail feat Naldo Dj ON x TOTVS-ABM Off... hehehehe!!!!

    ResponderExcluir
  2. Corrigi os valores dos parâmetros:

    Função:TCCommit( nOpc , uParam )

    nOPC : Obrigatório Tipo Numérico, define as opções para TCCommit
    uParam : Opcional Tipo Indefinido.

    Onde nOPC

    1 Begin Transaction
    2 End Transaction
    3 RollBack
    4 Commit
    5 Especifico para AS/400?

    ResponderExcluir

Postar um comentário

Postagens mais visitadas