1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

Open query de um Browse utilizando SQL

Discussão em 'Progress 4GL' iniciado por Capucho, Março 2, 2011.

  1. Capucho

    Capucho Sem Pontuação

    Boa tarde pessoal,

    Gostaria de saber se existe no progress a possibilidade de se criar um Browse abrindo a query com um comando SQL, e não com um for each.

    ex:

    Progress:
    OPEN QUERY Browse-1 FOR EACH ITEM WHERE ITEM.ge-codigo = 5.

    SQL - Algo como:

    OPEM QUERY Browse-1 SELECT item.it-codigo FROM ITEM WHERE ge-codigo =5.

    Qual é o obejetivo disso? No comando progress, todos os campos da tabela item são carregados no buffer, já no comando SQL, apenas as informações desejadas seriam carregadas, nesse caso a informação apenas do item.it-codigo, tentando assim melhorar a performace qnd se tratar de um branco com milhares de registros.

    Desde já fico grato pela atenção de todos.
  2. kirchner

    kirchner Membro Participativo Moderador

    Capucho,

    Eu não conheço nada de OPEN QUERY, mas o FOR EACH tem uma cláusula FIELDS, para dizer quais campos serão lidos para o client:

    Código:
    FOR EACH item FIELDS (it-codigo) WHERE item.ge-codigo = 5:
    END.
    Isso não resolve?
  3. Capucho

    Capucho Sem Pontuação

    Kirchner,

    Com a sua ajuda e mais uma fuçada aqui, consegui fazer o que eu queria, carregar a query de um browse apenas com os campos que serão dados os displays.

    Muito obrigado.
  4. muertebr

    muertebr Membro Participativo

    Conseguiu faze a partir de comando SQL?

    Pois preciso faze o seguinte comando em progress e não estou conseguindo:

    Código:
    SELECt nr-embarque from embarque
     where nr-embarque > 114700  AND (nr-embarque
    in (select nr-embarque from pre-fatur where cod-sit-pre = 1 AND nr-embarque > 114700)
    OR nr-embarque NOT IN (select nr-embarque from pre-fatur where nr-embarque > 114700))
  5. Capucho

    Capucho Sem Pontuação

    Bom dia,
    não cara, com o SQL eu não consegui, acabei conseguindo resolver com o progress mesmo, fazendo a mesma coisa q o SQL faria...

    no Definitios do browse coloquei a query com a clausula fields, e então ao abrir a query, apenas os campos selecionados são buscados.

    Com o SQL não deu certo não...

    mas o seu TEM q ser Sql?
  6. muertebr

    muertebr Membro Participativo

    Na verdade não tem que ser, mais não consegui faze a lógica pro progress, pois não da pra utiliza find first, somente o first.

    Tentei faze dessa forma, mais não funciono.

    Código:
    FOR EACH embarque NO-LOCK
        WHERE embarque.cod-estabel = "101" AND
              embarque.nr-embarque >= 114700,
        FIRST pre-fatur OF embarque NO-LOCK
        WHERE pre-fatur.cod-sit-pre = 1 OR NOT AVAIL pre-fatur.
        DISP embarque.nr-embarque.
    END.
    Dessa forma funciona:
    Código:
    FOR EACH embarque NO-LOCK
        WHERE embarque.nr-embarque >= 114700 AND
              embarque.cod-estabel = "101".
        FIND FIRST pre-fatur NO-LOCK
            WHERE pre-fatur.nr-embarque = embarque.nr-embarque AND
                  pre-fatur.cod-estabel = embarque.cod-estabel NO-ERROR.
        IF NOT AVAIL pre-fatur OR AVAIL pre-fatur AND cod-sit-pre = 1 THEN
            DISP embarque.nr-embarque.
    END.

Compartilhe esta Página