Preciso de uma ajuda URGENTE: Criar novo registro a partir de um formulário

Anônima
2012-02-03T02:47:30+00:00

Prezados,

Por favor, ajudem-me. A urgência foi pedida porque estou com um trabalho bastante atrasado e enfrento o seguinte problema:

Estou criando um banco de dados para registrar respostas a questionários de uma pesquisa. Como a quantidade de campos é maior do que a suportada por uma tabela do Access, utilizo uma tabela para cada sessão do questionário, o que gerou 15 tabelas, cada uma com um formulário de entrada de dados correspondente. Os questionários são numerados sem repetição, o que me levou a usar o campo de identificação como chave primária. Todas as tabelas têm este campo. A cada questionário corresponde uma linha na tabela, ou seja, cada questionário, um registro. Só que isto não acontece. Quando termina o último formulário, há um código que grava o registro, a seguir volta para o primeiro formulário e cria um novo registro que corresponde a um novo questionário. Até aí, tudo bem. Na sequência, abre o segundo formulário  (é a segunda sessão do questionário) . Quando este é digitado e gravado, seus dados estão sobrescrevendo os dados do primeiro registro (questionário anterior). O mesmo acontece com os formulários seguintes. Entre as tabelas existem relacionamentos, para os quais já tentei um-para-muitos e um-para-um (que me parece mais adequado). 

Código no último formulário, que está funcionando bem:

' Há uma caixa de opção com as alternativas de ir para novo questionário ou sair do aplicativo.

Function Modfrm12_SairOuNovo()

With CodeContextObject

Dim varBoxInOut As Variant

varBoxInOut = Forms![frm12 - Identificação do entrevistado]!ctrBoxInOut

DoCmd.SelectObject acForm, "frm12 - Identificação do entrevistado", False

If (varBoxInOut = 1) Then

DoCmd.RunCommand acCmdSaveRecord

DoCmd.OpenForm "frm01 - Quest_Id", acNormal, "", "[Forms]![frm01 - Quest_Id]![Quest]", acAdd, acNormal

DoCmd.RunCommand acCmdRecordsGoToNew

ElseIf (varBoxInOut = 2) Then

DoCmd.RunCommand acCmdSaveRecord

DoCmd.RunCommand acCmdCloseDatabase

DoCmd.Quit acPrompt

End If

End With

End Function

Código de saída do primeiro para o segundo formulário:

Function MóduloSaltoP2___P14()

'Salva registro frm01 - Quest_Id

DoCmd.RunCommand acCmdSaveRecord

'Bloco que verifica se a próxima ação é abrir "frm02_1 - Caracterização da viagem"

'e "frm02_1 - Caracterização da viagem" para definir valor 0 para seus campos

'ou, senão, "frm03 - Morad_Aval_Tur", acNormal"

If (Forms![frm01 - Quest_Id]!P1 = 1) Then

DoCmd.OpenForm "frm02_1 - Caracterização da viagem", acNormal, "", "", , acNormal

DoCmd.RunCommand acCmdRecordsGoToNew

DoCmd.GoToControl "P3"

Forms![frm02_1 - Caracterização da viagem]!P3 = 0

DoCmd.GoToControl "P4"

Forms![frm02_1 - Caracterização da viagem]!P4 = 0

DoCmd.GoToControl "P5"

Forms![frm02_1 - Caracterização da viagem]!P5 = 0

DoCmd.GoToControl "PR"

Forms![frm02_1 - Caracterização da viagem]!P6 = 0

DoCmd.GoToControl "P7"

Forms![frm02_1 - Caracterização da viagem]!P7 = 0

DoCmd.GoToControl "P8"

Forms![frm02_1 - Caracterização da viagem]!P8 = 0

DoCmd.GoToControl "P9"

Forms![frm02_1 - Caracterização da viagem]!P9 = 0

DoCmd.GoToControl "P1"

Forms![frm02_1 - Caracterização da viagem]!P10 = 0

DoCmd.GoToControl "P11_1"

Forms![frm02_1 - Caracterização da viagem]!P11_1 = 0

DoCmd.GoToControl "P11_2"

Forms![frm02_1 - Caracterização da viagem]!P11_2 = 0

DoCmd.GoToControl "P11_3"

Forms![frm02_1 - Caracterização da viagem]!P11_4 = 0

DoCmd.GoToControl "P11_5"

Forms![frm02_1 - Caracterização da viagem]!P11_5 = 0

DoCmd.RunCommand acCmdSaveRecord

DoCmd.OpenForm "frm02_2 - Caracterização da viagem", acNormal, "", "", , acNormal

DoCmd.GoToControl "P12"

Forms![frm02_2 - Caracterização da viagem]!P12 = 0

DoCmd.GoToControl "P13_1"

Forms![frm02_2 - Caracterização da viagem]!P13_1 = 0

DoCmd.GoToControl "P13_2"

Forms![frm02_2 - Caracterização da viagem]!P13_2 = 0

DoCmd.GoToControl "P13_3"

Forms![frm02_2 - Caracterização da viagem]!P13_3 = 0

DoCmd.GoToControl "P13_4"

Forms![frm02_2 - Caracterização da viagem]!P13_4 = 0

DoCmd.GoToControl "P13_5"

Forms![frm02_2 - Caracterização da viagem]!P13_5 = 0

DoCmd.GoToControl "P13_6"

Forms![frm02_2 - Caracterização da viagem]!P13_6 = 0

DoCmd.GoToControl "P13_7"

Forms![frm02_2 - Caracterização da viagem]!P13_7 = 0

DoCmd.GoToControl "P13_8"

Forms![frm02_2 - Caracterização da viagem]!P13_8 = 0

DoCmd.GoToControl "P13_9"

Forms![frm02_2 - Caracterização da viagem]!P13_9 = 0

DoCmd.GoToControl "P13_10"

Forms![frm02_2 - Caracterização da viagem]!P13_10 = 0

DoCmd.RunCommand acCmdSaveRecord

DoCmd.OpenForm "frm03 - Morad_Aval_Tur", acNormal, "", "", , acNormal

DoCmd.GoToControl "P14"

ElseIf (Forms![frm01 - Quest_Id]!P1 = 2) Then

DoCmd.RunCommand acCmdSaveRecord

DoCmd.OpenForm "frm02_1 - Caracterização da viagem", acNormal, "", "", , acNormal

DoCmd.RunCommand acCmdRecordsGoToNew

DoCmd.GoToControl "P3"

End If

End Function

Este código é acionado pelo evento "Ao Clicar" de um botão de comando no formulário 1. Funciona bem no que diz respeito aos comandos que imputam valores a controles e no comando de um salto lógico condicional que existe no questionário. Só que, como disse acima, seus dados sobrescrevem os do registro que já existe. Tentei acrescentar a linha DoCmd.RunCommand acCmdRecordsGoToNew, seguindo a mesma estratégia que funcionou na transição do último para a primeiro formulário, mas não dá certo. Recebo uma mensagem de erro: "Erro em tempo de execução (2046): O comando ou ação "RegistroIrParaNovo" não está disponível agora".

Obrigado.

Microsoft 365 e Office | Access | Para uso doméstico | Windows

Pergunta bloqueada. Essa pergunta foi migrada da Comunidade de Suporte da Microsoft. É possível votar se é útil, mas não é possível adicionar comentários ou respostas ou seguir a pergunta.

0 comentários Sem comentários

Resposta aceita pelo autor da pergunta

Anônima
2012-02-04T14:19:53+00:00

Olá Hélvio,

se o seu objetivo é abrir o frm2 para inserir um novo registro, use o parâmetro acFormAdd, da mesma forma que fez no frm1:

Docmd.OpenForm "frm02_1 - Caracterização da viagem",,,,acFormAdd

Esta resposta foi útil?

0 comentários Sem comentários

2 respostas adicionais

Classificar por: Mais útil
  1. Anônima
    2012-02-03T21:51:58+00:00

    Obrigado, Bruno. Eu sou novo no Access, então não tenho segurança do que faço, mas acho que já existe esta relação. Pelo menos foi a minha intenção.

    Obrigado.

    Esta resposta foi útil?

    0 comentários Sem comentários
  2. Anônima
    2012-02-03T18:53:55+00:00

    Olá,

    Aparentemente seu problema está relacionado à relação entre as tabelas que, ao invês de incrementar os novos dados, ele sobrescreve os dados já existentes.

    Não tenho muito conhecimento no Access, porém imagino que uma solução seria salvar cada sessão do questionário separadamente e, usando uma chave primária para todas as tabelas, unificar as informações.

    Creio que o melhor seria aguardar algum dos colaboradores da comunidade que pudessem auxiliar nesta dúvida.

    Espero ter ajudado.

    Até mais!!!

    Esta resposta foi útil?

    0 comentários Sem comentários