Arquivo da categoria: Oracle Forms 10g

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 download de arquivos armazenados no banco de dados utilizando o Oracle Forms 10g

O arquivo está armazenado em um campo BLOB no banco de dados.


PROCEDURE DOWNLOAD_ARQUIVO IS

lstr_nomeArquivo VARCHAR2(4000);

BEGIN

IF :ARQUIVO.ID IS NULL THEN
alerta('Selecione o arquivo!');
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Abre a caixa de dialogo para o usuário escolher o nome e local onde o arquivo será armazenado
-- ----------------------------------------------------------------------------------------------------

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


-- ----------------------------------------------------------------------------------------------------
-- Sai caso o usuário não tenha selecionado local e nome do arquivo.
-- ----------------------------------------------------------------------------------------------------

IF lstr_nomeArquivo IS NULL THEN
RETURN ;
END IF;

-- ----------------------------------------------------------------------------------------------------
-- Coleta o arquivo do banco de dados e transfere para a máquina do usuário.
-- ----------------------------------------------------------------------------------------------------

IF NOT webutil_file_transfer.DB_To_Client(clientFile => lstr_nomeArquivo,
tableName => 'ARQUIVO',
columnName => 'ARQUIVO',
whereClause => 'ID = ' || TO_CHAR(:ARQUIVO.ID)
) THEN

alerta('Ocorreu um erro durante o download!');
RETURN ;

END IF;

alerta('O download foi efetuado com sucesso!');

EXCEPTION
WHEN OTHERS THEN
alerta('Ocorreu um erro durante o processo: ' || sqlerrm);

END;

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;

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

Como forçar apenas letras maiúsculas em um campo texto no Oracle Forms

É possível utilizar a função UPPER do PL/SQL, mas o método mais correto é através da interface atribuindo o valor: “Superior” ao atributo “Restrição a Maiúsculas/Minúsculas”. Caso deseje apenas letras minúsculas, atribua o valor “Inferior”. Importante lembrar que o valor padrão é o “Misto” que fará o campo texto escrever minúsculas e maiúsculas