Fórum Encerramento de conexao e Seleção de pasta, ambos no intraweb #8325
05/08/2009
Prezados,
Tenho uma aplicação intraweb rodando, com delphi 7 e intraweb 9.0.42. Estou precisando de resolver duas coisas, segue:
1a.) No formulario principal da aplicação existe um botão de saída (Sair), que ao ser clicado a aplicação é fechada (webapplication.terminate) e a conexão com o banco tambem, pois no evento onDestroy do usersession e feita a desconexão do banco (dmPrincipal.cnxPrincipal.Connected := False). Funciona perfeitamente. Mas quando o usuário fecha a aplicação fechando o browser, botão de sair do browser (xizinho do canto superior direito), a conexão fica presa, e ao entrar na aplicação novamente chamando o browser mais uma vez, as conexões vão se acumulando até estourar o numero máximo de conexões do banco.
Tentei de varias maneiras desconectar o banco, colocando o connected=false, em varios pontos e vi que quando o browser é fechado, pelo botão sair, não é feito nenhum evento da aplicação, por isto o insucesso da operação.
Podem me ajudar com isto ???
2a.) Preciso na minha aplicação importar alguns arquivos TXT's, e preciso que o usuario indique a pasta onde se encontra os arquivos, não encontrei nada que me permitisse mostrar uma interface para o usuario selecionar a pasta onde estão os arquivos para a aplicação fazer a importação dos, segue minhas tentativas frustadas:
A) Primeiro tentei com a função SelectDirectory, que funcionou muito bem para a seleção da pasta, mas ela aparece por traz do browser, e a aplicação web fica em espera pela escolha de uma pasta, e apos a pasta escolhida a aplicação web volta a ter continuidade, perfeito se a janela para a escolha do diretorio não apareceçe por traz do browser. Imagino eu que é porque é uma janela windows form.
B) Tentei usar o component IWFile que não é para isto, e sim para fazer upload de arquivos, mas como ele me dá uma opção de seleção de arquivo onde abre a estrutura de pastas e arquivos do sistema operacional, pensei eu obrigo o usuario a escolher um arquivo, mas apos a escolha, eu utilizo apenas o path, extraindo com a funcao extractfilepath, mas o problema que quando pego a propriedade filename do iwfile (iwfile1.filename) ele retorna apenas o nome do arquivo, e não o caminho completo.
O ideal era permitir apenas a escolha da pasta. Podem me ajudar com isto também ???
Aguardo um retorno,
Obrigado,
Fernando.
Posts
Senhor,
cada dúvida deve ser postado em um chamado diferente. Por favor, diga qual dúvida o senhor tratará no post.
10/08/2009
Supernova Ltda.
Ok. Me desculpem. Pode ser a primeira duvida, segue .......
1a.) No formulario principal da aplicação existe um botão de saída (Sair), que ao ser clicado a aplicação é fechada (webapplication.terminate) e a conexão com o banco tambem, pois no evento onDestroy do usersession e feita a desconexão do banco (dmPrincipal.cnxPrincipal.Connected := False). Funciona perfeitamente. Mas quando o usuário fecha a aplicação fechando o browser, botão de sair do browser (xizinho do canto superior direito), a conexão fica presa, e ao entrar na aplicação novamente chamando o browser mais uma vez, as conexões vão se acumulando até estourar o numero máximo de conexões do banco.
Tentei de varias maneiras desconectar o banco, colocando o connected=false, em varios pontos e vi que quando o browser é fechado, pelo botão sair, não é feito nenhum evento da aplicação, por isto o insucesso da operação.
Podem me ajudar com isto ???
10/08/2009
Rodrigo Mourão
Olá amigo,
A partir de agora eu estarei lhe auxiliando neste chamado. Estarei realizando uns teste e post em seguido.
Abs!!
14/08/2009
Rodrigo Mourão
Olá amigo, continuo testando uma aplicacao exemplo que criei para tentar resolver seu problema. Peço que aguarde um pouco.
Continuarei lhe mantendo informado.
Abs!!!
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
14/08/2009
Rodrigo Mourão
Olá,
Bem o bom profissional não é aquele que sabe tudo mas o que tem o email de quem sabe kkkkk. Eu realmente não sou especialista em IW pois tem muitos Bugs (Versões Antigas, não tenho feedback das novas), não ser escalável, entre outros problemas que tive. Com a chegada do Delphi .Net no D2005 ai mesmo que abandonei o IW.
Mas entrei em contato com o Guinther Pauli e outros amigos aqui da DevMedia para poder chegar a um concenso sober este detalhe e segue abaixo um parecer:
O IW no server não fica sabendo quando o
browser fecha, não é disparado um evento no servidor para isso. Esse na verdade
não é um problema do IW. Por isso, muitos sites, mesmo em outras linguagens,
oferecem a opção logout / sair, para fechar sessão, limpar cookies etc. Qdo eu
perguntei no suporte da atozed, o cara do team deles disse para eu colocar um
botão "Close" e fechar a sessão (-:
Então, vc tem que fazer no braço. Injetar um código JavaScript na
página para interceptar o Close (OnBeforeUnload), e dar um jeito de chamar um
método no servidor. Isso provavelmente vai funcionar, não é garantido. Nunca
fiz, mas sei que esse é o caminho. A solução poderia ser reduzir o TimeOut da sessão.
Enfim temos ai uma limitação da Web memso e não do IntraWeb.
Se eu puder ajudar em algo mais, esterei a disposição.
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
16/08/2009
Rodrigo Mourão
Olá, as dicas abaixo ajudaram ?
Há algo em que possa ajudar ainda ?
Abs !!
18/08/2009
Rodrigo Mourão
Olá,
Estaremos colocando o chamado como encerrado, porém caso haja alguma dúvida poderá reabrí-lo que voltaremos a auxiliá-lo.
Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi