1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Dica Tabela dinamica

Discussão em 'Progress 4GL' iniciado por bootstrapmaster, Abril 7, 2015.

  1. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Pessoal, funcionou como um relogio, criei uma classe que posiciona o registro e traz os campos e seus valores, depois outra classe que instancia a primeira, le os campos e compara os conteudos, elimina os campos que os conteudos estão iguais e me entrega só os campos que estão diferentes, agora posso usar essas classes em qualquer situação.

    Só não consegui fazer posicionar o registro pelo rowid, então tive que passar o comando pra rotina, a clausula where pra complementar o for each para o query-prepare.
  2. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    Um exemplo de uso ....
    Código:
    /*  ------------------------------------------------------------
        Programa .:
        Autor ....: Richard Edgar - Imesul
        Data .....:
        Descricao :
        ------------------------------------------------------------ */
        {grid2/error.i}
    
        using imesul.common.*.
    
        define variable error   as ExceptionControl    no-undo.
        define variable compara as ComparaCamposTabela no-undo.
    
        assign error   = ExceptionControl:getInstance()
               compara = new ComparaCamposTabela().
    
        error:clearExceptions().
        do {&try}:
            compara:new().
            compara:setTabelas('pedido-compr','cst_pedido-compr').
            compara:setFind('pedido-compr.num-pedido = 77194','cst_pedido-compr.num-pedido = 77194').
            compara:processar().
            compara:findFirst().
            output to value ('c:\temp\Comparacampos.csv').
            put unformatted 'Campo;Label;Indice;Valor 1;Valor 2' skip.
            do while compara:hasRow():
                put unformatted
                    compara:getNomeCampo() ';'
                    compara:getLabelCampo() ';'
                    compara:getIndice() ';'.
                case compara:getTipoCampo():
                    when 'integer'   then put unformatted compara:getInteiro(1)  ';' compara:getInteiro(2)  skip.
                    when 'date'      then put unformatted compara:getData(1)     ';' compara:getData   (2)  skip.
                    when 'character' then put unformatted compara:getCaracter(1) ';' compara:getCaracter(2) skip.
                    when 'logical'   then put unformatted compara:getLogico(1)   ';' compara:getLogico(2)   skip.
                    when 'decimal'   then put unformatted compara:getDecimal(1)  ';' compara:getDecimal(2)  skip.
                end case.
                compara:findNext().
            end.
            output close.
        {&catch}
        error:showExceptions().
       
    
  3. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Quando uso tabela dinâmica, eu faço comparação String do ROWID, tipo:

    "FOR EACH MyTable WHERE STRING(ROWID(MyTable)) " + QUOTER(STRING(ROWID(MyTable)))

    Sempre funciona.

    Flw
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Ops, esqueci do = antes de fechar as aspas

    "FOR EACH MyTable WHERE STRING(ROWID(MyTable)) = " + QUOTER(STRING(ROWID(MyTable)))
  5. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    eu tentei mas deu erro.
  6. bootstrapmaster

    bootstrapmaster Moderator Moderador Equipe de Suporte

    talves o QUOTER faça a diferença pra que tudo funcione, vou tentar amanhã, muito melhor usar uma referencia generica como um ROWID

Compartilhe esta Página