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

Duvida Conteúdo do campo maior que o referenciado

Discussão em 'Progress 4GL' iniciado por julianfiglioli, Abril 12, 2016.

  1. julianfiglioli

    julianfiglioli Membro Participativo

    Senhores, boa tarde.

    Estou com uma tabela que possui algumas linhas que excederam o tamanho configurado, exemplo:

    campo: descricao varchar(100)

    Porém, existem registros maiores que as 100 posições.

    Como a tabela possui bastante registros e colunas, estou com dificuldade em encontrar quais são estes registros.

    Existe alguma função ou alguma forma que eu consiga descobrir isso?

    Obrigado.
  2. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    faz um FOR EACH e verifica se o LENGTH do campo é maior que 100, tipo:

    Código:
    OUTPUT TO C:\TEMP\Registros.txt NO-CONVERT.
    FOR EACH tabela NO-LOCK.
            IF LENGTH(tabela.descricao) > 100 THEN DO:
                 PUT UNFORMAT STRING(ROWID(tabela)).
            END.
    END.
    OUTPUT CLOSE.
    
    Depois basta achar esses registros pelo ROWID usando o TO-ROWID(" ").

    Abraço

    Rafael
  3. julianfiglioli

    julianfiglioli Membro Participativo

    Rafael, boa tarde.


    Me expressei mal. O problema é que eu não sei qual a coluna (campo), pois, recebo o seguinte erro:

    >> ERROR READING LINE #5 (Offset=4634): A column in this row being inserted or updated is too large (4212)

    Só que como a tabela tem mais de 100 colunas, eu vou na linha 5 e tenho muita informação!
  4. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Tenho uma ideia, vou fazer um codigão e já posto aqui.
  5. julianfiglioli

    julianfiglioli Membro Participativo

    Codigão foi boa! rsrsrs ...

    Agradeço!
  6. rafael.andrade

    rafael.andrade Membro Master Moderador Equipe de Suporte

    Algo como:

    Código:
    DEF VAR xi AS INTEGER.
    DEF VAR MaxChar AS INTEGER INIT 100.
    DEF VAR Tabela AS HANDLE.
    DEF VAR CampoAtual AS HANDLE.
    DEF VAR MyQuery AS HANDLE.
    DEF VAR NomeTabela AS CHAR INIT "banco.tabela".
    CREATE BUFFER Tabela FOR TABLE NomeTabela NO-ERROR.
    
    CREATE QUERY MyQuery.
    MyQuery:SET-BUFFERS(Tabela) NO-ERROR.
    MyQuery:QUERY-PREPARE("FOR EACH " + NomeTabela + " NO-LOCK") NO-ERROR.
    MyQuery:QUERY-OPEN() NO-ERROR.
    Tabela = MyQuery:GET-BUFFER-HANDLE(1) NO-ERROR.
    
    MyQuery:GET-FIRST(NO-LOCK).
    
    IF Tabela:AVAIL THEN DO:
       DO xi = 1 TO Tabela:NUM-FIELDS.
          CampoAtual = Tabela :BUFFER-FIELD(xi).
          IF CampoAtual:DATA-TYPE = "CHARACTER" AND LENGTH(CampoAtual:BUFFER-VALUE) > MaxChar THEN DO:
             MESSAGE CampoAtual:NAME SKIP CampoAtual:BUFFER-VALUE SKIP LENGTH(CampoAtual:BUFFER-VALUE)
                     VIEW-AS ALERT-BOX INFO BUTTONS OK.
          END.
       END.
    END.
    
    Lembrando de alterar a variável NomeTabela e a string do QUERY-PREPARE

Compartilhe esta Página