2010-05-21 3 views
1

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

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

ответ

0

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

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

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

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

  3. элементы управления, чтобы сохранить запись в базу данных, которая будет использовать обновление SQL для записи значений в несвязанных элементах управления обратно в базу данных. Я предпочитаю не обновлять поля, которые не изменились (потому что у меня много реплицированных приложений Jet, а несколько обновлений могут привести к ненужным конфликтам репликации). Вы можете сравнить данные в управляющих элементах с данными в исходном наборе записей (если вы откроете его как набор записей типа моментального снимка, он не будет отображать какие-либо обновления с момента его открытия) и напишите свой SQL UPDATE только для полей, где значения не совпадают. Вам придется учитывать Nulls.

Общая практика назвать элементы управления точно такие же, как поля они соотносятся с так что вы можете цикл сбора полей в Recordset и загрузить данные в систему управления:

For Each fld In rs.Fields 
    Me.Controls(fld.Name) = fld.Value 
    Next fld 

Вы можете сделать аналогично для сохранения данных и проверки контрольных значений по отношению к исходным значениям записей.

Я не знаю, работает ли это с полями SQL Server VarChar() или нет, но вы также можете попробовать, что я называю «полу-связанной» формой, где вы загружаете набор записей с помощью свойства RecordSource формы, но не 't привязать поля к элементам управления. Таким образом, форма привязана, но элементы управления не являются. Я очень часто делаю это с полностью связанной формой, где я делаю поля memo несвязанными (чтобы избежать опасности повреждения указателя поля memo в кончиках 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 заднего конца, вы хотите сохранить запись сразу после записи значения мемо поля, так как в противном случае вы не избегаете опасности развращения указателя поля памятки. С задней частью SQL Server вам может понадобиться или нет, так как проблемы полностью разные. Сохранение освободит блокировку записи, но вам может и не нужно этого избегать.

Кроме того, я предполагаю, что данные VarChar() могут быть прочитаны из базового источника записи формы и записаны в текстовое поле. Вам нужно будет посмотреть, работает ли это.

+0

Мне нравится идея полу-связанной формы. Давайте посмотрим, получилось ли я правильно. в событии OnCurrent я открываю свой набор записей и заполняю несвязанное поле в форме, затем закрываю набор записей. В AfterUpdate моего несвязанного поля я открываю набор записей и обновляю его, а затем закрываю его. Если я настроил его таким образом, как мне обрабатывать добавление записей через форму? Прямо сейчас, я планирую иметь только одно несвязанное поле в форме. – DoubleJ92

+0

С формой «полу-привязка» вы вообще не открываете набор записей - поле загружается в базовый источник записей формы. Что касается добавления записей в эту «полу-связанную» форму, вы бы сделали это так же, как и в полностью связанной форме. –

Смежные вопросы