открыть из вновь введенной записи перед сохранением - PullRequest
1 голос
/ 21 июля 2011

В Access 2007. Мы вводим новую запись в форму.Затем мы нажимаем кнопку с действием макроса, чтобы открыть другую форму.Что я могу сделать, чтобы форма открылась, но была связана с новой записью?Я понимаю, что мне нужен первичный ключ в новой форме и т. Д. Если запись была сохранена, я могу открыть вторую форму с этими данными.Но Мой вопрос: когда это все еще новая запись / форма, нам нужно перейти непосредственно к связанной форме ...

Пожалуйста, поделитесь некоторыми указаниями по этому вопросу.

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Если я понимаю ваш вопрос, вам нужно сделать следующее:

  1. Добавить новую запись в форму1
  2. Нажмите кнопку на форме Form1, чтобы открыть форму Form2
  3. Когда открывается форма 2, она содержит информацию из формы 1

У меня есть процесс, который делает что-то похожее в моей базе данных, и мы так поступаем.

  1. У пользователей есть форма для ввода новых записей
  2. Они используют нажатие кнопки, чтобы опубликовать новые данные в таблице. Во время этого процесса я возвращаю первичный ключ к новой записи. Затем, в завершение процесса нажатия кнопки, я говорю ей открыть новую форму и заполнить ее первичным ключом, который я только что получил.
  3. Новая форма открывается с использованием PK для записи.

Мой код для нажатия кнопки в VBA:

Private Sub OK_Click()
  Dim rst As DAO.Recordset
  Dim rst1 As DAO.Recordset
  Dim sqlStr As String
  Dim RptID As Variant

  Set rst = CurrentDb.OpenRecordset("tble_Investigations", dbOpenDynaset, dbSeeChanges)
  ' here you need to add each of your fields from the form
  rst.AddNew
      rst![Table.Column1] = Me![FormField1]
      rst![Table.Column2] = Me![FormField2]
      rst![Table.Column3] = Me![FormField3]
  rst.Update

  ' my sql string to return the new ID of the record I just added
  sqlStr = "Select Max([ID]) as [MaxOfID] from tble_Investigations;"
  Set rst1 = CurrentDb.OpenRecordset(sqlStr, dbOpenDynaset, dbSeeChanges)
  rst1.MoveFirst

  RptID = rst1![MaxOfID]

  'here we open the Form2 with the new id.
  DoCmd.OpenForm "Frm_Details", acNormal, , "[ID]= " & RptID, acFormEdit, acWindowNormal
  DoCmd.Close acForm, "Frm_New", acSaveYes

End Sub

EDIT:

Исходя из того, что вы говорите, звучит так, будто вы делаете следующее:

Private Sub OK_Click()
  Dim rst As DAO.Recordset
  Dim rst1 As DAO.Recordset
  Dim sqlStr As String
  Dim RptID As Variant

  Set rst = CurrentDb.OpenRecordset("t_Evaluation", dbOpenDynaset, dbSeeChanges)
  ' here you need to add each of your fields from the form
  rst.AddNew
      rst![ExecutionLeadOrg] = Me![ExecutionLeadOrg] 'the field from your form that matches the table column
      rst![TitleID] = Me![TitleID]
      rst![t_Evaluation.EvalTypeID] = Me![t_Evaluation.EvalTypeID]
      rst![SectionID] = Me![SectionID]
      rst![LOBEvaluation] = Me![LOBEvaluation]
      'you need to continue doing this for each field on your form
  rst.Update

  ' my sql string to return the new ID of the record I just added
  sqlStr = "Select Max([EvaluationID]) as [MaxOfID] from t_Evaluation;"
  Set rst1 = CurrentDb.OpenRecordset(sqlStr, dbOpenDynaset, dbSeeChanges)
  rst1.MoveFirst

  RptID = rst1![MaxOfID]

  'here we open the Form2 with the new id.
  DoCmd.OpenForm "f_LOBevalPopUpEntry", acNormal, , "[EvaluationID]= " & RptID, acFormEdit, acWindowNormal
  DoCmd.Close acForm, "F_EvalNew", acSaveYes

End Sub
0 голосов
/ 22 июля 2011

Вам нужно только сохранить текущую запись, а затем запустить следующую форму в той же записи.Пока запущенная форма является моделью, с вами все будет в порядке.И чтобы избежать путаницы здесь, форма модели - ОГРОМНАЯ разница, тогда как запуск формы диалога.

Однако вы также можете рассмотреть возможность запуска формы диалога.

Когда вы вернетесь к предыдущейформа, Access, как правило, будет отображать любые обновления.

Код, который вам нужен, это:

If me.Dirty = True then Me.Dirty = false
Docmd.OpenForm "name of next form",,,"id = " & me!id

Кроме того, при запуске другой формы в серии операций, это хорошийИдея принудительно сохранить запись, как указано выше, в любом случае.

Таким образом, требуется только две вышеуказанные строки кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...