Abrir arquivo para importação

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Bom Dia
Tenho uma tela para importação.
Meu Botão de Abrir o arquivo porém, Não está conseguindo achar meu formato txt. Já coloquei o para achar arquivos txt. E não vai.

Selecionar tudo

 select ds_path_arquivo,cd_tipo_arq_env into V_PATH,V_TIPO_ARQ
		from path_impotacao
		where cd_estado = 1 --:id_pessoajuridica
		and cd_setor = (select CD_SETOR_financeiro from parametros_finan)
		and ds_integracao='FINANCEIRO';
		
  :ds_arquivo := GET_FILE_NAME(V_PATH,null,File_Filter=> ''||v_tipo_arq||' (*.'||v_tipo_arq||')|*.'||v_tipo_arq||'|');
o QUE PODE ESTÁ ACONTECENDO?

DESDE JÁ AGRADEÇO
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

ok, RESOLVI. ERA SOMENTE UM PONTO QUE ESTA DANDO PROBLEMA.
alguém SABE COMO FAZ, NA IMPORTAÇÃO PARA EXTRAIR ARQUIVOS COMPACTADO?
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

pode dar um HOST, chamando algum utilizaria pra descompactar...

pesquise por unzip line command,

já usei o 7zip...
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Brigada Diego.
Vou fazer isso.
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

BOm Dia Diego

Olha Só estou com uma dúvida grande.
Preciso que na minha importação, ele ignore a primeira linha.
Somente começa importar da segunda e somente a primeira e a segunda coluna para atualizar no banco.
Como eu poderia fazer isso. Num fiz importação.

Fiz algo assim, fazendo pesquisas. Porem, da como importação Concluida, mais não faz update da tabela que pedi

Selecionar tudo

  arq := text_io.fopen(:ds_arquivo,'r');
  begin
    loop
    	 text_io.get_line(arq,linha);
    	 cont := cont + 1;
    	if cont > 1 then 
		      j := 1;
			    for i in 1 .. 10 loop
			      pos := instr(linha, ';', j);
			      m_campo := substr(linha, j, pos - j);
			      j := pos + 1;
			      if i = 2 then
			      	m_ok := substr(m_campo, 1,  length(m_campo));
			      elsif i = 4 then
			      	m_cd_red := substr(m_campo, 1, 10);
			        m_cd_pf := substr(m_campo, 11, 2);
			       end if;
			    
	  
		end loop;
    	end if;
    	if cont > 0 then
    		update pessoafisica
    		set cd_red= m_cd_red
    		where cd_pessoafisica = m_cd_pf;
    	else
    		controle_de_msg('NOT','ERRO NA IMPORTAÇÃO');
    		END IF;
    	
   end loop;
Obrigada
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

passa um exemplo do seu arquivo texto,

parece meio feio esse codigo, no forum tem varios exemplos de leitura, tratamento de exceptions, você validar se deu erro pelo contador = 0.. sei não hein...

poem um arquivo como exemplo pra gente analisar... e sugerir,
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Bom dia priajf e demais membros do fórum,

Baseado na sua rotina, vemos que tem um update, e tecnicamente não vi motivos para o mesmo não ser excecutado, exceto erro de dados, um sql%notfound por exemplo, que não é tido como erro de aplicação.

Porém não vi nenhum commit tambem... chutando, o que pode estar acontecendo é você alterar os registros e estas alterações não serem salvas...

Isto é apenas uma das possibilidades...
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Na Hora da importação. QUando preciso abrir um arquivo ZIP. COmo poderia fazer, No começo me pediram para pesquisar sobre unzip line command. Porém não consegui nada que me ajudasse...
AI será que isso que está influenciando na hora de importar.
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Aqui na empresa temos uma rotina assim:

Selecionar tudo

Procedure exec_gera_arquivo_coletor Is
  --
  v_alert alert;
  v_opcao Number;
  --
  v_tipo_so   Varchar2(100) := get_application_property(operating_system);
  v_comando   Varchar2(2000);
  v_nome_arq  Varchar2(100);
  v_mensagem  Varchar2(2000);
  v_dir_saida Varchar2(4000) := '';
  v_dir_bkp   Varchar2(4000) := '';
  v_dir_tmp   Varchar2(4000) := 'coletor';
  --
  Procedure executarcomando(cmd Varchar2, ignorarerro Boolean Default False) Is
  Begin
    host(cmd);
    If Not form_success
       And Not ignorarerro Then
      sesi_msg('Erro ao executar o comando: ' || cmd, 'E', False);
      Raise form_trigger_failure;
    End If;
  End;
  --
Begin
  --
  -- Busca dados dos parametros
  v_dir_saida := srs_busca_comando_fnc('PAT_SD_COL', 'PAT');
  v_dir_bkp   := srs_busca_comando_fnc('PAT_BK_COL', 'PAT');
  v_dir_tmp   := Trim(v_dir_saida) || Trim(v_dir_tmp);
  --
  -- Testa se é WEB
  If upper(v_tipo_so) Like 'WIN%' Then
    sesi_msg('Módulo disponivel apenas para WEB', 'E', True);
  End If;
  --
  --Gera um sub-diretório para guardar os arquivos temporários
  executarcomando('mkdir -p ' || v_dir_tmp);
  --
  --Se por acaso o diretório por algum erro contiver arquivos então
  --apaga todo o conteúdo do diretório temporário
  executarcomando('rm -f ' || v_dir_tmp || '/*.*');

  --Altera o cursor para uma ampulheta
  set_application_property(cursor_style, 'BUSY');

  --Gera os arquivos para carregar o coletor e coloca no
  --diretório temporário
  v_mensagem := exec_gera_registros_inventario(p_gps_codigo      => :gps_codigo,
                                               p_cat_codigo      => :cat_codigo,
                                               p_cct_codigo      => :cct_codigo,
                                               p_los_codigo      => :los_codigo,
                                               p_str_codigo      => :str_codigo,
                                               p_complemento     => :complemento,
                                               p_dir             => v_dir_saida,
                                               p_dir_tmp         => v_dir_tmp,
                                               p_tipo_inventario => :tipo_inventario,
                                               p_quebrar_ccusto  => :quebrar_ccusto,
                                               p_e_dr            => :e_dr);

  exec_sleep(999999);
  
  If v_mensagem != 'ZERO' Then
    --Gera o nome do arquivo zip usando
    v_nome_arq := 'Pat' || to_char(Sysdate, 'yyyymmddhh24miss') || '.zip';

    --Compacta os arquivos
    executarcomando('zip -lj ' || v_dir_tmp || '/' || v_nome_arq || ' ' ||
                    v_dir_tmp || '/*.*');

    --Baixar arquivo Zip do serividor
    v_comando := srs_busca_comando_fnc('DW_PAT_COL', 'PAT');
    web.show_document(v_comando || v_dir_tmp || '/' || v_nome_arq, '_blank');

    --Mensagem para o usuário
    sesi_msg(v_mensagem, 'I', False);

    --Move o arquivo zip para o diretório de backup
    executarcomando('mv ' || v_dir_tmp || '/' || v_nome_arq || ' ' ||v_dir_bkp);

    --Remove os arquivos do diretório temporário
    executarcomando('rm -f ' || v_dir_tmp || '/*.*');

    --Remove o diretório temporário
    executarcomando('rmdir ' || v_dir_tmp);
    --
  Else
    --Mensagem para o usuário
    sesi_msg('Não foram gerados dados para o arquivo.', 'I', False);
  End IF;
  --Salvar os dados
  :system.message_level := 10;
  Commit;
  :system.message_level := 0;
  --  
  :p_dados_gerados := 'S';
  --
  set_application_property(cursor_style, 'DEFAULT');
Exception
  When Others Then
    set_application_property(cursor_style, 'DEFAULT');
    sesi_msg('Ocorreu um erro ao processar os registros.' || chr(10) ||Sqlerrm,'E',False);
  
End;
Esta rotina gera um arquivo e o zipa então questiona ao usuário onde ele deseja salvar o arquivo.

Selecionar tudo

 executarcomando('zip -lj ' || v_dir_tmp || '/' || v_nome_arq || ' ' ||v_dir_tmp || '/*.*');
"Possivelmente" o comando para unzip deve ser "unzip"+ algum complemento
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

burga,

não sabia que dava pra fazer zip direto, (deve ser a pasta compactada do windows mesmo) = zip

interessante...

Selecionar tudo

D:\Documents and Settings\t_delenhardt>unzip
UnZip 5.32 of 3 November 1997, by Info-ZIP.  Maintained by Greg Roelofs.  Send
bug reports to the authors at Zip-Bugs@lists.wku.edu; see README for details.

Usage: unzip [-Z] [-opts[modifiers]] file[.zip] [list] [-x xlist] [-d exdir]
  Default action is to extract files in list, except those in xlist, to exdir;
  file[.zip] may be a wildcard.  -Z => ZipInfo mode ("unzip -Z" for usage).

  -p  extract files to pipe, no messages     -l  list files (short format)
  -f  freshen existing files, create none    -t  test compressed archive data
  -u  update files, create if necessary      -z  display archive comment
  -x  exclude files that follow (in xlist)   -d  extract files into exdir

modifiers:                                   -q  quiet mode (-qualquer => quieter)
  -n  never overwrite existing files         -a  auto-convert any text files
  -o  overwrite files WITHOUT prompting      -aa treat ALL files as text
  -j  junk paths (do not make directories)   -v  be verbose/print version info
  -C  match filenames case-insensitively     -L  make (some) names lowercase
  -$  label removables (-$$ => fixed disks)  -V  retain VMS version numbers
  -X  restore ACLs (-XX => use privileges)   -s  spaces in filenames => '_'
                                             -M  pipe through "more" pager
Examples (see unzip.doc for more info):
  unzip data1 -x joe   => extract all files except joe from zipfile data1.zip
  unzip -fo foo ReadMe => quietly replace existing ReadMe if archive file newer

D:\Documents and Settings\t_delenhardt>

para ser somente unzip arquivo.zip
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

eu não sou o burga =/

é só uma citaão na minha sign... que não da pra muda por problemas no forum...
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Obrigada Pessoal
Vou fazendo aqui, e qualquer coisa posto mais alguma coisa pra vocês. Brigadão
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Olá

o Diego falo algo sobre HOST
como eu usaria essa HOST?
Tens algum exemplo.
Ta dificil a coisa aqui. Quero mesmo, só abrir o arquivo zip e pegar o arquivo txt que possui dentro dele.
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

usa algo mais ou menos assim:

Selecionar tudo

HOST('unzip -z c:\caminho_do_arquivo\nome_arquiv.zip');
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Olá Gente, não querendo ser chata, mais já sendo. Isso ta meio complicado.
Conseguir fazer algo aqui, porem não abre o arquivo zip, somente csv. Se eu utilizar o HOST, também não funciono.
ele não chega a essa ponto aqui, quando clico em importar

Selecionar tudo

text_io.get_line(arq,linha);
Alguma luz
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Enquanto tu não conseguir montar uma estrutura que funcione o unzio você não conseguira abrir o arquivo, então logo nunca chegara nesta linha.

Nos poste como você esta tentando desfazer o zip e depois abrir o arquivo, não nos oculte nenhum comando ou caminho especificado.
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Selecionar tudo

	  select ds_path_arquivo into V_PATH
		from path_integracao
		where cd_cidade = 1 
		and cd_setor = :parameter.cd_setor
		and ds_integracao='CODIGO';
		


 :ds_arquivo := GET_FILE_NAME('Z:\pre-producao\integracao\','%.zip',File_Filter => '.zip%');

EXCEPTION
	WHEN NO_DATA_FOUND THEN
	  CONTROLE_DE_MSG('ERR','Dados da Integração não cadastrados!');
ESSE CODIGO

Selecionar tudo


 :ds_arquivo := GET_FILE_NAME('Z:\pre-producao\integracao\','%.zip',File_Filter => '.zip%');
FIZ AGORA, ATÉ DEU CERTO, EM CERTAS PARTES. QUANDO VOU IMPORTAR, DA O ERRO QUE PEDI, QUANDO O CODIGO, DENTRO DA PASTA FOR NULLO.
MAIS SE ABRO ELE EM CSV IMPORTA TRANQUILO
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Conseguiu implementar o unzip?

Como? Não vejo o comando na sua demo...
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Olha como eu fiz

Selecionar tudo

 :ds_arquivo := GET_FILE_NAME('Z:\pre-producao\integracao\arquivo.zip',null,File_Filter => '.zip%')
Fui direto na pasta. porque no windows se você entra no zip, clicando não precisa extrair para ver. nem de uma programa.
ai fiz isso deu certo.
Porém, os arquivos sempre vão ter nomes diferentes. Pois são arquivo exportados de outro lugar.
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Ola gfkauer

Fiz algo agora, que chega abrir o arquivo, porém da o erro ora-302000.
Sabe me dizer o que pode ser?
priajf
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 297
Registrado em: Ter, 21 Dez 2010 8:45 am
Localização: Florianopolis
Priscila Fernandes

Esquece o post anterior.
TO rodando, rodando e não chego a lugar nenhum
QUando vou procurar, a pasta, clico com o botão direito em cima do arquivo.zip e depois clico em abrir. AI sim, consigo entrar na pasta zipada. Não tem como fazer isso direito, sem precisar no clique direito???

Alguma dica?? Uma luz???
gfkauer
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 389
Registrado em: Ter, 27 Jul 2010 1:34 pm
Localização: Sapiranga - RS
Contato:
Quem falou que programar era fácil??

Quanto mais dificil for a implementação mais valorizado seu trabalho será!

Acessem: www.gfkauer.com.br

Você precisa desfazer o zip do arquivo.
O Windows te da ferramentas para acessar sem dezipas, mas o forms não reconhece isto.

-Você precisa, obrigatoriamente, ter o nome e caminho completo do arquivo
-Você deve usar o comando Host('Unzip -z caminho/arquivo')

Ai sim você pode processar o documento.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Majestic-12 [Bot] e 17 visitantes