Duvida Query Dinâmica

Discussão em 'Progress 4GL' iniciado por marcelo.delphos, Maio 5, 2014.

  1. marcelo.delphos

    marcelo.delphos Sem Pontuação

    Prezados, bom dia.
    Estou criando um programa que se utiliza da query dinamica.

    O programa está me retornando erro no momento da query-prepare. Parece que o programa não aceita qq coisa q não seja um nome de campo definido.

    Segue exemplo:

    DEFINE VARIABLE qh AS HANDLE.
    DEFINE VARIABLE bh AS HANDLE.

    DEFINE VARIABLE c-tipo AS CHARACTER NO-UNDO.

    CREATE QUERY qh.
    CREATE BUFFER bh FOR TABLE "emitente".

    UPDATE c-tipo.

    qh:SET-BUFFERS(bh).

    /* Aqui reside o problema */
    qh:QUERY-PREPARE("for each emitente where substring(emitente.cod-emitente,1,1) " + c-tipo + "A").
    /*----------------------------- */

    qh:QUERY-OPEN.

    DO WHILE (qh:GET-NEXT = YES):
    DISP bh:BUFFER-FIELD(2):BUFFER-VALUE./*BUFFER-FIELD(2) = nome-abrev*/
    PAUSE.
    END.
  2. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Boa tarde @marcelo.delphos

    O problema não é que não aceita diferente de um campo da tabela, a questão é que vc esta querendo pegar a substring de um campo integer.

    PHP:
    DEFINE VARIABLE qh AS HANDLE.
    DEFINE VARIABLE bh AS HANDLE.
    DEFINE VARIABLE c-query AS CHARACTER   NO-UNDO.
    DEFINE VARIABLE c-tipo AS CHARACTER NO-UNDO.

    CREATE QUERY qh.
    CREATE BUFFER bh FOR TABLE "emitente".

    UPDATE c-tipo.

    qh:SET-BUFFERS(bh).

    /* Aqui reside o problema */
    ASSIGN c-query = "for each emitente where substring(emitente.nome-abrev,1,1) " + c-tipo + " 'A'".
    MESSAGE c-query
        VIEW
    -AS ALERT-BOX INFO BUTTONS OK.
    qh:QUERY-PREPARE(c-query).
    /*----------------------------- */

    qh:QUERY-OPEN.

    DO WHILE (
    qh:GET-NEXT = YES):
    DISP bh:BUFFER-FIELD(2):BUFFER-VALUE. /*BUFFER-FIELD(2) = nome-abrev*/
    PAUSE.
    END.
    Fiz o exemplo com nome-abrev, da uma olhada.

    No caso de ser realmente quiser o código do emitente, antes do substring, converta em string, ai vc deverá conseguir utilizar seu código, e atenção a texto que dentro da query deverá ter aspas simples.

    Abs.
  3. marcelo.delphos

    marcelo.delphos Sem Pontuação

    É verdade.. Obrigado pelo auxílio, realmente funcionou!!

Compartilhe esta Página