Forms em Excel 10g

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
tchuck
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 70
Registrado em: Seg, 04 Dez 2006 9:22 am
Localização: Maringá

Galera estou com um problema, preciso migrar o oracle 6 para o 10 g e o código estava assim..

Selecionar tudo

PACKAGE BODY PACK_EXCEL IS
    workbook   OLE2.OBJ_TYPE;        -- CHANGE
    worksheets OLE2.OBJ_TYPE;        -- CHANGE
    obj_hnd    OLE2.OBJ_TYPE;        /* store the object handle */
    app OLE2.OBJ_TYPE;

  
-- Captura celula desejada
--------------------------
FUNCTION NumToRange(r INTEGER, c INTEGER) RETURN VARCHAR2 IS
   rw     VARCHAR2(5);
   nm     INTEGER;
BEGIN
   nm := ASCII('A') - 1;
   rw := CHR(nm + c) || TO_CHAR(r);
   RETURN UPPER(rw);
END;
 
 
 -- Inicializa chamada excel
 ---------------------------
 FUNCTION get_object_handle RETURN OLE2.OBJ_TYPE IS
    args   OLE2.LIST_TYPE; -- CHANGE
 BEGIN
     /* If the server is not active, activate the server and get the object handle. */
       FORMS_OLE.ACTIVATE_SERVER('planilha');
       --workbook := FORMS_OLE.GET_INTERFACE_POINTER('planilha');     -- CHANGE
       app := OLE2.CREATE_OBJ('Excel.Application');
       worksheets := OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets'); -- CHANGE
       args := OLE2.CREATE_ARGLIST;                                 -- CHANGE  
       OLE2.ADD_ARG(args, 1);                                       -- CHANGE
       obj_hnd := OLE2.GET_OBJ_PROPERTY(worksheets, 'Item', args);  -- CHANGE
         
       RETURN obj_hnd;
END;


 -- Captura dados char do Excel
 ------------------------------
 FUNCTION getcharcell(trow NUMBER, col NUMBER) RETURN VARCHAR2 IS
    c      OLE2.OBJ_TYPE;
    d      OLE2.OBJ_TYPE;
    n      VARCHAR2(15);
    lst    OLE2.LIST_TYPE;
      
 BEGIN
    
    d := GET_OBJECT_HANDLE;
    lst := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(lst, NumToRange(trow, col));
    c := OLE2.GET_OBJ_PROPERTY(d, 'Range', lst); -- CHANGE
    n := OLE2.GET_CHAR_PROPERTY( c, 'Value');    -- GET_NUM_PROPERTY
     
    /* Destroy the argument list. */
    OLE2.DESTROY_ARGLIST(lst);
    OLE2.RELEASE_OBJ(c);
     
    RETURN n;

 EXCEPTION
    WHEN OTHERS THEN
         ALERTA1('Erro no getcharcell. Entre em contato com analista responsavel. '||SQLERRM);
 END;
   
 
 -- Captura dados numericos do excel
 -----------------------------------
 FUNCTION getnumcell(trow NUMBER, col NUMBER) RETURN NUMBER IS
    c      OLE2.OBJ_TYPE;
    d      OLE2.OBJ_TYPE;
    n      NUMBER;
    lst    OLE2.LIST_TYPE;
     
 BEGIN
    d := GET_OBJECT_HANDLE;
    lst := OLE2.CREATE_ARGLIST;
    OLE2.ADD_ARG(lst, NumToRange(trow, col));
    c := OLE2.GET_OBJ_PROPERTY(d, 'Range', lst); -- CHANGE
    n := OLE2.GET_NUM_PROPERTY( c, 'Value');  -- GET_NUM_PROPERTY
     
    /* Destroy the argument list. */
    OLE2.DESTROY_ARGLIST(lst);
    OLE2.RELEASE_OBJ(c);

         
    RETURN n;
        
 EXCEPTION
    WHEN OTHERS THEN
         ALERTA1('Erro no getnumcell. Entre em contato com analista responsavel. '||SQLERRM);
 END;


 Initialize_Container('PLANILHA',:PARAM.FILENAME);
Preciso alterar ele para Client_Ole2 mas esta dando erro no key execute qry error_value mas não foi alterado nada na key execute qry, pois fiz o teste no 6i e roda normal, tenho um bean area chamado planilha, alguém poderia dar alguma luz, mudei também o codigo para

Selecionar tudo

PACKAGE BODY PACK_EXCEL IS
    workbook   CLIENT_OLE2.OBJ_TYPE;        -- CHANGE
    worksheets CLIENT_OLE2.OBJ_TYPE;        -- CHANGE
    obj_hnd    CLIENT_OLE2.OBJ_TYPE;        /* store the object handle */
    app OLE2.OBJ_TYPE;

  
-- Captura celula desejada
--------------------------
FUNCTION NumToRange(r INTEGER, c INTEGER) RETURN VARCHAR2 IS
   rw     VARCHAR2(5);
   nm     INTEGER;
BEGIN
   nm := ASCII('A') - 1;
   rw := CHR(nm + c) || TO_CHAR(r);
   RETURN UPPER(rw);
END;
 
 
 -- Inicializa chamada excel
 ---------------------------
 FUNCTION get_object_handle RETURN CLIENT_OLE2.OBJ_TYPE IS
    args   CLIENT_OLE2.LIST_TYPE; -- CHANGE
 BEGIN
     /* If the server is not active, activate the server and get the object handle. */
    --IF NOT FORMS_OLE.SERVER_ACTIVE('planilha') THEN
       --FORMS_OLE.ACTIVATE_SERVER('planilha');
       --workbook := FORMS_OLE.GET_INTERFACE_POINTER('planilha');     -- CHANGE
       app := OLE2.CREATE_OBJ('Excel.Application');
       worksheets := CLIENT_OLE2.GET_OBJ_PROPERTY(workbook, 'Worksheets'); -- CHANGE
       args := CLIENT_OLE2.CREATE_ARGLIST;                                 -- CHANGE  
       CLIENT_OLE2.ADD_ARG(args, 1);                                       -- CHANGE
       obj_hnd := CLIENT_OLE2.GET_OBJ_PROPERTY(worksheets, 'Item', args);  -- CHANGE
         
       RETURN obj_hnd;
  --  END IF;
 END;


 -- Captura dados char do Excel
 ------------------------------
 FUNCTION getcharcell(trow NUMBER, col NUMBER) RETURN VARCHAR2 IS
    c      CLIENT_OLE2.OBJ_TYPE;
    d      CLIENT_OLE2.OBJ_TYPE;
    n      VARCHAR2(15);
    lst    CLIENT_OLE2.LIST_TYPE;
      
 BEGIN
    
    d := GET_OBJECT_HANDLE;
    lst := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG(lst, NumToRange(trow, col));
    c := CLIENT_OLE2.GET_OBJ_PROPERTY(d, 'Range', lst); -- CHANGE
    n := CLIENT_OLE2.GET_CHAR_PROPERTY( c, 'Value');    -- GET_NUM_PROPERTY
     
    /* Destroy the argument list. */
    CLIENT_OLE2.DESTROY_ARGLIST(lst);
    CLIENT_OLE2.RELEASE_OBJ(c);
     
    RETURN n;

 EXCEPTION
    WHEN OTHERS THEN
         ALERTA1('Erro no getcharcell. Entre em contato com analista responsavel. '||SQLERRM);
 END;
   
 
 -- Captura dados numericos do excel
 -----------------------------------
 FUNCTION getnumcell(trow NUMBER, col NUMBER) RETURN NUMBER IS
    c      CLIENT_OLE2.OBJ_TYPE;
    d      CLIENT_OLE2.OBJ_TYPE;
    n      NUMBER;
    lst    CLIENT_OLE2.LIST_TYPE;
     
 BEGIN
    d := GET_OBJECT_HANDLE;
    lst := CLIENT_OLE2.CREATE_ARGLIST;
    CLIENT_OLE2.ADD_ARG(lst, NumToRange(trow, col));
    c := CLIENT_OLE2.GET_OBJ_PROPERTY(d, 'Range', lst); -- CHANGE
    n := CLIENT_OLE2.GET_NUM_PROPERTY( c, 'Value');  -- GET_NUM_PROPERTY
     
    /* Destroy the argument list. */
    CLIENT_OLE2.DESTROY_ARGLIST(lst);
    CLIENT_OLE2.RELEASE_OBJ(c);

         
    RETURN n;
        
 EXCEPTION
    WHEN OTHERS THEN
         ALERTA1('Erro no getnumcell. Entre em contato com analista responsavel. '||SQLERRM);
 END;
mas ainda não funciona...
alguém sabe o q posso fazer?
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

E aí cara! beleza?

No 6 você está usando OLE2;
No 10 você precisa usar uma biblioteca que rode os eventos na máquina client.

Use o Webutils com Client_OLE2;
Avatar do usuário
Toad
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 253
Registrado em: Sex, 18 Nov 2005 2:14 pm
Localização: Seattle, WA
Contato:
Matheus Gonçalves
matheus.dev
twitter.com/developer__c

Nossa, ignora meu comentário.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 6 visitantes