bollywood actresses hair loss hair rehab london contact number cheap hair extensions brazilian curly hair with closure hair extension fails human hair wigs black ponytail hairstyles 2018 sunny hair extensions uk hair extensions remy hair extensions weft koko one piece hair extensions clip hair
Criar relacionamentos entre as tabelas, usando o CONSTRAINT

... 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.


Criar relacionamentos entre as tabelas, usando o CONSTRAINT

Antes de iniciar sua leitura, clique aqui e cadastre-se para receber comunicados sobre novos artigos.

No exemplo abaixo foi criado o relacionamento de Um para Muitos.  O lado Um tem a tabela exemplo tblClientes e o lado Muitos tem a tabela exemplo tblClienteContatos.  Observe que estou usando a conexão ADO para que funcionem as declarações ON UPDATE e ON DELETE.

currentproject.Connection.Execute "ALTER TABLE tblClienteContatos _ 
ADD CONSTRAINT rel FOREIGN KEY (idCliente) _ 
REFERENCES tblClientes (idCliente) _ 
ON UPDATE CASCADE ON DELETE CASCADE"

O nome rel (pode ser qualquer nome) serve para identificar o relacionamento e foi utilizado no código abaixo para excluir o relacionamento.  A declaração ON UPDATE CASCADE marca a opção "Propagar atualizações dos campos relacionados" e ON DELETE CASCADE marca a opção "Propagar exclusão dos registros relacionados".  Veja na imagem abaixo:

Usando Access - ADD CONSTRAINT

Para excluir o relacionamento, utilize o DROP CONSTRAINT:

currentdb.Execute "ALTER TABLE tblClienteContatos DROP CONSTRAINT rel"

Também é possível utilizar o CreateRelation do DAO para criar os relacionamentos.  Observe o código abaixo:

Dim bd As DAO.Database
Dim relNew As DAO.Relation

Set bd = CurrentDb
'---------------------------------------------------------------------------
'Define o relacionamento entre as tabelas, incluindo exclusões em cascata e
'atualizações em cascata
'---------------------------------------------------------------------------
Set relNew = bd.CreateRelation("rel", "tblClientes", "tblClienteContatos", _
dbRelationDeleteCascade + dbRelationUpdateCascade)
'--------------------------------
'Define os campos relacionados
'--------------------------------
relNew.Fields.Append relNew.CreateField("IdCliente") 
relNew.Fields!IdCliente.ForeignName = "IdCliente" 
'-----------------------
'Cria o relacionamento
'-----------------------
bd.Relations.Append relNew

Set bd = Nothing
Set relNew = Nothing

Segue abaixo, a tabela dos atributos que podemos configurar no CreateRelation:

Nome Atributo Valor Descrição
dbRelationDeleteCascade 4096 Exclusão em cascata
dbRelationDontEnforce 2 Relação não imposta (sem integridade referencial)
dbRelationInherited 4 Existe relação no banco de dados que contém as duas tabelas vinculadas
dbRelationLeft 16777216 Exibir LEFT JOIN como tipo de associação padrão
dbRelationRight 33554432 Exibir RIGHT JOIN como tipo de associação padrão
dbRelationUnique 1 Relação um para um
dbRelationUpdateCascade 256 Atualização em cascata

 

Bom estudo!


 

 


7 comentário(s)

Fabio Matos   25/11/2018 18:47:22

Mestre Avelino, boa noite.
Consegui fazer o CreateRelation no BackEnd normalmente, porém, quero automatizar o processo de cada atualização do meu front, mas para isso, substituí os comandos por variáveis que buscam os dados via Dlookup...

Ex:
CreateRelation(VarNomeRelac, VarTabela, VarTabelaFK, _
VarTipoRelac)

Até aqui funcionou perfeitamente. Só estou com um problema muito "simples", mas que não consegui resolver.

Na parte "relNew.Fields!IdCliente.ForeignName" eu não consigo substituir este campo 'Idcliente' por uma variável (ex: relNew.Fields!VarCampo.ForeignName), pois informa o seguinte erro:
"Item não encontrado nesta seleção"

Existe uma forma de fazer isso?

Avelino Sampaio   26/11/2018 02:02:08

Fabio,

utilize o parênteses conforme dica deste meu artigo:

http://www.usandoaccess.com.br/tutoriais/referenciar-formularios-e-relatorios-propriedades.asp?id=1#inicio

Sucesso!

Fabio Matos   26/11/2018 07:13:31

Mestre, ocorreu o erro:

"Erro de Compilação:
Caractere de declaração de tipo não correspondente ao tipo de dados declarado"

Li o artigo, mas vi que nenhum dos exemplos tem um controle como neste ex: (VarCampo).ForeignName
Estou tentando da seguinte forma:
relNew.Fields!(VarCampo).ForeignName

Avelino Sampaio   26/11/2018 07:32:29

Fabio,

cole aqui seu código completo da função CreateRelation()

No aguardo

Fabio Matos   26/11/2018 08:17:07

Mestre, segue conforme solicitado:

---------------------------------------
Public Sub fncCriarRelac()

Dim bd As DAO.Database
Dim relNew As DAO.Relation
Dim NomeRelac As String
Dim VarTbl As String
Dim VarTblEstrangeira As String
Dim Comando1 As Integer
Dim VarCF As String
Dim VarFN As String

NomeRelac = "teste" 'DLookup("[nomerelac]", "cs_versaobe_criarRelac", "[Seq]=" & 1)
VarTbl = "tbl_movestoque_lanccaixa" 'DLookup("[tblprimaria]", "cs_versaobe_criarRelac", "[Seq]=" & 1)
VarTblEstrangeira = "tbl_rot_lanccaixa" 'DLookup("[tblEstrangeira]", "cs_versaobe_criarRelac", "[Seq]=" & 1)
Comando1 = 2 'DLookup("[comando1]", "cs_versaobe_criarRelac", "[Seq]=" & 1)
VarCF = "cod_lancCaixa_movestoqueLancCaixa" 'DLookup("[PK]", "cs_versaobe_criarRelac", "[Seq]=" & 1)
VarFN = "cod_lancCaixa" 'DLookup("[FK]", "cs_versaobe_criarRelac", "[Seq]=" & 1)

Set bd = DBEngine.OpenDatabase(DLookup("Path_0", "tblCaminhoBe"), False, False, ";PWD=xpto")

Set relNew = bd.CreateRelation(NomeRelac, VarTbl, VarTblEstrangeira, _
Comando1)

relNew.Fields.Append relNew.CreateField(VarCF)
relNew.Fields!(VarCF).ForeignName = VarFN

bd.Relations.Append relNew

MsgBox "Banco de Dados do Sistema, Atualizado com Sucesso.", vbInformation, "Eleve Sys - FLM SISTEMAS"
Set bd = Nothing
Set relNew = Nothing

End Sub
------------------------------------
Deixei o DlookUp como comentário para ficar mais claro os dados que ele está buscando.
Na parte "relNew.Fields!(VarCF).ForeignName", se eu colocar o valor real da variável, que é "cod_lancCaixa_movestoqueLancCaixa", aí funciona normalmente.

Avelino Sampaio   26/11/2018 09:39:37

Fabio,

teste sem a exclamação antes do parênteses:

relNew.Fields(VarCF).ForeignName = VarFN

No aguardo

Fabio Matos   26/11/2018 12:49:13

Funcionou perfeitamente!!

Obrigado mais uma vez.


Envie seu comentário: