Создайте несвязанную форму в Acess 2007 - PullRequest
1 голос
/ 21 мая 2010

У меня есть приложение для доступа, которое имеет форму, позволяющую пользователю вводить примечания к регистру. Основное поле этой формы связано с полем SQL Server varchar (MAX) в исходной таблице. Поскольку пользователи переключились на Access 2007, их программа продолжает падать, когда они находятся в форме примечаний к делу. В качестве возможного решения этой проблемы я хотел бы попытаться отменить привязку этой формы и перестроить ее как несвязанную форму.

Эта форма должна иметь возможность добавлять и обновлять записи в моей базе данных SQL Server. Также необходимо иметь возможность просматривать записи. Я думаю, я в растерянности относительно того, с чего начать. Любые предложения / фрагменты кода приветствуются.

1 Ответ

0 голосов
/ 22 мая 2010

В качестве отправной точки попробуйте Google на «несвязанной форме в Access». Не отвлекайся на PacMan! ;)

В любом случае, основная идея несвязанной формы состоит в том, чтобы загрузить данные в несвязанные элементы управления из набора записей, а затем сохранить их после завершения редактирования. Это означает, что вам нужны эти вещи:

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

  2. код для открытия набора записей и записи данных из полей в соответствующие элементы управления в форме.

  3. элементы управления для сохранения записи обратно в базу данных, которая будет использовать обновление 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). В этом случае со связанным набором записей формы и несвязанным текстовым полем для редактирования вы должны сделать следующее:

  1. в событии OnCurrent формы загрузите данные несвязанных полей в соответствующие несвязанные текстовые поля.

  2. в событии (ях) 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 () можно прочитать из базового источника записей формы и записать в текстовое поле. Вы должны увидеть, если это работает.

...