Ir para conteúdo
Fórum Script Brasil
  • 0

Executar código apenas se não houver erro


ViaPocket

Pergunta

Pelo que sei a forma de tratar erro no ASP é com On Error Resume Next.

No meu caso tenho que rodar quatro instruções SQL para deletar registros no banco.

Porém, preciso que a exclusão dos dados só seja feita se não ocorrer nenhum erro nas quatro consultas.

Meu código está assim

<%

On Error Resume Next

'Aqui vai meu código, são quatro instruções sql para deletar...

'Abaixo segue o tratamento de erro.

If Err.Number <>0 Then...

On error Goto 0

%>

Desta forma, se houver erro, por exemplo, na terceira instrução SQL a primeira e a segunda serão executadas. Isso vai gerar inconsistência no banco de dados.

Preciso algo do tipo "deleta tudo" ou "não deleta nada". Senão o banco vai ficar sujo.

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Pelo que sei a forma de tratar erro no ASP é com On Error Resume Next.

No meu caso tenho que rodar quatro instruções SQL para deletar registros no banco.

Porém, preciso que a exclusão dos dados só seja feita se não ocorrer nenhum erro nas quatro consultas.

Meu código está assim

<%

On Error Resume Next

'Aqui vai meu código, são quatro instruções sql para deletar...

'Abaixo segue o tratamento de erro.

If Err.Number <>0 Then...

On error Goto 0

%>

Desta forma, se houver erro, por exemplo, na terceira instrução SQL a primeira e a segunda serão executadas. Isso vai gerar inconsistência no banco de dados.

Preciso algo do tipo "deleta tudo" ou "não deleta nada". Senão o banco vai ficar sujo.

me diz uma coisa, o nome dos dados a serem apagados e suas correspondentes tabelas e outra duvida o numero ID dos itens e o mesmo?

Link para o comentário
Compartilhar em outros sites

  • 0

Em meu projeto tenho uma tabela que registra eventos (entidade forte). Para cada evento posso ter:

1) Itens compartilhados - Um evento pode ser compartilhado com vários usuários.

2) Item marcado como favorito. Cada evento pode estar marcado como favorito numa tabela para esta finalidade.

3) Itens de data. Tenho uma tabela que guardo datas. Cada evento tem várias datas.

4) Participantes do evento.

Ah...e por último o próprio evento. Ops...na verdade são cinco SQL hehehe

Então se uma das instruções falhar meu banco ficará sujo. Não posso ter, por exemplo, um evento compartilhado que não existe na tab EVENTOS, nem um favorito que não existe em EVENTOS e assim por diante.

Todas estas tabelas/entidades fracas armazenam o ID do evento, é isso que cria o vínculo.

Vale dizer que a permissão para exclusão é controlada. O evento (e seus itens relacionados) só pode ser excluído se seu status estiver como Ativo. Uma vez finalizado o evento não poderá sem removido em hipótese alguma.

Link para o comentário
Compartilhar em outros sites

  • 0
Em meu projeto tenho uma tabela que registra eventos (entidade forte). Para cada evento posso ter:

1) Itens compartilhados - Um evento pode ser compartilhado com vários usuários.

2) Item marcado como favorito. Cada evento pode estar marcado como favorito numa tabela para esta finalidade.

3) Itens de data. Tenho uma tabela que guardo datas. Cada evento tem várias datas.

4) Participantes do evento.

Ah...e por último o próprio evento. Ops...na verdade são cinco SQL hehehe

Então se uma das instruções falhar meu banco ficará sujo. Não posso ter, por exemplo, um evento compartilhado que não existe na tab EVENTOS, nem um favorito que não existe em EVENTOS e assim por diante.

Todas estas tabelas/entidades fracas armazenam o ID do evento, é isso que cria o vínculo.

Vale dizer que a permissão para exclusão é controlada. O evento (e seus itens relacionados) só pode ser excluído se seu status estiver como Ativo. Uma vez finalizado o evento não poderá sem removido em hipótese alguma.

então facil.. so mandar deletar em todas as tabelas pelo ID, sem erro isso..

Link para o comentário
Compartilhar em outros sites

  • 0

Bareta, havia pensado nesta possibilidade. Mas abri mão deste recurso pensando na possibilidade um dia precisar trocar de banco.

A menos que eu esteja enganando, há bancos que não oferecem este recurso. Por exemplo o MySQL. É isso?

No começo havia várias relacionamentos de tabelas. Mas depois que soube disso deixei de criá-los.

De todo modo agradeço a sugestão.

Olá 1980coelho.

A ideia é esta. Fazer o delete tendo como parâmetro o ID do Evento que está nas tabelas relacionadas ao evento.

Mas preciso aplicar este tratamento de erro para me assegurar. Programação é uma caixinha de surpresas heheh...quando a gente

menos espera pode ocorrer um erro que não havíamos pensado. Ai lascou hehe.

Se eu conseguir criar este tratamento nunca vou precisar esquentar a cabeça com a consistência dos dados porque a exclusão sempre ocorrerá em todas as tabelas. E se houver erro não ocorrerá em nenhuma tabela.

Bom, vou quebrando a cabeça aqui. Se tiver alguma sugestão pode falar.

valeu.

Link para o comentário
Compartilhar em outros sites

  • 0
Bareta, havia pensado nesta possibilidade. Mas abri mão deste recurso pensando na possibilidade um dia precisar trocar de banco.

A menos que eu esteja enganando, há bancos que não oferecem este recurso. Por exemplo o MySQL. É isso?

No começo havia várias relacionamentos de tabelas. Mas depois que soube disso deixei de criá-los.

De todo modo agradeço a sugestão.

Então... na verdade o mysql suporta sim, mais tu tem usar INNODB em vez de MYISAM

Documentação constraints do mysql: http://dev.mysql.com/doc/refman/5.6/en/inn...onstraints.html

Link para o comentário
Compartilhar em outros sites

  • 0
Bareta, havia pensado nesta possibilidade. Mas abri mão deste recurso pensando na possibilidade um dia precisar trocar de banco.

A menos que eu esteja enganando, há bancos que não oferecem este recurso. Por exemplo o MySQL. É isso?

No começo havia várias relacionamentos de tabelas. Mas depois que soube disso deixei de criá-los.

De todo modo agradeço a sugestão.

Então... na verdade o mysql suporta sim, mais tu tem usar INNODB em vez de MYISAM

Documentação constraints do mysql: http://dev.mysql.com/doc/refman/5.6/en/inn...onstraints.html

Hmm...muito bom saber disso. Então problema resolvido. Agora vou criar relacionamento entre as tabs para rolar o delete em cascata.

Aproveitando a deixa. Sabe dizer quais outros bancos (entre os mais utilizados), além do SQL e MySQL suportam relacionamentos?

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

  • 0
Bareta, havia pensado nesta possibilidade. Mas abri mão deste recurso pensando na possibilidade um dia precisar trocar de banco.

A menos que eu esteja enganando, há bancos que não oferecem este recurso. Por exemplo o MySQL. É isso?

No começo havia várias relacionamentos de tabelas. Mas depois que soube disso deixei de criá-los.

De todo modo agradeço a sugestão.

Então... na verdade o mysql suporta sim, mais tu tem usar INNODB em vez de MYISAM

Documentação constraints do mysql: http://dev.mysql.com/doc/refman/5.6/en/inn...onstraints.html

Hmm...muito bom saber disso. Então problema resolvido. Agora vou criar relacionamento entre as tabs para rolar o delete em cascata.

Aproveitando a deixa. Sabe dizer quais outros bancos (entre os mais utilizados), além do SQL e MySQL suportam relacionamentos?

posta ae como resolveu.. quero entender como deletar varias entradas e retornar a msg se tiver erro..

abraco..

Link para o comentário
Compartilhar em outros sites

  • 0

Olá 1980coelho. Cara, quando se cria o relacionamentos entre as tab a vida muda...as coisas ficam mais fáceis heheh

O ASP ficaria assim

<%

On Error Resume Next 'Esta linha é para interceptar erros

id = TrataString(Request.Form("id")) 'Recupero o parâmetro

'Rodo apenas um DELETE na tabela principal, no meu casp a tabela EVENTO.

'Como ele está relacionada pelo ID com outras quatro tabelas o próprio banco de dados

'se encarregará de excluir as linhas que tiverem o ID capturado acima

sqlDelEvento = "DELETE FROM EVENTO WHERE EVENTO.EventoID='"& var_id &"'"

MM_conexao_STRING.Execute(sqlDelEvento)

'Agora vem um tratamento de erro (algo bem simples).

Dim caminho , nomepagina, caminhofisico

If Err.Number <>0 Then

caminho = Request.ServerVariables("SCRIPT_NAME")

For i = 1 to len(caminho)

if inStr(1,right(caminho,i),"../") = 0 then

nomepagina = (right(caminho,i))

else

exit for

end if

next

caminhofisico= Server.MapPath("/")

Response.Cookies("erro").item("pagina") = nomepagina

Response.Cookies("erro").item("numero") = err.number

Response.Cookies("erro").item("data") = Time()

Response.Cookies("erro").item("usuario") = Request.Cookies("conta").item("login")

Response.Cookies("erro").item("descricao") = err.description

Response.Cookies("erro").item("caminhofisico") = caminhofisico

Response.Cookies("erro").item("origem") = err.nativeerror

Response.Cookies("erro").item("fonte") = err.source

Response.Clear()

Response.Write ("Erro ") &Err.Number&"." &Err.Description&"."

On error goto 0

End if

No caso gravo alguns dados num cookie para que outra

parte do sistema faça uso das informações.

Mas se não precisar disso pode escrever os dados do erro diretamente na página, como eu fiz num trecho:

Response.Write ("Erro ") &Err.Number&"." &Err.Description&"."

Bom, é isso ai. Se precisar saber algo sobre o relacionamento das tabs fala ae. Essa é a parte mais simples.

Agradeço a todos pela ajuda. Agora deixa eu ir lá no post de paginação hehehe

Editado por ViaPocket
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...