Função length falhando - Progress 10.1a

Discussão em 'Progress 4GL' iniciado por ds201, Abril 23, 2014.

  1. ds201

    ds201 Membro Participativo

    Em certo programa, uso a função “length” para verificar se ainda há espaço em uma variável (tipo char) para receber mais dados.

    Sem motivo aparente a função “length” começou a falhar.

    Quando o comprimento (da variável) passa de (aproximadamente) 7.500 bytes o Progress informa o erro “Tentativa de atualizar dados excedendo 32000. (12371)”.

    Coloquei mensagens para me certificar da quantidade de bytes armazenados na variável, e realmente estava em torno de 7.500 bytes.

    Fiz uma copia do programa e:
    - Criei uma variável auxiliar “vds-gest-resp-long” do tipo longchar para receber os dados.
    - Após o “for each” tentei atribuir o conteúdo de “vds-gest-resp-long” para “vds-gest-resp”.
    - O sistema deu o erro “Tentativa de atualizar dados excedendo 32000. (12371)”.
    - Verifique o “tamanho” vds-gest-resp-long e estava em torno de 7.500 bytes.

    Gostaria de saber se alguém já teve problemas com a função “length”.
    Um trecho do programa esta em anexo.

    Obrigado

    Arquivos Anexados:

  2. ecsousa

    ecsousa Membro Participativo

    Bom dia,

    A variável char suporta até 32000bytes... você tentou verificar o conteúdo que está sendo armazenado? talvez haja algum "lixo" que esteja proporcionando o erro...... fiz uma adapatação no seu teste ( pois nao conseguia rodá-lo devido ao fato de nao ter a tabela utilizada) ...e nao apresentou problema algum ( até o tamanho de 32000).segue:

    /*--- Rev: vds-gest-resp ---*/
    Def Var cdsecao As Char Init "abcdefghijklmnopqrstuvwxyz" No-undo.
    Def Var vds-gest-resp As Char No-undo.
    assign vds-gest-resp = "".

    Repeat:

    process events.

    if vds-gest-resp = "" then do:
    assign vds-gest-resp = trim(cdsecao) + "," + trim(cdsecao).
    end.
    else do:
    if length(vds-gest-resp) > 31966 then do: /*--- Não funciona com mais de 7500 bytes. Não sei porque. ---*/
    message
    'A variável "vds-gest-resp" contém mais de 7.460 caracteres.'
    view-as alert-box error buttons ok.
    Leave.
    end.
    else do:
    assign vds-gest-resp = trim(vds-gest-resp) + "," + trim(cdsecao) + "," + trim(cdsecao).
    end.
    end.
    end.

    MESSAGE vds-gest-resp
    VIEW-AS ALERT-BOX INFO BUTTONS OK.
    assign vds-gest-resp = vds-gest-resp + "," + " " + "," + " ".
  3. ds201

    ds201 Membro Participativo

    Boa tarde

    Obrigado pela atenção.
    Amanhã vou verificar se há caracteres especiais (lixo) nos meus dados.
    Assim que eu tiver uma posição eu retorno.

    Sds
  4. ds201

    ds201 Membro Participativo

    Boa tarde

    Realmente havia alguns caracteres especiais nos meus dados.
    Já foi corrigido.

    Obrigado

Compartilhe esta Página