O código abaixo é bem simples, iremos demonstrar como criar uma tabela ctree, ler e gravar registros nesta tabela.
#include 'protheus.ch' #include 'parmtype.ch' User Function EXP0013 Private cArquivo:= "\system\tabela123.dtc" //Gera o nome do arquivo Private cIndice := "\system\tabela123" //indice do arquivo CriarDTC() //função que irá criar a tabela GravarDTC('000001') //função que irá gravar algum conteudo na tabela MsgInfo( LerDTC('000001') ,'Leitura de tabela DTC') //ler o conteudo gravado Return
//criar tabela Static Function CriarDTC() Local aCampos := {} //defino a variavel do tipo array para criar os campos if !File(cArquivo) aAdd(aCampos,{"REV_FILIAL" ,"C", 02,0}) aAdd(aCampos,{"REV_COD" ,"C", 06,0}) aAdd(aCampos,{"REV_DATA" ,"D", 08,0}) aAdd(aCampos,{"REV_CONTA" ,"N", 09,0}) If SELECT("REV") > 0 REV->(dbCloseArea()) Endif //Criar o arquivo Ctree dbCreate(cArquivo,aCampos,"CTREECDX") dbUseArea(.T.,"CTREECDX",cArquivo,"REV",.F.,.F.) IndRegua( "REV", cIndice, "REV_FILIAL + REV_COD",,,"CODIGO" ) dbClearIndex() dbSetIndex(cIndice + OrdBagExt() ) MsgInfo("Tabela Criada!") Endif Return
//gravar na tabela Static Function GravarDTC(cCodigo) //Verifico se o alias está aberto e fecho If ( SELECT("REV") ) > 0 dbSelectArea("REV") REV->(dbCloseArea()) EndIf //abro a tabela dbUseArea( .T.,"CTREECDX", cArquivo,"REV", .T., .F. ) dbSelectArea("REV") IndRegua( "REV", cIndice, "REV_FILIAL + REV_COD",,,"CODIGO" ) dbClearIndex() dbSetIndex(cIndice + OrdBagExt() ) dbSelectArea("REV") REV->(dbSetOrder(1)) REV->(dbGoTop()) If( REV->(!dbSeek('01' + cCodigo)) ) if RecLock("REV",.T.) REV->REV_FILIAL := '01' REV->REV_COD := cCodigo REV->REV_DATA := dDatabase REV->REV_CONTA := 1 MsUnLock("REV") MsgInfo("Registro Inserido","Sucesso") Else MsgStop("Ocorreu um erro","Erro") endif Else if RecLock("REV",.F.) REV->REV_DATA := dDatabase REV->REV_CONTA := 2 MsUnLock("REV") MsgInfo("Registro Alterado","Sucesso") Else MsgStop("Ocorreu um erro","Erro") endif Endif Return
//Ler tabela Static Function LerDTC(cCodigo) Local cRetorno := "" If ( SELECT("REV") ) > 0 dbSelectArea("REV") REV->(dbCloseArea()) EndIf dbUseArea( .T.,"CTREECDX", cArquivo,"REV", .T., .F. ) dbSelectArea("REV") IndRegua( "REV", cIndice, "REV_FILIAL + REV_COD",,,"CODIGO" ) dbClearIndex() dbSetIndex(cIndice + OrdBagExt() ) REV->(dbSetOrder(1)) REV->(dbGoTop()) If( REV->(dbSeek('01'+cCodigo)) ) cRetorno := "Codigo: " + REV->REV_COD + CRLF + "Data: " + DTOC(REV->REV_DATA) + CRLF + "Conta: " + Str(REV->REV_CONTA) Endif Return(cRetorno)
Simples não?