Olá a todos
Estou a desenvolver uma pequena base de dados para gerir de uma forma mais funcional um trabalho que executamos na empresa onde trabalho. Nessa mesma base de dados tenho duas tabelas, uma Cliente e outra com o nome CortesBTN e a relação entre as duas é feita através do campo instalação onde um cliente pode ter vários cortesBTN.
Essa base de dados possuí 3 formulários, um menu inicial, um formulário de pesquisa e um formulário para visualização/edição e inserção de novos clientes/cortesbtn.
No formulário de visualização dos dados, a que eu chamei de Detalhe, existem campos referentes à tabela cliente e campos referentes à tabela cortesbtn, sendo que os dados da tabela cortesbtn são mostrados através de um subformulário.
Eu introduzo vários cliente e como já disse esses mesmos clientes podem ter vários cortesBTN, ou seja, o cliente pode já estar "registado" e eu apenas necessito de acrescentar o respectivo corteBTN. Então eu criei um pequeno código que na fase de inserção de um novo cliente me diga se este já existe ou não e isso é feito através da análise do campo "instalação", ou seja, aquando da inserção deste código numa caixa de texto (quando esta perde o focus) é analisado se o cliente existe ou não, aparecendo uma mensagem caso exista e onde é feita a pergunta ao utilizador se deseja editar o registo existente (inserir um novo corteBTN associado aquele cliente)ou não.
O meu problema está aqui, consigo fazer com que seja feita essa verificação, aparece a mesnagem a dizer que a instalação x já existe mas quando clico para editar apenas consigo editar os dados da tabela Clientes porque quando clico no subformulário onde estão os dados da tabela cortesBTN aparece a seguinte mensagem,
"As alterações pedidas para a tabela não foram bem sucedidas pois iriam criar valores duplicados no índice ou no relacionamento, altere o índice ou remova o índice para que as entradas possam ser duplicadas..."
Eu queria que "ele" percebesse que não quero duplicar os dados mas sim editar os mesmo mas não sei como fazê-lo.
O meu código é o seguinte,
(eu não tenho grandes conhecimentos em VBA nem mesmo em base de dados, sou um curioso vou lendo e aprendendo)
No código e na BD tenho escrito "instalação" onde deveria ter escrito "instalacao", sei que não é uma boa prática mas é o hábito de tentar escrever de forma correcta.
Deixo também a minha base de dados (caso queiram testar podem inserir o código/instalação 0003063628, já se encontra registado)
Desde já o meu obrigado. E desculpem o testamento.
Estou a desenvolver uma pequena base de dados para gerir de uma forma mais funcional um trabalho que executamos na empresa onde trabalho. Nessa mesma base de dados tenho duas tabelas, uma Cliente e outra com o nome CortesBTN e a relação entre as duas é feita através do campo instalação onde um cliente pode ter vários cortesBTN.
Essa base de dados possuí 3 formulários, um menu inicial, um formulário de pesquisa e um formulário para visualização/edição e inserção de novos clientes/cortesbtn.
No formulário de visualização dos dados, a que eu chamei de Detalhe, existem campos referentes à tabela cliente e campos referentes à tabela cortesbtn, sendo que os dados da tabela cortesbtn são mostrados através de um subformulário.
Eu introduzo vários cliente e como já disse esses mesmos clientes podem ter vários cortesBTN, ou seja, o cliente pode já estar "registado" e eu apenas necessito de acrescentar o respectivo corteBTN. Então eu criei um pequeno código que na fase de inserção de um novo cliente me diga se este já existe ou não e isso é feito através da análise do campo "instalação", ou seja, aquando da inserção deste código numa caixa de texto (quando esta perde o focus) é analisado se o cliente existe ou não, aparecendo uma mensagem caso exista e onde é feita a pergunta ao utilizador se deseja editar o registo existente (inserir um novo corteBTN associado aquele cliente)ou não.
O meu problema está aqui, consigo fazer com que seja feita essa verificação, aparece a mesnagem a dizer que a instalação x já existe mas quando clico para editar apenas consigo editar os dados da tabela Clientes porque quando clico no subformulário onde estão os dados da tabela cortesBTN aparece a seguinte mensagem,
"As alterações pedidas para a tabela não foram bem sucedidas pois iriam criar valores duplicados no índice ou no relacionamento, altere o índice ou remova o índice para que as entradas possam ser duplicadas..."
Eu queria que "ele" percebesse que não quero duplicar os dados mas sim editar os mesmo mas não sei como fazê-lo.
O meu código é o seguinte,
(eu não tenho grandes conhecimentos em VBA nem mesmo em base de dados, sou um curioso vou lendo e aprendendo)
- Código:
Private Sub instalação_BeforeUpdate(Cancel As Integer)
Dim rst As Recordset
Dim banco As Database
Dim instal, StrSQL As String
Dim response As VbMsgBoxResult
'Set rst = CurrentDb.OpenRecordset("Clientes", dbOpenTable)
Set banco = CurrentDb
Set rst = banco.OpenRecordset("Clientes")
instal = Me.instalação
With rst
'Informa o nome do índice na tabela.
.Index = "PrimaryKey"
'Pesquisa o campo na tabela.
.Seek "=", instal
'Se encontrar, então...
If Not .NoMatch Then
response = MsgBox("A instalação '" & (instal) & "' já existe!" + Chr$(13) & "Deseja editar o registo existente ou inserir um novo? " + Chr$(13) & "Para editar clique Sim" + Chr$(13) & "Para inserir novo clique Não", vbYesNo, "Instalação Existente")
If response = vbYes Then
StrSQL = "SELECT cNOme, cMorada, cContacto, Concelho" & _
" FROM clientes" & _
" WHERE instalação = '" & instalação.Text & "';"
Set banco = CurrentDb
Set rst = banco.OpenRecordset(StrSQL)
Me.AllowEdits = True
Me.CortesBTN2.Form.AllowEdits = True
Me.CortesBTN2.Form.AllowAdditions = True
Me.cNome = rst.Fields("cNome").Value
Me.cMorada = rst.Fields("cMorada").Value
Me.cContacto = rst.Fields("cContacto").Value
Me.CConcelho = rst.Fields("Concelho").Value
Else
instalação.Undo 'limpa a caixa de texto
Cancel = True 'Cancela o evento.
End If
End If
End With
Set rst = Nothing 'Libera memória.
End Sub
No código e na BD tenho escrito "instalação" onde deveria ter escrito "instalacao", sei que não é uma boa prática mas é o hábito de tentar escrever de forma correcta.
Deixo também a minha base de dados (caso queiram testar podem inserir o código/instalação 0003063628, já se encontra registado)
Desde já o meu obrigado. E desculpem o testamento.
- Anexos
- Cortes.zip
- Você não tem permissão para fazer download dos arquivos anexados.
- (643 Kb) Baixado 37 vez(es)
Última edição por nioxys em 22/2/2012, 09:11, editado 1 vez(es)