× Linguagem de Programação ADVPL

Perguntas Loop de verificação, arquivo de trabalho continua aberto mesmo depois de utilizar dbclosearea()

Mais
10 anos 11 meses atrás #18866 por cintra_daniel
Pessoal estou precisando de ajuda com uma função minha, tenho 3 loops, e 3 arquivos de trabalho, quando o maior passa pelo dbskip, os outros menores continuam abertos mesmo depois de exectuar a função dbclosearea().

Static Function VerificaVSP()

Local cTotal := 0
Local cModelo
Local cVeiculo
Local cPosic1
Local cPosic2

Local cQuery := ""
Local _cDados1 := CriaTrab(NIL,.F.)

Local cQuery2 := ""
Local _cDados2 := CriaTrab(NIL,.F.)

Local cQuery3 := ""
Local _cDados3 := CriaTrab(NIL,.F.)

cQuery := "SELECT"
cQuery += " T9_CODBEM,"
cQuery += " T9_TIPMOD,"
cQuery += " (SELECT TQR_DESMOD FROM TQR010 WHERE D_E_L_E_T_ = '' AND TQR_TIPMOD=T9_TIPMOD) AS MODELO,"
cQuery += " T9_ANOMOD,"
cQuery += " T9_CODFAMI,"
cQuery += " (SELECT T6_NOME FROM ST6010 WHERE D_E_L_E_T_ = '' AND T6_CODFAMI=T9_CODFAMI) AS FAMILIA,"
cQuery += " T9_UFEMPLA"
cQuery += " FROM ST9010 ST9"
cQuery += " WHERE ST9.D_E_L_E_T_ = ''"
cQuery += " AND T9_SITBEM = 'A'"
cQuery += " AND T9_CATBEM = '4'"
cQuery += " AND T9_FILIAL BETWEEN '"+MV_PAR01+"' AND '"+MV_PAR02+"'"
cQuery += " AND T9_CODFAMI BETWEEN '"+MV_PAR03+"' AND '"+MV_PAR04+"'"
cQuery += " AND T9_TIPMOD BETWEEN '"+MV_PAR05+"' AND '"+MV_PAR06+"'"
cQuery += " AND T9_CODBEM BETWEEN '"+MV_PAR07+"' AND '"+MV_PAR08+"'"
cQuery += " ORDER BY T9_CODBEM"

DbUseArea(.T., "TOPCONN", TcGenQry(,, cQuery), _cDados1, .T., .T.)

DbGoTop(_cDados1)

While (_cDados1)->(!Eof())

cModelo := (_cDados1)->T9_TIPMOD
cVeiculo := (_cDados1)->T9_CODBEM

cQuery2 := " SELECT DISTINCT TC_LOCALIZ P1 FROM STC010 WHERE D_E_L_E_T_ = ''"
cQuery2 += " AND TC_TIPMOD = '"+cModelo+"' AND TC_LOCALIZ <> '' ORDER BY TC_LOCALIZ"

cQuery3 := " SELECT TC_LOCALIZ P2 FROM STC010 WHERE D_E_L_E_T_ = '' AND TC_CODBEM = '"+cVeiculo+"' ORDER BY TC_LOCALIZ"

DbUseArea(.T., "TOPCONN", TcGenQry(,, cQuery2), _cDados2, .T., .T.)
DbUseArea(.T., "TOPCONN", TcGenQry(,, cQuery3), _cDados3, .T., .T.)

DbSelectArea(_cDados2)
DbSelectArea(_cDados3)

While (_cDados2)->(!Eof())
While (_cDados3)->(!Eof())
If Empty((_cDados2)->P1) .Or. Empty((_cDados3)->P2)
cTotal++
EndIf
(_cDados3)->(DbSkip())
EndDo
(_cDados3)->(DbGoTop())
(_cDados2)->(DbSkip())
EndDo
dbCloseArea(_cDados2)
dbCloseArea(_cDados3)

(_cDados1)->(DbSkip())
EndDo
DbCloseArea(_cDados1)

cTotal := AllTrim(Str(cTotal))

Return cTotal

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 11 meses atrás - 10 anos 11 meses atrás #18870 por mbrigagao
Daniel,

Eu fecho os arquivos assim:

dbSeletcArea(_cDados2)
dbCloseArea()

Ou assim:

(_cDados2)->(DbCloseArea())


Se eu não me engano o dbCloseArea não considera a passagem de parametros.

At.
Ultima edição: 10 anos 11 meses atrás por mbrigagao.

Por favor Acessar ou Registrar para participar da conversa.

Mais
10 anos 11 meses atrás #18878 por cintra_daniel
Marcelo muito obrigado,

consegui fechar os arquivos de trabalho passado o dbclosearea dessa forma:

(_cDados2)->(DbCloseArea())
(_cDados3)->(DbCloseArea())

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.070 segundos
Joomla templates by a4joomla