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

Campo tipo Raw

Discussão em 'Progress 4GL' iniciado por coliveira, Janeiro 27, 2009.

  1. TrombiniSP

    TrombiniSP Membro Participativo

    Só uma correção. Como descrito acima vc pode copiar um registro inteiro para um campo tipo RAW.

    O mesmo comando copia o registro da tabela ou temp-table para o campo tipo RAW e vice-versa.

    Abs.
  2. betopac

    betopac Sem Pontuação

    Teria como usar o raw para guardar Imagens?
    Se não há alguma forma de guardar isto em progress???

    Valeu
  3. TrombiniSP

    TrombiniSP Membro Participativo

    Sim há como fazer e vou lhe dar um exemplo, mas pesso primeiro que estude um comando o :

    COPY-LOB statement

    Copia grandes objetos de dados entre BLOBs, CLOBs, MEMPTRs, e LONGCHARs. Também copia grandes objetos de dados para o sistema de arquivos, e converte grandes objetos de dados a partir de um CODE PAGE para o outro.

    PS: Não pretendo mais postar grandes fontes de código aqui, acho que isso atrasa o aprendizado.

    COPY-LOB
    [ FROM ] { [ OBJECT ] source-lob | FILE source-filename }
    [ STARTING AT n ] [ FOR length ]
    TO { [ OBJECT ] target-lob [OVERLAY AT n [TRIM ] ] |
    FILE target-filename [ APPEND ] }
    [ NO-CONVERT | CONVERT convert-phrase ]
    [ NO-ERROR ].

    ESTE EXEMPLO USA UMA TEMP-TABLE (FACILITA O TESTE) MAS FUNCIONA IGUALMENTE E QUALQUER TABELA DO BANCO. OBS: PARA QUEM USA ORACLE DEVE SE INFORMAR MELHOR.

    Código:
    CREATE WIDGET-POOL.
     
    DEFINE TEMP-TABLE ttImage NO-UNDO
        FIELD cImageName AS CHARACTER FORMAT "X(125)"
        FIELD bImage AS BLOB
        INDEX imageName AS PRIMARY UNIQUE cImageName.
     
    DEFINE VARIABLE C-Win AS WIDGET-HANDLE NO-UNDO.
     
    DEFINE BUTTON bAddImage
        LABEL "Add Image" 
        SIZE 15 BY 1.14.
     
    DEFINE IMAGE IMAGE-1
        FILENAME "adeicon/blank":U
        STRETCH-TO-FIT
        SIZE 172 BY 30.
     
    DEFINE QUERY brImages FOR ttImage SCROLLING.
     
    DEFINE BROWSE brImages
        QUERY brImages 
        DISPLAY ttImage.cImageName
        WITH NO-ROW-MARKERS SEPARATORS SIZE 50 BY 13.81 FIT-LAST-COLUMN.
     
    DEFINE FRAME DEFAULT-FRAME
        bAddImage AT ROW 1.48 COL 1.8
        brImages AT ROW 3.19 COL 1
        IMAGE-1 AT ROW 3.24 COL 52
        WITH 1 DOWN NO-BOX KEEP-TAB-ORDER OVERLAY 
             SIDE-LABELS NO-UNDERLINE THREE-D 
             AT COL 1 ROW 1
             SIZE 223.2 BY 32.67.
     
    CREATE WINDOW C-Win ASSIGN
        HIDDEN             = YES
        TITLE              = "Image"
        HEIGHT             = 32.67
        WIDTH              = 223.2
        MAX-HEIGHT         = 32.67
        MAX-WIDTH          = 223.2
        VIRTUAL-HEIGHT     = 32.67
        VIRTUAL-WIDTH      = 223.2
        RESIZE             = yes
        SCROLL-BARS        = no
        STATUS-AREA        = no
        BGCOLOR            = ?
        FGCOLOR            = ?
        KEEP-FRAME-Z-ORDER = yes
        THREE-D            = yes
        MESSAGE-AREA       = no
        SENSITIVE          = yes.
     
    ENABLE bAddImage brImages IMAGE-1 WITH FRAME DEFAULT-FRAME IN WINDOW C-Win.
     
    VIEW C-Win.
     
     
    ON VALUE-CHANGED OF brImages IN FRAME DEFAULT-FRAME
        DO:
            DEFINE VARIABLE cFile AS CHARACTER  NO-UNDO.
     
            ASSIGN cFile = SESSION:TEMP-DIRECTORY + ENTRY(NUM-ENTRIES(ttImage.cImageName, "\"),ttImage.cImageName, "\").
     
            FILE-INFO:FILE-NAME = ttImage.cImageName.
     
            COPY-LOB ttImage.bImage TO FILE cFile.
     
            IMAGE-1:LOAD-IMAGE(cFile).
     
            OS-DELETE cFile.
        END.
     
    ON CHOOSE OF bAddImage IN FRAME DEFAULT-FRAME /* Add Image */
        DO:
            DEFINE VARIABLE cFile  AS CHARACTER  NO-UNDO.
            DEFINE VARIABLE rRowid AS ROWID      NO-UNDO.
     
            SYSTEM-DIALOG GET-FILE cFile
                FILTERS "BMP" "*.bmp", "JPG" "*.jpg", "ALL" "*".
     
            CREATE ttImage.
            ASSIGN ttImage.cImageName = cFile
                   rRowid = ROWID(ttImage).
     
            COPY-LOB FROM FILE cFile TO ttImage.bImage.
     
            OPEN QUERY brImages FOR EACH ttImage NO-LOCK.
     
            brImages:QUERY:REPOSITION-TO-ROWID(rRowid).
     
            APPLY "VALUE-CHANGED":U TO brImages.
    END.
     
    WAIT-FOR CLOSE OF THIS-PROCEDURE.
    
    
  4. betopac

    betopac Sem Pontuação

    Valeu pela ajuda, o problema que estou trabalhando com progress 9, acredito então que a partir da versão 10 tenhamos tipo de dados BLOB disponível.

    [ ] s
  5. Rodrigo Rossetto

    Rodrigo Rossetto Membro Participativo

    O codigo é interessante, mas só faltou um exemplo da utilização do RAW.
    Geralmente é utilizado para transferir temp-tables e registros do banco de dados para programas externos (sub-programas).

Compartilhe esta Página