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.