Использование 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

Другие вопросы по тегам