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

  2. Anuncie Aqui ! Entre em contato fdantas@4each.com.br

Urgente Converter conteudo de variavel igual a campo do banco de dados (Preprocessor)

Discussão em 'Progress 4GL' iniciado por Lunardo, Fevereiro 3, 2014.

  1. Lunardo

    Lunardo Membro Participativo

    Pessoal estou com uma duvida urgente...

    Estou retornando um uma string o nome de um campo da tabela e quero saber se é possível fazer com que o progress veja essa essa variavel como um tipo de dado do banco?

    Exemplo:

    assign c-teste = "emitente".

    {&tabela} = c-teste.

    Se feito dessa maneira ele não interpreta como uma tabela do banco. Alguem sabe se tem alguma forma de fazer isso?
    Última edição: Fevereiro 3, 2014
  2. Guilherme.Moles

    Guilherme.Moles Membro Participativo

    Você precisa usar Handles Lunardo segue abaixo exemplo de código... espero que ajude...

    Código:
    DEF VAR my-query        AS HANDLE NO-UNDO.
    DEF VAR my-buffer      AS HANDLE NO-UNDO.
    DEF VAR my-buffer-FIELD AS HANDLE NO-UNDO.
    DEF VAR valor          AS HANDLE NO-UNDO.
    DEF VAR campo          AS CHAR  NO-UNDO.
    
    CREATE BUFFER my-buffer FOR TABLE "emitente".
    CREATE QUERY  my-query.
    
    ASSIGN campo = "nome-emit".
    
    DO TRANSACTION.
    my-query:SET-BUFFERS(my-buffer).
    my-query:QUERY-PREPARE("FOR EACH emitente EXCLUSIVE-LOCK") NO-ERROR.
    my-query:QUERY-OPEN().
    my-query:GET-FIRST.
       
        IF VALID-HANDLE(my-buffer:BUFFER-FIELD(campo)) THEN DO:
            ASSIGN  my-buffer-field = my-buffer:BUFFER-FIELD(campo).
            DISP    my-buffer-field:BUFFER-VALUE(0).
            ASSIGN  my-buffer-field:BUFFER-VALUE(0) = "Nome Novo do Emitente".
            DISP    my-buffer-field:BUFFER-VALUE(0).
        END.
    END.
    Lunardo curtiu isso.
  3. jaisonantoniazzi

    jaisonantoniazzi Membro Ativo

  4. Lunardo

    Lunardo Membro Participativo

    Guilherme Moles essa eu uma alternativa boa, mas o problema é que o nome da tabela e dos campos eu estou retorno de outra tabela e com isso o progress não ve como tabela e nem como um campo...segue exemplo aproveitando o que você fez:

    DEF VAR my-query AS HANDLE NO-UNDO.
    DEF VAR my-buffer AS HANDLE NO-UNDO.
    DEF VAR my-buffer-FIELD AS HANDLE NO-UNDO.
    DEF VAR valor AS HANDLE NO-UNDO.
    DEF VAR campo AS CHAR NO-UNDO.

    find first informacoes no-lock no-error. /* Buscando tabela e campos que irei utilizar */

    CREATE BUFFER my-buffer FOR TABLE informacoes.tabela . ("emitente")
    CREATE QUERY my-query.

    ASSIGN campo = informacoes.campo . ("nome-emit")

    DO TRANSACTION.
    my-query:SET-BUFFERS(my-buffer).
    my-query:QUERY-PREPARE("FOR EACH emitente EXCLUSIVE-LOCK") NO-ERROR.
    my-query:QUERY-OPEN().
    my-query:GET-FIRST.

    IF VALID-HANDLE(my-buffer:BUFFER-FIELD(campo)) THEN DO:
    ASSIGN my-buffer-field = my-buffer:BUFFER-FIELD(campo).
    DISP my-buffer-field:BUFFER-VALUE(0).
    ASSIGN my-buffer-field:BUFFER-VALUE(0) = "Nome Novo do Emitente".
    DISP my-buffer-field:BUFFER-VALUE(0).
    END.
    END.
    Guilherme.Moles curtiu isso.
  5. Agnaldo

    Agnaldo Membro Ativo

    O código do Guilherme deve resolver a tua situação.
    Basta que passe os dados (tua tabela e teu campo) para ele (vide código que esta comentado).

    Código:
    DEF VAR my-query         AS HANDLE NO-UNDO.
    DEF VAR my-buffer        AS HANDLE NO-UNDO.
    DEF VAR my-buffer-FIELD  AS HANDLE NO-UNDO.
    DEF VAR valor            AS HANDLE NO-UNDO.
    DEF VAR campo            AS CHAR  NO-UNDO.
    
    DEFINE VARIABLE tuaTabela AS CHARACTER.
    DEFINE VARIABLE teuCampo  AS CHARACTER.
    
    
    /*
    FIND FIRST Informacoes NO-LOCK NO-ERROR.
    ASSIGN tuaTabela = Informacoes.tabela
           teuCampo  = Informacoes.Campo.
    */     
    
    ASSIGN tuaTabela = "Customer"
           teuCampo  = "Name".
    
    CREATE BUFFER my-buffer FOR TABLE tuaTabela.
    CREATE QUERY  my-query.
    
    ASSIGN campo = teuCampo.
    
    DO TRANSACTION.
    my-query:SET-BUFFERS(my-buffer).
    my-query:QUERY-PREPARE("FOR EACH " + tuaTabela + " EXCLUSIVE-LOCK") NO-ERROR.
    my-query:QUERY-OPEN().
    my-query:GET-FIRST.
      
        IF VALID-HANDLE(my-buffer:BUFFER-FIELD(campo)) THEN DO:
            ASSIGN  my-buffer-field = my-buffer:BUFFER-FIELD(campo).
            DISP    my-buffer-field:BUFFER-VALUE(0).
            ASSIGN  my-buffer-field:BUFFER-VALUE(0) = "Nome Novo do Emitente".
            DISP    my-buffer-field:BUFFER-VALUE(0).
        END.
    END.
    
    
    Lunardo curtiu isso.
  6. Lunardo

    Lunardo Membro Participativo

    Agnaldo vou tentar dessa forma que você passou e assim que tiver uma posição dou um retorno!

    Desde já agradeço a atenção de todos.

Compartilhe esta Página