CRIAR FUN?ÃO GENÉRICA PARA VERIFICA?ÃO
A situação é a seguinte: na tabela de Pedidos, existe o campo Cliente_Id. Supondo que eu tenha um ou vários pedidos na tabela para o cliente cujo ID seria 17.
Se por ventura algum dia, alguém queira ir no cadastro e excluir esse cliente com ID 17.
Gostaria de, antes de excluÃ-lo, verificar se já existe algum pedido na tabela para ele, pois se tivesse eu não poderia deixar excluir, pois pode afetar outras funções do sistema.
AÃ, eu fiz assim: no evento Click do botão excluir, antes de emitir a mensagem para confirmação da exclusão, eu coloco o seguinte código:
using (db = new Conexao())
{
int _clienteId = Convert.ToInt32(dgv.SelectedRows[0].Cells[[Ô]Cliente_Id[Ô]].Value
var dados = from p in db.Pedido
where p.Cliente_Id == _clienteId
select p;
if (dados.Count() > 1)
{
MessageBox.Show([Ô]Cliente já está associado a um pedido, portanto não é possÃvel sua exclusão[Ô], [Ô]Erro de exclusão[Ô], MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
}
A questão é: eu não gostaria de ficar colocando essa função no formulário do cadastro do cliente, mas sim, criar uma função genérica onde eu pudesse passar os parâmetros.
AÃ em todos os formulários que fosse necessária essa verificação, eu chamaria a função, mais ou menos assim:
VerificaRegistro(_parametro_que_informa_qual_modelo(db)_da_tabela, parâmetro_que_informa_id_a_consultar)
Será que é possÃvel?
Citação:NILSONTRES, não é questão de praticidade, é questão de certo e errado. Sem Ãndices, seu banco vira uma carroça e sua aplicação será mais lenta. Sem chaves primárias, você não tem como garantir consistência nos dados, o mesmo com chaves estrangeiras. Esses recursos, não são para enfeite, eles são parte integrante de um sistema consistente e sólido.
Meus banco não viram carroça, nunca senti isso, mas chaves primarias sim, sempre utilizei, é necessário. Mas como eu disse, são minhas praticas.
Quando eu deletar um pedido, automaticamente todos os itens serão deletados?
E como que eu faço se as tabelas já estão criadas, será que eu conseguirei alterar a estrutura delas? Lembrando que eu estou usando o banco de dados SQL Compact.
Nilsontres, se você tiver algum exemplo de como você faz, eu agradeço.
Nessa código que eu passei, creio que só faltaria uma coisa pra eu conseguir um resultado positivo, saber qual é o tipo que eu colocaria no parâmetro na hora de chamar a função para o [Ô]db.Pedido[Ô].
Pois aà chamaria a função assim, por exemplo:
VerificaRegistro(Pedido)
E a função ficaria, por exemplo: VerificaRegistro(System.Data.Entity.DbSet _entity).
Eu precisaria passar o tipo correto para a função funcionar. Dá certo dessa maneira?
ALTER TABLE Pedido
ADD FOREIGN KEY (ItemPedidoID) REFERENCES ItemPedido(ItemPedidoID); ???
Citação:Meus banco não viram carroça, nunca senti isso, mas chaves primarias sim, sempre utilizei, é necessário. Mas como eu disse, são minhas praticas.
Provavelmente você usa SQL Server.
No SQL Server, quando você cria uma chave primária, automaticamente ele cria um Ãndice clusterizado desse campo.
Abraços!
Citação:Provavelmente você usa SQL Server.
No SQL Server, quando você cria uma chave primária, automaticamente ele cria um Ãndice clusterizado desse campo.
Mysql.
Citação:quando eu tiver por exemplo uma tabela de pedido e outra dos itens do pedido.
Quando eu deletar um pedido, automaticamente todos os itens serão deletados?
Isso aà vai depender de como você configurar o seu banco. Se formos examinar isso do ponto de vista conceitual, os itens do pedido devem ser obrigatoriamente excluÃdos, por ser a composição do pedido. Não confunda item do pedido com o cadastro do produto no banco, parecem a mesma coisa, mas não são.