Abertura/Escolha de arquivos pelo Forms

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
juliana
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Qui, 09 Set 2004 4:14 pm
Localização: Rio de Janeiro - RJ

Estou desenvolvendo um sistema e nele eu abro uma janela (estilo a do windows) para escolher um arquivo com o Get_file_name. O problema é que ele só me permite escolher um arquivo por vez e eu preciso que ele escolha vários. Alguém sabe como fazer isso??? Existe algum parâmetro específico?

Obrigada,
Juliana
Avatar do usuário
tfg
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 83
Registrado em: Seg, 03 Mai 2004 3:38 pm
Localização: Novo Hamburgo - RS

Oi Juliana

Eu não tenho certeza (estou sem o forms help aqui pra ver).
Mas eu acho que o máximo que você conesegue definir é escolher diretório OU arquivo com o get_file_name... Creio que não dá pra escolher vários arquivos... :-( Me avisem se eu estou enganado!

O que você pode fazer pra solucionar isso é fazer uma rotina manual. Algo assim:
* Crie um bloco e popule ele com todos arquivos do diretório que você quer.
* Crie um outro bloco vazio onde você colocará os arquivos "selecionados".
* Coloque um botão que MOVE o nome do arquivo pra esse outro bloco.

Assim o cara pode escolher os arquivos que ele quer e jogar ele pro lado (pro outro bloco). Dá um pouco de trabalho, mas funciona, heheheh

[]s
:-o
lodvini
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 16 Jun 2005 7:59 am
Localização: Sapiranga - RS

A minha dúvida é a seguinte: eu tenho um formulário que exporta alguns dados, para um aquivo .slk (abre no excel). Eu faço um get_file_name, mas o usuário pode digitar o diretório que ele quiser. Se ele digitar um diretório que não existir ocorre erro. Como eu faço para saber se o diretório que ele digitou existe?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Essa rotina abaixo abre uma janela pra escolher o diretório.
Também, pega cada arquivo TXT daquele diretório e lista num bloco!
Talvez ajude...

Selecionar tudo

declare 
	VDIR VARCHAR2(200);
	--
	hSearch PLS_INTEGER;
	vcFile  VARCHAR2(60);
	bIsDir  BOOLEAN;
	vcLDir  VARCHAR2(1);
	vcRDir  VARCHAR2(1);
begin
		:CONTROLE.LOCAL := get_file_name(:CONTROLE.LOCAL,NULL,NULL,'Selecione um Diretório',OPEN_FILE,FALSE); --||'\*.*'
	
	GO_BLOCK('LISTA_ARQS');
	CLEAR_BLOCK;
	hSearch := win_api_directory_list.FirstFile(:CONTROLE.LOCAL||'\EXP_*.TXT', vcFile, bIsDir, FALSE);
	IF vcFile IS NULL
	THEN RETURN;
	END IF;
	
	:CONTROLE.ARQ := IsDir(vcFile, bIsDir); 
	LOOP 
		win_api_directory_list.NextFile(hSearch, vcFile, bIsDir, FALSE);
		EXIT when vcFile is null;
	    CREATE_RECORD;
	    :LISTA_ARQS.ARQ := IsDir(vcFile, bIsDir); 
	end LOOP;
	
		GO_BLOCK('LISTA_ARQS');
	FIRST_RECORD;
	
	win_api_directory_list.CloseSearch(hSearch);
end;

Editado pela última vez por dr_gori em Sex, 19 Ago 2005 4:45 pm, em um total de 1 vez.
lodvini
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 16 Jun 2005 7:59 am
Localização: Sapiranga - RS

Obrigado pela ajuda. Mas é que eu fui ver somente agora :wink: e resolvi este problema de saber se o diretório informado pelo usuário existia ou não da seguinte forma(utilizei na when-validate-item):

Selecionar tudo

DECLARE
  V_DIR   VARCHAR2(100);
  V_OK    BOOLEAN;
BEGIN
  -- verifica se foi digitado algum diretório
  IF :CONTROLE.LOCAL IS NULL THEN
    MSG.PUSH('Necessário informar um diretório!', 'E', TRUE);
  END IF;

  IF SUBSTR(:CONTROLE.LOCAL, LENGTH(:CONTROLE.LOCAL), LENGTH(:CONTROLE.LOCAL)) <> '\' THEN
    V_DIR := :CONTROLE.LOCAL||'\';
  ELSE
    V_DIR := :CONTROLE.LOCAL;
  END IF;

  -- Cria um diretorio qualquer: se criar, o diretório informado
  -- existe, caso contrário não
  BEGIN
  	WIN_API_UTILITY.CREATE_DIRECTORY(V_DIR||'_TESTE_\', TRUE);
  	
  	V_OK := TRUE;
    -- apaga o diretório teste 	
   	WIN_API_UTILITY.DELETE_DIRECTORY(V_DIR||'_TESTE_\');

  EXCEPTION
    WHEN OTHERS THEN
      V_OK := FALSE;
  END;
  
  IF NOT V_OK THEN
  	MSG.PUSH('Diretório inexistente!', 'E', TRUE);
  END IF;
END;

Este código acima cria um diretório qualquer e depois apaga. O interessante é que se ele criar é porque o diretório informado existe e prossegue. Caso não exista ele da um raise (deve estar como TRUE para dar raise exception).

Qualquer dúvida, sugestão, correção ... etc...... serão bem vindas.


Atenciosamente,
Vinícius Benetti
Avatar do usuário
alef
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 119
Registrado em: Ter, 06 Nov 2007 2:45 pm
Localização: Patos de Minas - MG
Alexandre Matos
Patos de Minas - MG
Do interior de Minas para o resto do Mundo

olá! qual a versão do forms que vocês usaram ai? 6i ou 9i?
Responder
  • Informação
  • Quem está online

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