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.
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.