Duvida For each x Query

Discussão em 'Progress 4GL' iniciado por ds201, Julho 14, 2015.

  1. ds201

    ds201 Membro Participativo

    Boa noite

    Preciso limitar a quantidade de registros retornados por um "for each".
    Para isto uso o "i-qtd = 1 to 5" como parte do comando "for each".
    O sistema se comporta como esperado e retorna apenas 5 registros.

    Gostaria de implantar esta mesma ideia em uma query. Só que a query não "entende" e gera erro no "prepare".

    Algum dos senhores sabe como contornar isto?

    Obrigado.

    Arquivos Anexados:

    • f1.p
      Tamanho:
      175 bytes
      Visitas:
      10
    • q1.p
      Tamanho:
      422 bytes
      Visitas:
      5
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Criando uma temp-table e preenchendo antes da query e usá-la na query vc consegue resolver seu problema.

    Ai, por garantia você adiciona um campo ROWID na temp-table com o ROWID do registro da tabela original para usar na query ou em outras situações... Exemplo:

    Código:
    OPEN QUERY BRW-Regs FOR EACH MyTempTable NO-LOCK,FIRST MyTable WHERE MyTempTable.fRowID = ROWID(MyTable) NO-LOCK.
    
    Abraço

    Rafael
  3. ds201

    ds201 Membro Participativo

    Boa tarde

    Obrigado pelo apoio Rafael.

    Sds
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

  5. ds201

    ds201 Membro Participativo

    Funciona sim para o exemplo que eu coloquei.

    O que complica é que o programa que estou ajustando é bastante complexo e não foi possível melhora-lo com esta lógica.

    O que me chama a atenção é que (aparentemente) não há nada na documentação do Progress que diga que não se pode usar
    o código "i-qtd = 1 to 5" em uma query.
    Isto me levou a acreditar que pode ser algum detalhe que estou ignorando.

    O programa que estou ajustando esta funcionando, o que eu estou tentando fazer e torna-lo mais rápido.
    De qualquer forma obrigado pela contribuição.

    Sds
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    É que o progress não tem limitação de carregamento de registro.

    Você conseguiu fazer no FOR EACH separado porque você deve ter dado um LEAVE quando a variável chegou no valor máximo.

    Já na Query, não existe um LEAVE, ou ele faz tudo ou não faz nada.

    A sua solução seria fazer um FOR EACH a parte, preenchendo uma temp-table e depois só carregando a temp-table no browse.

Compartilhe esta Página