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

Duvida passagem de parametro

Discussão em 'Progress 4GL' iniciado por ueluis, Junho 10, 2014.

  1. ueluis

    ueluis Membro Participativo

    pessoal,

    como faço para passar uma temp-table como parametro para outro programa?

    alguém teria um exemplo?
  2. ferbortolasci

    ferbortolasci Sem Pontuação

    Programa chamador INPUT TABLE NOMEDATABELA
    Programa chamado DEF INPUT PARAM TABLE FOR NOMEDATABELA
    denek curtiu isso.
  3. Eilleen

    Eilleen Membro Ativo

    Boa tarde,

    Apenas uma observação, complementando a resposta do ferbortolasci... ;)
    Você pode usar, na chamada, a opção BY-REFERENCE. Ex: RUN nomePrograma(INPUT TABLE nomeTabela BY-REFERENCE).
    Quando utilizada essa opção, o registro posicionado no programa chamador, já fica posicionado no programa chamado, não sendo necessário fazer FIND novamente, pois vc está passando somente a referência da temp na memória e não a tabela inteira. Mesmo para casos em que não é necessário o registro estar posicionado, essa opção garante melhor performance e menos tráfego de informação.

    :)
    fdantas, denek e elmo curtiram isso.
  4. ferbortolasci

    ferbortolasci Sem Pontuação

    Eillen, não conheço o BY-REFERENCE, esse comando seria como se fosse um buffer de registros passando por uma temporária?
    denek curtiu isso.
  5. Eilleen

    Eilleen Membro Ativo

    Na verdade é o tipo de passagem do parâmetro... É aplicável a parâmetros do tipo TABLE, TABLE-HANDLE, DATASET, ou DATASET-HANDLE..

    Quando passamos um parâmetro sem especificar o tipo, por default ele é passado como "BY-VALUE", por valor, ou seja, numa tabela são passados todos os dados dessa tabela, e no programa chamado ela é uma tabela independente, tudo o que vc fizer nela dentro do programa chamado não afeta a tabela do programa chamador (a menos, é claro, que o parâmetro seja INPUT-OUTPUT), pois você não passou a própria tabela, é como se enviasse uma cópia idêntica dela...

    O BY-REFERENCE não passa a tabela inteira como parâmetro, passa apenas uma referência dela, uma "instância do mesmo objeto", é como se falasse "a tabela tal tá nesse endereço"... Então tudo que é feito no programa chamado afeta a tabela do programa chamador.

    Existe ainda o tipo BIND, mas esse sinceramente eu nunca usei e nem sei te explicar direito... rs... Na ajuda (F1) do Progress dá pra encontrar uma explicação melhor e alguns exemplos também!

    :D
  6. ueluis

    ueluis Membro Participativo

    Pessoal,
    obrigado pelas respostas, depois da explicação da nossa amiga Eilleen, incluirei o by-reference também!

    abç

Compartilhe esta Página