Найти не вести себя последовательно в форме .ADP - PullRequest
0 голосов
/ 23 ноября 2011

Что-то не так с приведенным ниже кодом (в форме ADP)?

Private Sub cmbSearchCode_AfterUpdate()
  Me.Recordset.Find "usr_cde = '" & ctl & "'"`
  ctl = null
end sub

Он ведет себя беспорядочно: в первый раз после открытия формы он работает, а затем внезапно кажется, что он больше ничего не делает.

Я заменил его на этот код, который, кажется, не имеет проблем:

With Me.RecordsetClone
    .Find "usr_cde = '" & ctl & "'"
    Me.Bookmark = .Bookmark
End With
ctl = Null

Любое объяснение? Клиент A2003, сервер SS 2000 (я знаю, что он старый, я ничего не могу с этим поделать!)

1 Ответ

0 голосов
/ 10 декабря 2011

Свойство Form.Recordset является довольно новым дополнением к доступу, в текстах помощи есть несколько кусочков, именно их объединение, как мне кажется, вызывает вашу проблему.

Если форма основана на запросе, например, ссылаясь на Свойство Recordset является эквивалентом клонирования объекта Recordset используя тот же запрос. Однако в отличие от использования RecordsetClone свойство, изменяющее, какая запись является текущей в возвращенном наборе записей свойством Recordset формы также устанавливает текущую запись форма.

Итак, поначалу он не выглядит так, как на самом деле, но на самом деле клонирует набор записей и создает его новую копию. Просто это синхронизирует.

Итак, у вас есть новый Объект Recordset и вот в чем проблема:

Новый объект набора записей автоматически добавляется в набор записей Коллекция при открытии объекта, и автоматически удаляется при Вы закрываете его.

В первый раз вы клонируете найденный набор записей в usr_cde, и форма волшебным образом устанавливает текущую запись в соответствие.

Во второй раз вы клонируете найденный набор записей в usr_cde, но волшебная синхронизация записей все еще застревает на первой копии набора записей, которая была сохранена в коллекции наборов записей.

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

'untested
Private Sub cmbSearchCode_AfterUpdate() 
  Dim rs as adodb.Recordset

  Set rs = Me.Recordset
  rs.Find "usr_cde = '" & ctl & "'"`
  rs.Close

  ctl = null
end sub

У меня не было возможности проверить это, но у вас уже есть работающее решение, использующее .Bookmark. Я надеюсь, что это объясняет неожиданное поведение.

...