Вполне возможно запустить SQL под VBA, но я подозреваю, что может быть проще просто правильно настроить форму.Например, если вы установите идентификатор в качестве полей «Связать дочерний и основной» для подчиненной формы лабораторных результатов (которую, я надеюсь, вы используете), он будет заполнен автоматически.Кроме того, также возможно установить значение по умолчанию для элемента управления на значение, которое было ранее введено с очень небольшим кодом.Поэтому я предлагаю вам добавить некоторые примечания о том, чего вы хотите достичь.
Некоторые дополнительные примечания, основанные на последующем комментарии
Из ваших комментариев кажется, что у вас естьминимум три соответствующие таблицы:
Пациенты
PatientID PK, Counter
Процедуры
TreatmentID PK, Counter
PatientID FK
TreatmentTypeID FK
LabResults
LabResultID PK, Counter
TreatmentID FK
PatientID FK <-- Optional, can be got through TreatmentID
LabResultTypeID FK
Кроме того, вам понадобится таблица TreatmentTypes, в которой перечислены два текущих лечения и предусмотрены следующие типы лечения:
TreatmentTypes
TreatmentTypeID PK, Counter
TreatmentDescription
Вам также понадобятся:
LabResultTypes
LabResultTypeID PK, Counter <-- This can be referenced in the LabResults table
TreatmentTypeID FK
Существуют аргументы для PK, отличные от предложенных, в том смысле, что у вас есть естественные ключи, но ядумаю, что при работе с Access проще использовать автономные номера, однако вам понадобятся индексы для естественных ключей.
Я настоятельно рекомендую, чтобы во всех таблицах также содержалась дата создания, дата изменения / обновления и идентификатор пользователя для обоих.,Access не хранит эти данные, вы должны сделать это самостоятельно.Дата создания может быть установлена значением по умолчанию, и если вы используете версию 2010 года, другие поля могут иметь «триггеры» (макросы уровня данных), в противном случае вам понадобится код, но это не так уж сложно.Также обратите внимание, что эти же «триггеры» можно использовать для вставки соответствующих записей: Познакомьтесь с конструктором макросов Access 2010 .
Ваша форма будет содержать записи для каждого пациента и две подчиненные формы, «Обработки» и «LabResults».Подчиненная форма «Обработки» связана с таблицей «Обработки», имеющей поля PatientID для LinkChild и Master, а также поле со списком для TreatmentTypeID:
Rowsource: SELECT TreatmentTypeID, TreatmentDescription FROM TreatmentTypes
ColumnCount: 2
BoundColumn: 1
После добавления типа обработки в подформу «Обработки» можно выполнить запрос или выполнитьSQL под VBA.Вы можете использовать событие «После вставки» для формы, содержащейся в подчиненной форме обработок, или кнопку, событие «После вставки» имеет преимущества, но оно запускается только тогда, когда пользователь сохраняет запись или удаляется из записи, что является тем же самым.Работая из подчиненной формы обработки и события After Insert, SQL будет выглядеть следующим образом:
''Reference Microsoft DAO x.x Object Library
Set db = CurrentDB
sSQL = "INSERT INTO LabResults (TreatmentID, PatientID, LabResultTypeID) " _
& "SELECT " _
& Me.TreatmentID & ", " _
& Me.PatientID & ", " _
& "LabResultTypeID FROM LabResultTypes " _
& "WHERE TreatmentTypeID " = & Me.TreatmentTypeID
db.Execute sSQL
MsgBox "Records inserted: " & db.RecordsAffected
Me.Parent.LabResults_Subform.Form.Requery
Запрос также должен содержать дату и имя пользователя, как предложено выше, если ваша версия меньше2010, и вы не настроили триггеры.
У вас будет соблазн использовать таблицы данных, я подозреваю, для подчиненных форм.Я предлагаю вам противостоять искушению и использовать либо отдельные формы непрерывных форм, они более мощные.Для интересного подхода, возможно, вы захотите взглянуть на образец базы данных клиентов Northwind.