Tabela não copia

Olá, tenho este fonte que é para copiar tabelas de TOPCONNECT para salvar em um diretório. Ao finalizar, diz que a tabela foi copiado, porém quando vou olhar no diretório, a mesma não está lá. Alguém sabe o que posso ter errado no fonte?

Quero salvar do banco de dados (topconnect) para CTREE.


#include "protheus.ch"

User Function TestCopy()

   cFileIni := 'SLK010'
   cFileFim := '\BACKUP\SLK010_bkp.dtc'

      If ! MsCopyFile(cFileIni, cFileFim,'TOPCONN')
         MsgAlert("O arquivo não pôde ser copiado.")

         Else    
            MsgAlert("O arquivo foi copiado com sucesso.")

      EndIf

Return

Anne, essa função MsCopyFile() só copia tabelas usando sempre o mesmo tipo (CTREE->CTREE, TOP->TOP, etc.). Se precisar copiar de TOP para Ctree vai precisar usar a função FWDBCreate() para criar a tabela destino no formato desejado (CTREE por exemplo), abre a tabela origem usando DbUseArea(), e vai percorrendo a tabela origem em um laço While e gravando na tabela temporária destino.

OK Anne, estou colocando aqui um pequeno exemplo de como pode ser feito. Obs.: Eu não cheguei a testar o programa, mas o caminho é esse aí, deve funcionar.



//#############################################################################
//##+----------+-----------+-------+-------------------+------+-------------+##
//##|Programa  | ExCopyTab | Autor | Cirilo Rocha      | Data | 27/02/2023  |##
//##+----------+-----------+-------+-------------------+------+-------------+##
//##|Descr.    | Pequeno exemplo de como copiar uma tabela entre diferentes |##
//##|          |  RDD's, porque a função MsCopyFile só copia entre iguais   |##
//##+----------+-----------+------------------------------------------------+##
//##|   DATA   |Programador| Manutenção efetuada                            |##
//##+----------+-----------+------------------------------------------------+##
//##|          |           |                                                |##
//##|          |           |                                                |##
//##+----------+-----------+------------------------------------------------+##
//#############################################################################
User Function ExCopyTab()

    //Declaração de Variáveis-------------------------------------------------------------------
    Local aStruct                                    AS Array
    Local cCampo                                    AS Character
    Local cFileIni := '\SYSTEM\SLK010.dtc'            AS Character
    Local cFileFim := '\BACKUP\SLK010_bkp.dtc'        AS Character
    Local nX                                        AS Numeric
    Local uConteudo                                    AS Variant

    //Abre a tabela se não for top, senão basta abrir diretamente a tabela mesmo
    DBUseArea(.T., 'CTREECDX', cFileIni, 'TMP', .F., .F.)
    aStruct    := TMP->(dbStruct())

    FWDBCreate( 'BKP_DST', aStruct , 'CTREECDX' , .F. )    //Cria tabela de destino, pode ser Ctree ou Top por exemplo

    //Percorre a tabela fazendo as gravações
    TMP->(dbGoTop())
    While TMP->(!EOF())
        RecLock('BKP_DST',.T.)
            For nX := 1 to Len(aStruct)
                //Não precisaria dessas variáveis deixei apenas pra ficar mais claro o código
                cCampo        := aStruct[nX][1]
                uConteudo    := TMP->(FieldGet(FildPos(cCampo)))
                BKP_DST->(FieldPut(FieldPos(cCampo),uConteudo))
            Next
        BKP_DST->(MsUnLock())
        TMP->(dbSkip())
    EndDo

Return

Tem como fornecer um exemplo por favor? Só para eu entender melhor a lógica.

Coloquei um pequeno fonte de exemplo, espero que rode, se precisar faça alguns ajustes, porque não cheguei a testá-lo.

Anne Cavalcante.

O Fonte em anexo esta funcionando eu uso para baixar tabelas do TCLOUD, pois a funcionalidade de importar do SDU trava. Dai precisei criar este fonte.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.