dilema de imagens no banco
Prezados colegas:
Fazendo várias pesquisas na net, vi que o pessoal prefere armazenar o caminho de uma imagem no Banco e a imagem, propriamente dita, gravada numa pasta.
Sendo assim, vem então um dilema:
Se estou num formulário com várias imagens listadas do banco, ao clicar no botão de excluir, dou um delete no banco e apago a imagem. Mas e se o usuário abortar o procedimento?
O rollback é dado no Banco de dados, mas a imagem, já foi pro saco.
O mesmo se dá ao adicionar novas imagens. Se abortado, a inserção no Banco é cancelada, porém a imagem fica na pasta perdida, sem registro no BD.
Alguém tem alguma idéia de como contornar isso?
Valeu.
Fazendo várias pesquisas na net, vi que o pessoal prefere armazenar o caminho de uma imagem no Banco e a imagem, propriamente dita, gravada numa pasta.
Sendo assim, vem então um dilema:
Se estou num formulário com várias imagens listadas do banco, ao clicar no botão de excluir, dou um delete no banco e apago a imagem. Mas e se o usuário abortar o procedimento?
O rollback é dado no Banco de dados, mas a imagem, já foi pro saco.
O mesmo se dá ao adicionar novas imagens. Se abortado, a inserção no Banco é cancelada, porém a imagem fica na pasta perdida, sem registro no BD.
Alguém tem alguma idéia de como contornar isso?
Valeu.
Daniel Bressanin
Curtidas 0
Respostas
Joel Rodrigues
04/04/2012
Cara, em que eventos, por exemplo, você pretende salvar e apagar a imagem? E como assim abortar? Você só deve executar a ação com a imagem após o registro ser gravado no banco ou removido dele.
GOSTEI 0
Daniel Bressanin
04/04/2012
Pois é. No formulário de cadastro dessas imagens tenho um botão de incluir e excluir imagens. São nestes eventos que faço a operação.
Essa tabela de imagens é uma tabela filho. Preciso usar transação e dar possibilidade de Rollback. A idéia de executar a ação com a imagens depois do applyupdates me complica. No formulário em questão tenho mais 4 tabelas filho.
Essa tabela de imagens é uma tabela filho. Preciso usar transação e dar possibilidade de Rollback. A idéia de executar a ação com a imagens depois do applyupdates me complica. No formulário em questão tenho mais 4 tabelas filho.
GOSTEI 0
Juliano Santana
04/04/2012
Olá Daniel,
Cara eu particularmente concordo com o Joel. A operação de deletar o arquivo da imagem só deveria ser feito depois da confirmacao de exclusao do registro no banco. Se o cara deletou e se arrependeu, vai ter que recadastrar novamente, mas... se esta realmente seria uma situacao necessária pra voce eu faria o seguinte:
- Criaria uma tabela de log das atividades de incluir e deletar que foram realizadas no decorrer do dia
- Criaria uma thread que seria executada uma vez por dia, digamos no final do dia. a qual iria tipo commit as tranzacoes do dia... por exemplo: o usuario deleta um registro do banco de dados como voce falou. O registro é passado para um status tipo pendente para excluir, daí ele desaparece da tabela do usuario mas nao oficialmente do banco. Se ele decidir fazer um rollback, o sistema simplesmente reativa o registro, caso contrario, no final do dia, quando a thread for executada, estes registros serao deletados definitivamente.
Esta seria uma situacao um tanto grotesca mas que diante de sua necessidade, acho que ajudariam.
espero que ter ajudado
Cara eu particularmente concordo com o Joel. A operação de deletar o arquivo da imagem só deveria ser feito depois da confirmacao de exclusao do registro no banco. Se o cara deletou e se arrependeu, vai ter que recadastrar novamente, mas... se esta realmente seria uma situacao necessária pra voce eu faria o seguinte:
- Criaria uma tabela de log das atividades de incluir e deletar que foram realizadas no decorrer do dia
- Criaria uma thread que seria executada uma vez por dia, digamos no final do dia. a qual iria tipo commit as tranzacoes do dia... por exemplo: o usuario deleta um registro do banco de dados como voce falou. O registro é passado para um status tipo pendente para excluir, daí ele desaparece da tabela do usuario mas nao oficialmente do banco. Se ele decidir fazer um rollback, o sistema simplesmente reativa o registro, caso contrario, no final do dia, quando a thread for executada, estes registros serao deletados definitivamente.
Esta seria uma situacao um tanto grotesca mas que diante de sua necessidade, acho que ajudariam.
espero que ter ajudado
GOSTEI 0