como importar arquivo csv para progress

Discussão em 'Progress 4GL' iniciado por diegocf, Janeiro 26, 2010.

  1. diegocf

    diegocf Membro Participativo

    Bom dia pessoal, estou precisando atualizar alguns grupos de clientes de mais de 1.000 cliente e fazer isto na unha no datasul é trampo, como eu poderia atualizar estes clientes de forma rapida ? como eu tenho eles numa planilha do excel pensei em importa-los para o banco e alterar os grupos de clientes, mas uma coisa simples que eu nao entendo, como fica esta função de importar quando ja se tem aquele cliente na base, pois na verdade eu so quero atualizar o grupo de clientes daqueles que esta na minha planilha de excel.

    Alguem pode me mandar um exemplo ?

    Grato
  2. jonas

    jonas Membro Participativo

    Veja se é mais ou menos isso que você precisa:

    Código:
    create "Excel.Application"  chExcelApplication.
    assign chWorkbook = chExcelApplication:workBooks:open(cArquivo).
    assign chWorkSheet = chExcelApplication:Sheets:Item(1).
    
    assign iLinha = 1.
              
    
      /* importa as informacoes das planilhas */
      repeat:
          assign ilinha    = iLinha + 1
                 iContador = iContador + 1.
                 
          if i-Linha = 1000 then do:
              chWorkbook:close(true).
              chExcelApplication:quit().
              release object chExcelApplication.
              release object chWorkbook.
              release object chWorkSheet.
              return "NOK".
          end.
    
         assign cCelula = 'A' + string(iLinha,"99999").
          assign i-Cod-Emit = int(chWorkSheet:Range(cCelula):value).
    
         assign cCelula = 'B' + string(iLinha,"99999").
          assign i-Cod-gr-cli = int(chWorkSheet:Range(cCelula):value).
    
        find first emitente where emitente.cod-emitente = i-cod-emit no-lock no-error.
    
         if available emitente then do:
    
            /*assign emitente.cod-gr-cli = i-cod-gr-cli*/
        end.
    
    No exemplo não estão declaradas as variáveis.

    Veja se pode te ajudar.
  3. jonas

    jonas Membro Participativo

    Só uma observação sobre o código que postei: Está faltando declarar as variáveis, fechar o END do repeat e o find na tabela emitente está como no-lock. Se você desejar alterar a tabela utilize o exclusive-lock.

    Código:
    define variable cArquivo           as char no-undo.
    define variable ilinha          as int no-undo.
    define variable chExcelApplication as com-handle.
    define variable chWorkbook         as com-handle.
    define variable chWorkSheet        as com-handle.
    define variable cCelula            as char no-undo.
    define variable i-cod-emitente as int no-undo.
    define variable i-cod-gr-cli as int no-undo.
    
    assign cArquivo = "c:\teste.xls".
    
    create "Excel.Application"  chExcelApplication.
    assign chWorkbook = chExcelApplication:workBooks:open(cArquivo).
    assign chWorkSheet = chExcelApplication:Sheets:Item(1).
    
    assign iLinha = 1.          
    
    /* importa as informacoes das planilhas */
    repeat:
          assign ilinha    = iLinha + 1.             
    
          if i-Linha = 1000 then do: /* no lugar de  1000 insira o número da última linha de sua planilha*/
              chWorkbook:close(true).
              chExcelApplication:quit().
              release object chExcelApplication.
              release object chWorkbook.
              release object chWorkSheet.
              return "NOK".
          end.
    
         assign cCelula = 'A' + string(iLinha,"99999").
         assign i-Cod-Emit = int(chWorkSheet:Range(cCelula):value).
    
         assign cCelula = 'B' + string(iLinha,"99999").
         assign i-Cod-gr-cli = int(chWorkSheet:Range(cCelula):value).
    
        for first emitente fields (cod-emitente cod-gr-cli)
            where emitente.cod-emitente = i-cod-emit exclusive-lock no-error.
    
         if available emitente then do:
            assign emitente.cod-gr-cli = i-cod-gr-cli
        end.
    
    end.
    
    Espero que ajude.
  4. LFBuozi

    LFBuozi Membro Participativo

    Cara, csv não passa de um arquivo texto separado por ponto-e-virgula.
    Faça o seguinte.

    input from "c:\temp\arquivo.csv".

    repeat:
    create tabela.
    import delimiter ";"
    tabela.campo1
    tabela.campo2.
    end.

    Legal disso é que você importa arquivos textos com qualquer delimitador somente mudando o caracter do "delimiter".

Compartilhe esta Página