Использование Access и VBA: копирование информации между формами
Немного обыскал и не смог найти существующий пост с моим точным вопросом.
Я создаю базу данных Access (2003), используя несколько форм и таблиц, которые должны общаться и обмениваться информацией друг с другом (т. Е. Имя / фамилия и т. Д.). Основная форма / таблица, "Персонал", будет содержать большую часть информации, в то время как другие формы / таблицы будут содержать только информацию, относящуюся к определенным ситуациям / обстоятельствам, поэтому не каждая запись в "Персонал" будет иметь одновременную запись в " Наемный ", например. Если запись с таким именем уже существует, я хотел бы, чтобы MsgBox сообщил мне об этом и открыл эту запись (в форме, для редактирования), если не будет создана новая запись, автоматически заполняется предварительно выбранными полями (т.е. - имя / фамилия).
После выбора параметра в раскрывающемся меню открывается или открывается соответствующая форма, например, "Нанимается" (эта часть работает).
Копирование информации через формы не работает.
Dim rstPers, rstHired As DAO.recordset
Dim LastName As String
If status = "hired" Then
DoCmd.OpenForm "Hired Information"
Set rstPers Forms!Personnel.RecordsetClone
Set rstHired Forms![Hired Information].RecordsetClone
????
...
End If
Я пытался сделать это несколькими способами, но ничего не получается. Ничто не заполняет новую форму или таблицу. Я смотрю на это неправильно? Должен ли я попробовать другой подход?
Надеюсь, мое объяснение имеет смысл. Спасибо за любую помощь.
-Charles
1 ответ
У тебя действительно плохой подход. Ваши формы связаны с таблицей. Поэтому вам следует избегать, насколько это возможно, манипулирования или извлечения данных формы напрямую с использованием набора записей, вместо этого старайтесь извлекать эти данные непосредственно из таблицы.
Поэтому, если вы хотите открыть форму "Информация о найме":
Dim RS As Recordset
Dim IDperson As String
IDperson = me.ID ' or whatever
Set RS = CurrentDb.OpenRecordset("SELECT ID FROM TableHired WHERE ID='" & IDperson & "'")
If RS.BOF Then
' No record exist - Open form in record creation
DoCmd.OpenForm "FormHired", acNormal, , , acFormAdd
Else
' record exists, open form and position it oon the record's ID
DoCmd.OpenForm "FormHired", acNormal, , "ID='" & RS!ID & "'", acFormEdit
End If
Конечно, это не сработает, потому что вы не предоставили достаточно информации.
Просмотрите этот код и адаптируйте его с вашими именами полей (ID), именем таблицы (TableHired) и FormName (FormHired) и следуйте ситуации, где и как вы будете вызывать его. Также, если ваш идентификатор не является строкой, вы должны удалить кавычки в SQL