Access 2002

Набор записей типа dynaset


Если класс открыл набор записей типа dynaset (хотя ADO и не поддерживает такие наборы записей, она может создавать подобные наборы), код формирует в переменной strFilter строку для передачи методу FindFirst. Если же класс открыл набор записей с прямым доступом к таблице, используется метод Seek, выполняющий индексный поиск данных. Обратите, что в первом случае вызывается функция FixQuotes, код которой приведен  6.14. Метод

FindFirst (и применяемый в ADO метод Filter) требует задания строки, содержащей критерий поиска. Строковые значения в этом критерии должны быть ограничены специальными символами: в ADO — апострофами, а в DAO — апострофами или двойными кавычками. С этим связана серьезная проблема, о которой подробно рассказывалось в главе 5. Кратко ее можно описать так: если искомая строка содержит символы-ограничители, нужно каким-то образом указать, что они являются частью строки, а не ограничителями всего значения. И ADO, и DAO позволяют с этой целью дублировать символы-ограничители. Это означает, что, встретив два апострофа в строковом значении, ограниченном апострофами, и ADO, и DAO интерпретируют эту пару как один апостроф внутри строки. Поэтому функция FixQuotes получает строку и возвращает ее эквивалент, заключенный в символы-ограничители, с продублированными символа- ми-ограничителями внутри строки.

Существует одна маленькая проблема (ну куда от них деться?): ADO не умеет обрабатывать строки, содержащие более одного продублированного символа-ограничителя. Вероятно, это просто ошибка, которая, может быть, будет исправлена к тому времени, когда вы начнете читать эту книгу. В Microsoft ее обнаружили еще до того, как мы сообщили о ней, поскольку в Access существует еще Один недокументированный символ-ограничитель — «#».

Комментарии закрыты