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

Dica Utilizando Pré-Processador para Consulta Dinâmica

Discussão em 'Sugestões e Diversos' iniciado por rhemati, Agosto 17, 2016.

  1. rhemati

    rhemati Membro Participativo

    Pessoal, bom dia.

    Segue uma dica de como utilizar os pré-processador para consulta dinâmica ao nosso favor.

    Código:
    /* Arquvo pre-ems2.p */
    
    def input parameter pi-condicao01 as char.
    
    for each {1}.{2}
        where {1}.{2}.{3} = pi-condicao01
        no-lock:
        display {1}.{2}.{3}
                {1}.{2}.{4}
                .
    end.
    
    Segue o outro arquivo. o que chama a consulta.
    Código:
    /* Arquvo Preprocessador-ems2.p */
    def var c-campo01       as char format 'x(40)'    init 'it-codigo'.
    def var c-campo02       as char format 'x(12)'    init 'desc-item'.
    def var c-condicao01    as char no-undo.
    
    def var c-banco     as char init 'mgemp'.
    def var c-tabela    as char init 'item'.
    
    assign  c-banco         =   'mgemp'
            c-tabela        =   'item'
            c-condicao01    =   '132.3'
            .
    
    run pre-ems2.p ( input c-condicao01 ) c-banco c-tabela c-campo01 c-campo02
        /* c-banco c-tabela c-campo01 c-campo02 c-condicao01 */
    
    Obrigado.
    rohis curtiu isso.
  2. bootstrapmaster

    bootstrapmaster Membro Master

    mas tem um detalhe meu caro, ha não ser que tenham resolvido isso recentemente, esses seus programinhas, principalmente o pre-ems2.p não pode ser compilado. Agora se vc usar query dinamica, dai fica legal.
  3. Guilherme.Moles

    Guilherme.Moles Membro Participativo

    Boa tarde Srs.

    Não achei um exemplo aqui então fiz um modelinho para quem precisar realizar uma consulta dinâmica. Eu desenvolvi essa rotina para validar se a tabela existe no cadastro de um de-para que estou desenvolvendo, segue abaixo rotina...
    Código:
        DEFINE VARIABLE ix         AS INTEGER         NO-UNDO.
        DEFINE VARIABLE l-tab-ok   AS LOGICAL INIT NO NO-UNDO.
        DEFINE VARIABLE qh         AS HANDLE          NO-UNDO.
        DEFINE VARIABLE qh-prepare AS CHARACTER       NO-UNDO.
        DEFINE VARIABLE bh         AS HANDLE          NO-UNDO.
       
        REPEAT ix = 1 TO NUM-DBS: 
    
            ASSIGN qh-prepare = "FOR EACH " + STRING(LDBNAME(ix)) + "._File WHERE " + STRING(LDBNAME(ix)) + "._File._File-Name = " + "'item'" + " NO-LOCK".
    
           
            CREATE BUFFER bh FOR TABLE STRING(LDBNAME(ix)) + "._File".
    
            CREATE QUERY qh.
    
            qh:SET-BUFFERS(bh).
    
            qh:QUERY-PREPARE(qh-prepare).
    
            qh:QUERY-OPEN().
    
            qh:GET-FIRST().
    
            IF qh:NUM-RESULTS > 0 THEN ASSIGN l-tab-ok = YES.
           
            qh:QUERY-CLOSE().
    
            bh:BUFFER-RELEASE().  
           
            DELETE OBJECT bh.     
            DELETE OBJECT qh. 
        END.
    
        IF  l-tab-ok = NO THEN DO :
            MESSAGE "TABELA INEXISTENTE!"
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    
            return 'ADM-ERROR':U.
        END.
        ELSE
            MESSAGE "OK"
                VIEW-AS ALERT-BOX INFO BUTTONS OK.
    rhemati e fdantas curtiram isso.

Compartilhe esta Página