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
A função ficou show no Roteiro de Calculo!!!! Rodrigo OverFail feat Naldo Dj ON x TOTVS-ABM Off... hehehehe!!!!
ResponderExcluirCorrigi os valores dos parâmetros:
ResponderExcluirFunçã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?