В качестве отправной точки попробуйте Google на «несвязанной форме в Access». Не отвлекайся на PacMan! ;)
В любом случае, основная идея несвязанной формы состоит в том, чтобы загрузить данные в несвязанные элементы управления из набора записей, а затем сохранить их после завершения редактирования. Это означает, что вам нужны эти вещи:
элементы управления для выбора нужной записи, какая-то функциональность поиска.
код для открытия набора записей и записи данных из полей в соответствующие элементы управления в форме.
элементы управления для сохранения записи обратно в базу данных, которая будет использовать обновление SQL для записи значений в несвязанных элементах управления обратно в базу данных. Я предпочитаю не обновлять поля, которые не изменились (потому что я делаю много реплицированных приложений Jet, и многократные обновления могут привести к ненужным конфликтам репликации). Вы можете сравнить данные в элементах управления отмены с данными в исходном наборе записей (если вы откроете его как набор записей типа снимка, он не будет отражать никаких обновлений с момента его открытия), и напишите свой SQL UPDATE только для полей, где значения не совпадают. Вы должны будете учитывать Nulls.
Обычная практика - именовать элементы управления точно так же, как поля, которым они соответствуют, чтобы вы могли зациклить коллекцию полей набора записей и загрузить данные в элементы управления:
For Each fld In rs.Fields
Me.Controls(fld.Name) = fld.Value
Next fld
Аналогичным образом можно сохранить данные и проверить контрольные значения по сравнению с исходными значениями набора записей.
Я не знаю, работает ли это с полями SQL Server VarChar () или нет, но вы также можете попробовать то, что я называю «полусвязанной» формой, где вы загружаете набор записей со свойством формы RecordSource, но не связать поля с элементами управления. Таким образом, форма связана, а элементы управления - нет. Я очень часто делаю это с полностью связанной формой, где я делаю мемо-поля несвязанными (чтобы избежать опасности повреждения указателя мемо-поля в бэкэндах Jet / ACE). В этом случае со связанным набором записей формы и несвязанным текстовым полем для редактирования вы должны сделать следующее:
в событии OnCurrent формы загрузите данные несвязанных полей в соответствующие несвязанные текстовые поля.
в событии (ях) AfterUpdate несвязанного элемента (ов) запишите данные в несвязанном текстовом поле (ах) обратно в источник записей.
Эти два шага будут выглядеть примерно так:
Private Sub Form_Current()
Me!txtMemo = Me!Memo
End Sub
Private Sub txtMemo_AfterUpdate()
Me!Memo = Me!txtMemo
Me.Dirty = False
End Sub
В случае с Jet / ACE вы захотите сохранить запись сразу после того, как напишите значение поля memo, потому что в противном случае вы не избежали испортить указатель поля memo. С SQL Server вы можете или не должны делать это, так как проблемы совершенно разные. Сохранение снимет блокировку записи, но вам не нужно этого избегать.
Кроме того, я предполагаю, что данные VarChar () можно прочитать из базового источника записей формы и записать в текстовое поле. Вы должны увидеть, если это работает.