CRIAR UM VERIFICADOR COM CONDI?ÃO DE DUAS TABELAS
Tenho duas tabelas: Perfis e Usuários, que tem a mesma coluna [ô]descricao_perfil[ô], montei uma rotina para exclusão do perfil porém se o mesmo tiver algum usuário cadastrado para o determinado registro de perfil não pode permitir a exclusão do mesmo. Não estou conseguindo criar o IF para esta condição ficar correta.
Se alguém puder me ajudar...
Se alguém puder me ajudar...
Posta foto da sua tela se possÃvel...
Print
Este tipo de controle é feito com chaves primárias e estrangeiras e não com cláusulas If...
De algum jeito devo conseguir criar uma condição...
é vb6 ou .net ?
O Tópico esta para .net, mas a imagem mostra vb6.
O Tópico esta para .net, mas a imagem mostra vb6.
Me responde uma coisa.... O mesmo perfil pode ser usado para mais de um usuário?
Qual Banco de dados vc usa?
Provavelmente isso pode ser resolvido somente com relacionamentos, dependendo do bd que vc usa....
Precisaria que me passasse a estrutura das duas tabelas, juntamente com as chaves de cada uma...
Qual Banco de dados vc usa?
Provavelmente isso pode ser resolvido somente com relacionamentos, dependendo do bd que vc usa....
Precisaria que me passasse a estrutura das duas tabelas, juntamente com as chaves de cada uma...
Na verdade é VB6, lembro que selecionei essa opção no tópico...
O mesmo perfil pode sim ser usado para mais de um usuário. por exemplo, tenho vários usuários que podem ter o mesmo perfil.
Banco de Dados: ACESS, sendo que a tabela [ô]perfis[ô] e [ô]usuarios[ô] estão relacionadas dentro do Banco.
O mesmo perfil pode sim ser usado para mais de um usuário. por exemplo, tenho vários usuários que podem ter o mesmo perfil.
Banco de Dados: ACESS, sendo que a tabela [ô]perfis[ô] e [ô]usuarios[ô] estão relacionadas dentro do Banco.
Olha... Vc tem dois modos de fazer....
1 - Habilitar a opção impor integridade referencial no relacionamento... isso vai impedir a exclusão do registro pai caso exista registros filhos
2 - Criar uma rotina para verificar manualmente a existência de registros filho... (Não recomendado pois diminui o desempenho do sistema, executando tarefas não necessárias)
Nesse caso poderia executar uma consulta assim:
Imagina duas tabelas
Vendas ItensVendas
----------------------------------------------------------
CodVnd codvnd
data mercadoria
qtde
valor
Select Count(*) as Qtd from ItensVenda where CodVnd = [valor de vendas.codvnd]
se Qt > 0, existem registros, caso = 0... não existe
adequa o exemplo ao teu caso
Espero ter ajudado
1 - Habilitar a opção impor integridade referencial no relacionamento... isso vai impedir a exclusão do registro pai caso exista registros filhos
2 - Criar uma rotina para verificar manualmente a existência de registros filho... (Não recomendado pois diminui o desempenho do sistema, executando tarefas não necessárias)
Nesse caso poderia executar uma consulta assim:
Imagina duas tabelas
Vendas ItensVendas
----------------------------------------------------------
CodVnd codvnd
data mercadoria
qtde
valor
Select Count(*) as Qtd from ItensVenda where CodVnd = [valor de vendas.codvnd]
se Qt > 0, existem registros, caso = 0... não existe
adequa o exemplo ao teu caso
Espero ter ajudado
Exatamente, ele não exclui diretamente do banco o registro quando está relacionado ao registros filho.
Porém no meu código está com a mensagem dizendo que excluiu, e quero criar uma condição justamente para isso, antes de chegar na mensagem de [ô]Registro excluÃdo[ô], para ele não permitir isso: Veja minha rotina abaixo:
Private Sub RotinaExcluir()
Dim lsql As String
If lvwLista.ListItems.Count = 0 Then
MensagemDoSistema [Ô]Erro! Selecione um registro para fazer a exclusão![Ô]
Exit Sub
End If
If MsgBox([Ô]Excluir o registro Nº [ô][Ô] & lvwLista.SelectedItem & [Ô][ô]?[Ô], vbQuestion + vbYesNo, [Ô]Exclusão - Sistema Integrado :: Versão: [Ô] & App.Major & [Ô].[Ô] & App.Minor & [Ô].[Ô] & App.Revision) = vbNo Then
Exit Sub
End If
lsql = [Ô]DELETE FROM PERFIS WHERE id_perfil=[Ô]
lsql = lsql & lvwLista.SelectedItem
gBDSistemaIntegrado.Execute lsql
[ô]MsgBox [Ô]Registro removido![Ô]
lvwLista.ListItems.Remove (lvwLista.SelectedItem.Index)
End Sub
Porém no meu código está com a mensagem dizendo que excluiu, e quero criar uma condição justamente para isso, antes de chegar na mensagem de [ô]Registro excluÃdo[ô], para ele não permitir isso: Veja minha rotina abaixo:
Private Sub RotinaExcluir()
Dim lsql As String
If lvwLista.ListItems.Count = 0 Then
MensagemDoSistema [Ô]Erro! Selecione um registro para fazer a exclusão![Ô]
Exit Sub
End If
If MsgBox([Ô]Excluir o registro Nº [ô][Ô] & lvwLista.SelectedItem & [Ô][ô]?[Ô], vbQuestion + vbYesNo, [Ô]Exclusão - Sistema Integrado :: Versão: [Ô] & App.Major & [Ô].[Ô] & App.Minor & [Ô].[Ô] & App.Revision) = vbNo Then
Exit Sub
End If
lsql = [Ô]DELETE FROM PERFIS WHERE id_perfil=[Ô]
lsql = lsql & lvwLista.SelectedItem
gBDSistemaIntegrado.Execute lsql
[ô]MsgBox [Ô]Registro removido![Ô]
lvwLista.ListItems.Remove (lvwLista.SelectedItem.Index)
End Sub
Faça isso apenas utilizando um SQL simples:
Como vc fez uma referência no access, vc só poderá excluir um perfil se não existirem mais usuários relacionados a ele correto? Ou seja, ou vc exclui todos os usuários ou muda o perfil. Portanto primeiramemte exclua ou altere todos os dados da tabela usuários relacionados com a tabela perfil:
Ou
Depois é só excluir o perfil como você precisa.
E como o kerplunk falou antes dê preferência em relacionar apenas chaves primárias. E que essas chaves primárias sejam preferencialmente numéricas. Porque querendo ou não as máquinas respondem melhor com números.
Como vc fez uma referência no access, vc só poderá excluir um perfil se não existirem mais usuários relacionados a ele correto? Ou seja, ou vc exclui todos os usuários ou muda o perfil. Portanto primeiramemte exclua ou altere todos os dados da tabela usuários relacionados com a tabela perfil:
delete from usuários where perfil = [ô]recepcionista[ô]
Ou
update usuários set perfil = [ô]outro perfil[ô] where perfil = [ô]recepcionista[ô]
Depois é só excluir o perfil como você precisa.
E como o kerplunk falou antes dê preferência em relacionar apenas chaves primárias. E que essas chaves primárias sejam preferencialmente numéricas. Porque querendo ou não as máquinas respondem melhor com números.
Tópico encerrado , respostas não são mais permitidas