Arquivo da categoria: Oracle Forms

Erro ao abrir arquivo no Oracle Forms 10g: Como abrir arquivos corrompidos.

Ao tentar abrir um formulário *.frm no Oracle Forms você é surpreendido com um crash e a IDE é finalizada? Talvez este artigo possa te ajudar.

O Crash que acontecia era o seguinte:


Oracle Forms Designer parou de funcionar

O Windows pode verificar online se há uma solução para o problema.

> Procurar solução online e fechar o programa
> Fechar o programa

Detalhes do Problema:


Assinatura do problema:

Nome do Evento de Problema: APPCRASH
Nome do Aplicativo: frmbld.exe
Versão do Aplicativo: 10.1.2.0
Carimbo de Data/Hora do Aplicativo: 42d63632
Nome do Módulo de Falhas: KERNELBASE.dll
Versão do Módulo de Falhas: 6.1.7601.18939
Carimbo de Data/Hora do Módulo de Falhas: 55afd8e7
Código de Exceção: ebad198c
Deslocamento de Exceção: 0000c42d
Versão do sistema operacional: 6.1.7601.2.1.0.256.48
Identificação da Localidade: 1046
Informações Adicionais 1: ed46
Informações Adicionais 2: ed46f63f23d625951c90d376a940d4c4
Informações Adicionais 3: e566
Informações Adicionais 4: e566c8bbd2220d9a66050aa95494b72e

Leia nossa declaração de privacidade online:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0416

Se a declaração de privacidade online não estiver disponível,
leia nossa declaração de privacidade offline:
C:Windowssystem32pt-BRerofflps.txt

Estávamos tendo o mesmo problema na empresa, até que um de nossos colegas percebeu que ao compilar (CTRL + SHIFT + K e CTRL + T) e depois salvar, o tamanho do arquivo aumentava muito, mesmo após adicionar poucas linhas de código.

A nossa conclusão é que ao compilar a IDE inclui alguma biblioteca 64 bits dentro do formulário, e ao tentar carregar este mesmo formulário na IDE (que é 32 bits) acaba gerando o erro.

A solução que encontramos para o problema foi: Depois de editar, salve o arquivo, mas nunca salve o arquivo após compilar. Assim o arquivo não será corrompido.

Caso já tenha corrompido um formulário, a forma que descobri para recuperar é a seguinte:

  • 1 – Abra uma cópia de um formulário que esteja funcionando;
  • 2 – Compile-o mas não salve – isso irá fazer com que a IDE carregue a biblioteca necessária para abrir o formulário corrompido;
  • 3 – Agora tente abrir o formulário corrompido.
  • 4 – Se funcionar, crie uma cópia do mesmo sem ter compilado.

Como fazer upload de arquivos no Oracle Forms 10g

Este código foi utilizado em um dos sistemas que criei. O arquivo é gravado no campo blob Arquivo, na tabela Arquivo.


PROCEDURE uploadArquivo IS

llng_idArquivo ARQUIVO.ID%TYPE;
lstr_caminhoArquivo VARCHAR2(4000);
lstr_nomeArquivo VARCHAR2(255);
lstr_extensaoArquivo VARCHAR2(4);

BEGIN

-- ----------------------------------------------------------------------------------------------------
-- Abre a caixa de dialogo para o usuário selecionar o arquivo que ele deseja enviar.
-- ----------------------------------------------------------------------------------------------------

lstr_caminhoArquivo := client_get_file_name(directory_name => 'C:',
file_name => NULL,
file_filter => 'ALL Files (*.*)|*.*|',
message => 'Escolha o arquivo',
dialog_type => OPEN_FILE,
select_file => NULL
);

-- ----------------------------------------------------------------------------------------------------
-- Sair caso nenhum arquivo tenha sido selecionado.
-- ----------------------------------------------------------------------------------------------------

IF lstr_caminhoArquivo IS NULL THEN
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Recebe o nome e a extensão do arquivo.
-- ----------------------------------------------------------------------------------------------------

lstr_nomeArquivo := substr(lstr_caminhoArquivo, instr(lstr_caminhoArquivo, WEBUTIL_FILE.Get_File_Separator, -1) + 1, 255);
lstr_extensaoArquivo := lower(substr(lstr_nomeArquivo, -4));

-- ----------------------------------------------------------------------------------------------------
-- Verifica se o nome do arquivo tem mais que 255 caracteres, pois não é possível fazer upload com nome
-- superior a este valor.
-- ----------------------------------------------------------------------------------------------------

IF LENGTH(lstr_nomeArquivo) > 255 THEN
alerta('Não é possível anexar arquivos com nomes maiores que 255 caracteres!');
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Bloqueia o envio de arquivos executáveis *.exe.
-- ----------------------------------------------------------------------------------------------------

IF lstr_extensaoArquivo = '.exe' THEN
alerta('Não é possível anexar arquivos executáveis!');
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Verifica qual será o ID do arquivo depois de feito seu upload.
-- ----------------------------------------------------------------------------------------------------

SELECT ARQUIVO_SEQ.NEXTVAL
INTO llng_idArquivo
FROM dual;

-- ----------------------------------------------------------------------------------------------------
-- Cria o registro no banco de dados para o arquivo, utilizando o ID obtido anteriormente. A função de
-- Upload exige que o registro já exista.
-- ----------------------------------------------------------------------------------------------------

INSERT INTO ARQUIVO (ID, NOME_MENSAGEM, NOME_ARQUIVO, ARQUIVO) VALUES (llng_idArquivo, :TRT_MENSAGENSDEEMAIL.NOME, lstr_nomeArquivo, EMPTY_BLOB());

-- ----------------------------------------------------------------------------------------------------
-- Realiza o envio do arquivo e o grava na tabela Arquivo, na coluna Arquivo que será um BLOB
-- ----------------------------------------------------------------------------------------------------

IF NOT webutil_file_transfer.Client_To_DB(clientFile => lstr_caminhoArquivo,
tableName => 'ARQUIVO',
columnName => 'ARQUIVO',
whereClause => 'ID = ' || TO_CHAR(llng_idArquivo),
asynchronous => FALSE,
callbackTrigger => NULL) THEN

alerta('Não foi possível enviar o arquivo!');
RETURN ;

END IF;

-- ----------------------------------------------------------------------------------------------------
-- Realiza o COMMIT no banco de dados e recarrega o formulário.
-- ----------------------------------------------------------------------------------------------------

do_key('commit_form');
execute_query;
alerta('Arquivo enviado com sucesso!');

EXCEPTION
WHEN OTHERS THEN

alerta('Ocorreu um erro desconhecido durante o processo de upload: ' || sqlerrm);

END;

Como descobrir qual o erro que está acontecendo dentro de um bloco de dados no Oracle Forms 10g

Adicione o código abaixo em um Trigger “ON-ERROR” no bloco de dados.


DECLARE

COD NUMBER := ERROR_CODE;
TEXTO VARCHAR2(2000) := ERROR_TEXT;
TIPO VARCHAR2(10) := ERROR_TYPE;
DBCOD NUMBER := DBMS_ERROR_CODE;
DBTEXTO VARCHAR2(2000) := DBMS_ERROR_TEXT;

BEGIN

Alerta(COD || '*' || TIPO || '*' || TEXTO);
Alerta(DBCOD || '#' || DBTEXTO);

END;

Problema ao instalar o Oracle Forms 10g no Windows 7

Ao instalar o Oracle Forms 10g em uma máquina com o sistema operacional Windows 7, a seguinte mensagem de erro aparece:

Usando paramFile: C:\Users\paulo.costa\Desktop\Ambiente de Desenvolvimento\Oracle Forms 10g\ds_windows_x86_101202_disk1\install\oraparam.ini
Verificando requisitos do Installer…
Verificando a versão do sistema operacional: deve ser 5.0, 5.1 or 5.2. Reais 6.1 Falha <<<<
Encerrando o Oracle Universal Installer; o log para esta sessão pode ser encontrado em C:\Users\PAULO~1.COS\AppData\Local\Temp\OraInstall2015-02-04_01-22-20PM\installActions2015-02-04_01-22-20PM.log

Pressione Enter para sair…

Para solucionar este problema, abra o Windows Explorer e clique com o botão direito sobre o item “Computador”, abrirá a página “Painel de Controle\Sistema e Segurança\Sistema”. Clique sobre a opção “Configurações avançadas do sistema”. Abrirá a janela “Propriedades do sistema”. Na aba “avançado” clique no botão “Configurações” de desempenho. Abrirá a janela “Opções de Desempenho”; selecione a aba “Avançado” e clique no botão “Alterar” memória virtual. Desmarque a opção “Gerenciar automaticamente o tamanho do arquivo de paginação de todas as unidades”. E em tamanho personalizado escolha 1024MB e 2048MB para o mínimo e máximo. Clique em OK para finalizar. O último passo é fazer com que a instalação seja executada no modo de compatibilidade do Windows XP: clique com o botão direito sobre o executável “setup.exe” e selecione prorpriedades. Na janela “Propriedades de setup” escolha a aba “Compatibilidade” e selecione “Executar este programa em modo de compatibilidade”: Windows XP (Service Pack 3). Para concluir reinicie o computador.

Inicie a instalação, e no momento que for questionado sobre o tipo de instalação, escolha o tipo “Concluído (1.14GB)”. Selecione as opções padrão e continue a instalação.

Para finalizar, não se esqueça de salvar o arquivo “TNSNAMES.ORA” atualizado na pasta “\DevSuiteHome_1\NETWORK\ADMIN”. Este arquivo informa ao Oracle Forms 10g quais os endereços dos servidores de banco de dados.

Como abrir uma página da web em um navegador, utilizando o Oracle Forms 6i

declare

ConvID PLS_INTEGER;
result  NUMBER;
aux_dir_iex  varchar2(200) := ‘P:Program FilesInternet Exploreriexplore.exe -k’;
aux_dir_url  varchar2(200) := ‘U:SIPProgramasdumpsAjuda_html’;
begin
— busca IE do Citrix:
   aux_dir_url   := ‘U:SIPProgramasdumpsAjuda_htmlindex.htm’;
   –aux_carta.dir_url   := aux_carta.dir_url||
   —
   — Abre a pagina de informações.
   —
   ConvID := DDE.App_begin(aux_dir_iex||’ ‘||aux_dir_url,DDE.App_Mode_Maximized);
   —

exception
   when form_trigger_failure then
        null;
   when others then
       — busca IE do C:
       begin
         aux_dir_iex   := ‘C:Arquivos de ProgramasInternet Exploreriexplore.exe -k’;
         ConvID := DDE.App_begin(aux_dir_iex||’ ‘||aux_dir_url,DDE.App_Mode_Maximized);
exception
   when others then
   null;
       end;
end;

Acessando uma URL com o Oracle Forms 6i

CREATE OR REPLACE PROCEDURE acessa_url (v_endereco IN VARCHAR2,
                                        v_pagina OUT VARCHAR2)
IS
  req   utl_http.req;
  resp  utl_http.resp;
  linha VARCHAR2(1024);
BEGIN
  utl_http.set_proxy(‘10.1.2.188:8080’);
  req := utl_http.begin_request(v_endereco);
  resp := utl_http.get_response(req);
  v_pagina := ”;
  LOOP
    utl_http.read_line(resp, linha, TRUE);
    v_pagina := v_pagina || linha;
  END LOOP;
  utl_http.end_response(resp);
EXCEPTION
  WHEN utl_http.end_of_body THEN
    utl_http.end_response(resp);
END;

FRM-18108: Falha na carga dos objetos a seguir…

Caso seja apresentado este problema, Abra o Oracle Forms e adicione (abrindo como se fosse um formulário qualquer) as bibliotecas que estão sendo exibidas no erro. Por exemplo:

– E:compila_10g_ergonclasses.olb
– E:compila_10g_ergonergon.olb
– E:compila_10g_ergonf10g.olb

Se o projeto ainda continuar exibindo a mesma mensagem FRM-18108, verifique se o atalho que está abrindo o Oracle Forms Builder está definido para iniciar na pasta onde estão as bibliotecas: E:compila_10g_ergon

Procedimento para executar depuração de formulários no Oracle Forms 6i

Para realizar a depuração (“debugar”) de um formulário em busca de erros, basta utilizar a ferramenta “Depurador de Forms” contido no pacote do Oracle Forms Builder 6i. Importante lembrar que o modo de depuração pode variar de acordo com a versão do Oracle Forms. Este procedimento é voltado para a versão 6i.

Inicie o Depurador de Forms, clicando no botão “Executar o Depurador de Forms” – presente na caixa de ferramentas do Oracle Forms Builder.

Executar_Depurador_Forms

A janela do depurador será exibida:

OracleForms6i_-_Depurador

No depurador você terá alguns nós:

  • Módulos: contendo informações sobre os formulários abertos, incluindo seus gatilhos, blocos, variáveis;
  • Variáveis globais;
  • Variáveis do sistema;
  • Parâmetros da Linha de Comandos;
  • Ações de Depuração;
  • Stack: exibe o valor das variáveis do escopo atual;
  • Objetos de Banco de Dados;

Dentro do item “Módulos”, selecione o gatilho ou procedimento que você deseja depurar. Após selecionar, dê um clique duplo sobre a linha que você deseja inserir um ponto de parada (Break Point);

OracleForms6i_-_Ponto_de_Parada

Agora é só clicar no “X vermelho na barra de ferramenta do depurador para que inicie a execução.

OracleForms6i_-_Depurador

Você pode navegar através do execução usando comandos como:

  • botao-01 “Entrar” – Executa a próxima linha, caso ela seja uma função o depurador iniciará a depuração do código da função;
  • botao-02 “Transpor” – Executa a próxima linha, caso ela seja uma função o depurador calcula o resultado não entrando no código desta;
  • botao-03 “Sair”;
  • botao-04 “Ir” – Executa o código até que encontre o próximo ponto de parada.

Como modificar propriedades de bloco de dados programaticamente no Oracle Forms 6i?

set_block_property(‘NOMEDOBLOCO’, DEFAULT_WHERE, ‘ID = :usuario.ID’);

Exemplos de propriedades que podem ser modificadas:

* DEFAULT_WHERE;
* ORDER_BY;
* ALL_RECORDS;
* BLOCKSCROLLBAR_POSITION;
* BLOCKSCROLLBAR_X_POS;
* BLOCKSCROLLBAR_Y_POS;
* COORDINATION_STATUS;
* CURRENT_RECORD_ATTRIBUTE;
* CURRENT_ROW_BACKGROUND_COLOR;
* CURRENT_ROW_FILL_PATTERN;
* CURRENT_ROW_FONT_NAME;
* CURRENT_ROW_FONT_SIZE;
* CURRENT_ROW_FONT_SPACING;
* CURRENT_ROW_FONT_STYLE;
* CURRENT_ROW_FONT_WEIGHT;
* CURRENT_ROW_FOREGROUND_COLOR;
* CURRENT_ROW_WHITE_ON_BLACK;
* DELETE_ALLOWED;
* DML_DATA_TARGET_NAME;
* ENFORCE_PRIMARY_KEY;
* INSERT_ALLOWED;
* KEY_MODE;
* LOCKING_MODE;
* MAX_QUERY_TIME;
* MAX_RECORDS_FETCHED;
* NAVIGATION_STYLE;
* NEXT_NAVIGATION_BLOCK;
* OPTIMIZER_HINT;
* PRECOMPUTE_SUMMARIES;
* PREVIOUS_NAVIGATION_BLOCK;
* QUERY_ALLOWED;
* QUERY_DATA_SOURCE_NAME;
* QUERY_HIT;
* UPDATE_ALLOWED;
* UPDATE_CHANGED_COLUMNS;
* etc.