Olá pessoa, boa tarde a todos. Esta acontecendo um erro em minha aplicação "Índice ou chave primária não pode conter um valor Null". Essa mensagem aparece quando ao inserir um registro em qualquer campo do meu formPrincipal e tabular para o primeiro campos do meu subForm. O engraçado é que quando os campos estão vazios não aparece nada.Tenho duas tabelas que estão relacionadas em um-para-muitos, onde na primeira que contem os dados basicos dos individuos o campo IdIndividuos é Chave Primária do tipo número, tamanho duplo, não requerido e Indexado (Duplicação não autorizada), e na segunda tabela onde constam dados complementares (vários registros para cada um individuos da primeira tabela), o IdMandados é do tipo número, tamanho duplo, não requerido e indexado (duplicação autorizada). Acredito que seja pelo motivo de um dos campos não ser numeração automática. Só que agora não há possibilidade de mudar, pois teria de inserir um novo campo com essa numeração automatica, o que tiraria de ordem todos os meus registros, causaria um caos no meu sistema. Será que tem alguma solução para isso. Achei que havia finalizado minha aplicação, mas acho que ainda tenho um grande problema pela frente. Abraços
[Resolvido]Indices de campo Null
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº1
Indices de campo Null
Convidado- Convidado
- Mensagem nº2
Re: [Resolvido]Indices de campo Null
Boas Pablo, não apenas as tabelas tem que estarem relacionadas, mas o form e subform tambem devem ser vinculados.
Abra o form em modo desgin, Aba dados,
Vincular Campos Mestres e Vincular Campos filho... Nestes campos devem estar o campo codigo utilizado no relacionamento.
Assim quando clicar no subform ele adicionará no campo relacionado o código da tabela principal
Cumprimentos.
Abra o form em modo desgin, Aba dados,
Vincular Campos Mestres e Vincular Campos filho... Nestes campos devem estar o campo codigo utilizado no relacionamento.
Assim quando clicar no subform ele adicionará no campo relacionado o código da tabela principal
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº3
Re: [Resolvido]Indices de campo Null
Saudações amigo Piloto, esse relacionamento já esta feito, entre os form "Pai e Filho", por isso não entendo o erro. Pois recentemente lancei vários registros no subform tranquilamente. Eu selecionava o individuo na comboNome e depois atualizava os dados no subform tranquilamente. Mas agora quando ele abre com os campos vazio para inserir um novo registro, eu até consigo tabular legal entre todos os campos, mas é só inserir um dado qualquer independente de que campo seja, ele da essa mensagem.
Abraços.
Abraços.
Convidado- Convidado
- Mensagem nº4
Re: [Resolvido]Indices de campo Null
Envie a parte do BD para que possamos ver...
Ja me correu algo parecido ma o erro era no form.. Criei um form novo e coloquei os objetos e funcionou.
Cumprimentos.
Ja me correu algo parecido ma o erro era no form.. Criei um form novo e coloquei os objetos e funcionou.
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº5
Re: [Resolvido]Indices de campo Null
Piloto eu andei dando uma comparada com um Bkp do meu sistema, e percebi que o tipo de dados da segunda tabela em vez de estar Inteiro Longo, está Duplo. Acontece que não alterei esses dados, o que pode ter acontecido. Reverter esse erro será que dá ainda.Abraços.
Convidado- Convidado
- Mensagem nº6
Re: [Resolvido]Indices de campo Null
Bom dia Pablo, este erro aparenteme é erro nos campos relacionados, pois quando são relacionados... asim que digita em qualquer campo do subform, ele preenche automaticamente o campo o relacionamento com o código do form principal. Creio que a questão de suplo ou não não tenha haver com este erro.
Crie uma copia do bd e faça as alterações e observe se corrigirá.
Tipo de campo duplo, são campos que aceitam numeros decimais e valores,
Inteiro e einteiro logo, a diferença e a capacidade de armazenamento.
Podes alterar se o texto contido não ultrapassar o limite para numeros inteiros nçao ocorrerá problemas, na mudança de inteiro para duplo so ocorrerá perda do texto digitado se o mesmo nçao estiver nos padróes de numero inteiro.
Cumprimentos.
Crie uma copia do bd e faça as alterações e observe se corrigirá.
Tipo de campo duplo, são campos que aceitam numeros decimais e valores,
Inteiro e einteiro logo, a diferença e a capacidade de armazenamento.
Podes alterar se o texto contido não ultrapassar o limite para numeros inteiros nçao ocorrerá problemas, na mudança de inteiro para duplo so ocorrerá perda do texto digitado se o mesmo nçao estiver nos padróes de numero inteiro.
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº7
Re: [Resolvido]Indices de campo Null
Valeu Piloto, mas cara não to conseguindo realizar essa mudança, pois para que a chave primária da minha tabela IdIndivíduos esteja com numeração automática, e a segunda tabela IdMandados com o campo numero, acredito que devo ter que digitar todos os 600 registros nela existentes novamente, pois já fiz um teste em inserir um novo campo com numeração automática, mas acontece que a antiga numeração sequencial não se relacionará com a segunda tabela, tornando assim um caos. E agora o que fazer?
Convidado- Convidado
- Mensagem nº8
Re: [Resolvido]Indices de campo Null
Ixi.. isso é um problema...Mande para mim para que eu possa ver isto pra voce.
Cumprimentos.
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº9
Re: [Resolvido]Indices de campo Null
Ok. Vou dar uma olhada e compacar para você. Só vai demorar um pouquinho, pois em minhas tabelas contêm dados pessoais de indivíduos, que não podem ser divulgados, entendeu. Mas vou ver o que consigo fazer. Valeu Piloto.
Convidado- Convidado
- Mensagem nº10
Re: [Resolvido]Indices de campo Null
Caso queira envie-me no e-mail, sabes que meu principal sistema é o Syspen e é da mesma área...
Cumprimentos.
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº11
Re: [Resolvido]Indices de campo Null
Postei ai Piloto, caso não consiga abrir, pelo motivo do Zip ser uma versão mais aintiga, me de um retorno que posto no seu e-mail. Ok. Obrigado pela atenção. Abraços
Convidado- Convidado
- Mensagem nº12
Re: [Resolvido]Indices de campo Null
Realmente Pablo, quando tem uma chave primária como auto-numeração, ao criar um registro é gerado um numero automaticamente.
Como sua chave primária é do tipo número este campo fica em branco. Chaves primárias não pode conter um valor Null ou em branco.
Como voce disse, nao poderia mudar este campo para auto-numeração pois geraria desordem em seus registros, pois bem
1 - Crie um módulo e o nomeie de mdlNumeracao, neste cole o código:
e no seu form:
Coloque um botão: Novo Registro, neste o código
DoCmd.GoToRecord , , acNewRec
Me.IdIndividuos = NumeroLivreVago("IdIndividuos", "tblCadastroIndividuos")
Esta função numerará seus registros, e aproveitará tambem numeros vagos.
Coloque botões de navegação e desabilite a navegação do form.
Cumprimentos.
Como sua chave primária é do tipo número este campo fica em branco. Chaves primárias não pode conter um valor Null ou em branco.
Como voce disse, nao poderia mudar este campo para auto-numeração pois geraria desordem em seus registros, pois bem
1 - Crie um módulo e o nomeie de mdlNumeracao, neste cole o código:
Function NumeroLivreVago(CampoID As String, NomeTabela As String, EnderecoBD As String) As Long
'criada por Alexandre Neves
'em 2011-06-15
'para Harysohn
'do fórum MaximoAccess
Dim rst As DAO.Recordset, I As Integer
Set rst = CurrentDb.OpenRecordset("SELECT " & CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
If rst.RecordCount = 0 Or IsNull(rst(0)) Then
NumeroLivreVago = 1
Else
I = 1
Do
If rst.EOF Then
NumeroLivreVago = I
Exit Do
ElseIf IsNull(rst(0)) Or rst(0) = "" Or rst(0) <> I Then
NumeroLivreVago = I
Exit Do
End If
I = I + 1
rst.MoveNext
Loop
End If
Set rst = Nothing
Exit Function
MostraErro:
MsgBox err.Number & vbCr & err.Description
End Function
e no seu form:
Coloque um botão: Novo Registro, neste o código
DoCmd.GoToRecord , , acNewRec
Me.IdIndividuos = NumeroLivreVago("IdIndividuos", "tblCadastroIndividuos")
Esta função numerará seus registros, e aproveitará tambem numeros vagos.
Coloque botões de navegação e desabilite a navegação do form.
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº13
Re: [Resolvido]Indices de campo Null
OK, no seu código onde
Function NumeroLivreVago(CampoID As String, NomeTabela As String, EnderecoBD As String) As
Dim rst As DAO.Recordset, I As Integer
Set rst = CurrentDb.OpenRecordset("SELECT " & CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
Onde: CampoID, NomeTabela e EnderecoBD, tenho que modificar para IdIndividuos, tblCadastroIndividuos e o EnderecoBD o que é?
e na parte SQL ("SELECT.....no CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
devo substituir como indicado anteriormente?
Eu substitui mas ainda não deu, e no botão para adicionar novos registros, no evento click, coloquei o seu código mas gera um erro em tempo de execução no NumeroLivreVago em Me.IdIndividuos = NumeroLivreVago("IdIndividuos", "tblCadastroIndividuos")
Você consegui abrir o BD e fazer essas alterações e funcionou pleno?
Function NumeroLivreVago(CampoID As String, NomeTabela As String, EnderecoBD As String) As
Dim rst As DAO.Recordset, I As Integer
Set rst = CurrentDb.OpenRecordset("SELECT " & CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
Onde: CampoID, NomeTabela e EnderecoBD, tenho que modificar para IdIndividuos, tblCadastroIndividuos e o EnderecoBD o que é?
e na parte SQL ("SELECT.....no CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
devo substituir como indicado anteriormente?
Eu substitui mas ainda não deu, e no botão para adicionar novos registros, no evento click, coloquei o seu código mas gera um erro em tempo de execução no NumeroLivreVago em Me.IdIndividuos = NumeroLivreVago("IdIndividuos", "tblCadastroIndividuos")
Você consegui abrir o BD e fazer essas alterações e funcionou pleno?
Convidado- Convidado
- Mensagem nº14
Re: [Resolvido]Indices de campo Null
Perdoe-me amigão é que na minha função eu tenho que especificar o enereço do BD pois meus forms são desvinculados.
A sua função é esta, testado e funcionando:
Function NumeroLivreVago(CampoID As String, NomeTabela As String) As Long
'criada por Alexandre Neves
'em 2011-06-15
'para Harysohn
'do fórum MaximoAccess
Dim rst As DAO.Recordset, I As Integer
Set rst = CurrentDb.OpenRecordset("SELECT " & CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
If rst.RecordCount = 0 Or IsNull(rst(0)) Then
NumeroLivreVago = 1
Else
I = 1
Do
If rst.EOF Then
NumeroLivreVago = I
Exit Do
ElseIf IsNull(rst(0)) Or rst(0) = "" Or rst(0) I Then
NumeroLivreVago = I
Exit Do
End If
I = I + 1
rst.MoveNext
Loop
End If
Set rst = Nothing
Exit Function
MostraErro:
MsgBox Err.Number & vbCr & Err.Description
End Function
Cumprimentos.
A sua função é esta, testado e funcionando:
Function NumeroLivreVago(CampoID As String, NomeTabela As String) As Long
'criada por Alexandre Neves
'em 2011-06-15
'para Harysohn
'do fórum MaximoAccess
Dim rst As DAO.Recordset, I As Integer
Set rst = CurrentDb.OpenRecordset("SELECT " & CampoID & " FROM " & NomeTabela & " WHERE Not IsNull(" & CampoID & ") ORDER BY " & CampoID & ";")
If rst.RecordCount = 0 Or IsNull(rst(0)) Then
NumeroLivreVago = 1
Else
I = 1
Do
If rst.EOF Then
NumeroLivreVago = I
Exit Do
ElseIf IsNull(rst(0)) Or rst(0) = "" Or rst(0) I Then
NumeroLivreVago = I
Exit Do
End If
I = I + 1
rst.MoveNext
Loop
End If
Set rst = Nothing
Exit Function
MostraErro:
MsgBox Err.Number & vbCr & Err.Description
End Function
Cumprimentos.
Pablo Weber- Intermediário
- Respeito às regras :
Sexo :
Localização :
Mensagens : 195
Registrado : 21/11/2010
- Mensagem nº15
Re: [Resolvido]Indices de campo Null
Meu amigo Piloto, não sei como vocês conseguem, mas ficou certinho com essa nova função que tu me passaste, cara ficou show de bola. Muito obrigado pela sua atenção e de todos que de um modo geral contribuirão. O meu muito obrigado, e espero puder uma hora dessas compartilhar algum artigo para esse Fórum que ajuda muita gente. Valeu Piloto, grande abraço.
Convidado- Convidado
- Mensagem nº16
Re: [Resolvido]Indices de campo Null
Este Código me foi feito pelo Grande Alexandre Neves, ao qual eu atribuo os créditos desta solução.
O Fórum agradece o Retorno, Feliz Ano Novo!
O Fórum agradece o Retorno, Feliz Ano Novo!