... Assinatura do site por 1 ano + Kit MontaRibbons + 3 Livros em PDF + Diversas Revistas (pdf) de brinde, por apenas R$100,00
(
podendo parcelar em até 10 vezes no cartão de crédito)...

Clique aqui e obtenha mais detalhes do nosso kit completo e de como comprar.


Impedir Mensagem Interna do Access

Usuário Marcos:

Boa tarde.

Em todos os meus projetos uso o relacionamento entre as tabelas, através de seus índices.  Isso evita, que ao se excluir um registro, falte dados numa tabela em que se relacionava.  Porém, sempre enfrentei o problema da mensagem interna do Access, quando tento excluir este registro:

Erro de tempo de execução 3200
O registro não pode ser excluído ou alterado porque a tabela ItensTab inclui registros relacionados a ele.

Como suprimir esta mensagem e detectar, por VBA, qual a tabela relacionada? Já usei docmd.SetWarning, mas não funciona.

Suporte:

Marcos, o que você quer fazer com os dados da tabela relacionada?  Excluir também os registros?

Ofereça um BD com as tabelas relacionadas em questão e mostre como está usando o código para efetuar a exclusão.

Usuário Marcos:

Oi Avelino!

Vou te dar um exemplo: - a cada exclusão de uma venda, as parcelas de receitas a receber seriam excluídas automaticamente.  Até aí está tudo OK!

O cliente cancelou a venda, logo, excluí tudo relacionado a ela: receitas, comissões de venda, itens vendidos... porque está na relação de tabelas, além da Integridade Referencial, a exclusão de registros relacionados.

Agora, vamos para outro exemplo: - entro na tela de um produto e sem querer tento excluí-lo. Por estar relacionado por Integridade Referencial, a Tabela ItensDeVenda, o Access dá a mensagem que informei anteriormente.  Se eu retiro a relação, ele é excluído e nas vendas onde ele faria parte, o registro aparece em branco e só são visíveis a Quantidade e o Valor.

É esse aviso do Access que quero evitar e que informe, como nesse exemplo, que este produto faz parte de uma relação em Vendas.  Portanto, só podendo ser excluído se o registro onde ele consta em venda, seja antes excluído.

Segue o código que estou utilizando:

Function Excluir()
    Dim Mensg  As String
    Beep
    Mensg = MsgBox("Este Registro será excluído. Confirma?", vbQuestion + vbYesNo, "Excluir Registro")
    If Mensg = vbNo Then GoTo 20 Else GoTo 10
10 DoCmd.RunCommand acCmdDeleteRecord
20 End Function

Suporte:

Marcos, experimente tratar o erro. Exemplo:

Function Excluir()
on error goto TrataErro
Beep
if MsgBox("Este Registro será excluído. Confirma?", vbQuestion + vbYesNo, "Excluir Registro") = vbyes then
   DoCmd.RunCommand acCmdDeleteRecord
end if
sair:
   exit function
trataErro:
   Msgbox "Este registro não pode ser excluído..."
   resume sair
End Function

Ou você pode testar se existem registros na tabela relacionada, antes de realizar a pergunta. Exemplo:

Function Excluir(cod as long)
Beep
'verifica se tem registro na tabela relacionada
if DCount("*","NomeTabelaRelacionada","id =" & cod ) > 0 then
   msgbox "Este registro não pode ser excluido..."
   exit function
end if
if MsgBox("Este Registro será excluído. Confirma?", vbQuestion + vbYesNo, "Excluir Registro") = vbyes then
   DoCmd.RunCommand acCmdDeleteRecord
end if
End Function

Se ainda assim não funcionar, experimente o código abaixo, no evento "ao ocorrer erro" do formulário:

Private Sub Form_Error (DataErr As Integer, Response As Integer)
'3200 erro de exclusão de registro
If DataErr = 3200 Then
   'Cancela mensagem de erro do Access
    Response = acDataErrContinue
    'Cria a sua mensagem personalizada
    MsgBox "Sua mensagem"
End If
End Sub

Usuário Marcos:

Avelino muito obrigado!

As duas primeiras funções funcionaram perfeitamente!


 

 


Não há comentário

Envie seu comentário: