|
Программирование >> Проектирование интерфейса пользователя
Предложение WHERE может включать в себя также вложенные осы Более подробно вопросы программирования на языке SQL приведены в главе 16-й час. Применение языка SQL . Свойство Filter Объект класса Recordset содержит полезное свойство - Filter. Переменная Filter принадлежит типу variant и выполняет роль, несколько схожую с назначением предложения WHERE конструкции SQL. Общий способ использования свойства Filter заключается в присваивании ему символьной строки, которая содержит одну или несколько записей-предикатов, оформленных в виде ИмяПоля Оператор Значение. Предикаты соединяются логическими операторами и при необходимости заключаются глые скобки. Если после строки 20 листинга 15.5 включить строку RecordSet. Filter = SearchFieldName & = & FindValue & ....., то в дальнейшем условное выражение f больше не понадобится. Итак, вы ознакомились с несколькими вариантами организации поиска записей в наборе данных. Какой из них выбрать в том или ином случае - решать вам. Все они помогут вам достичь цели; весь вопрос в том - насколько эффективно. Сохранение данных в коллекциях Коллекции применяются во многих ситуациях. Класс Recordset, например, содержит коллекцию Fields, а многие визуальные компоненты (например списки) пользуются коллекциями для отображения данных на экране. Часто возникает необходимость в извлечении элемента коллекции, представляющей информацию в базе данных, и копировании его в коллекцию визуального компонента. Единого способа взаимного копирования элементов коллекций не существует; впрочем, эта задача достаточно проста, и ниже предлагается способ ее решения. Вначале определим общую последовательность действий, необходимых для копирования элементов коллекций. Выбрать коллекцию, которая будет выступать в роли источника данных. Определить или создать экземпляр коллекции, принимающей данные. Построить цикл, на каждом шаге которого очередной элемент коллекции-источника будет считываться, а затем добавляться в коллекцию-приемник с помощью стандартного метода Add. В листинге 15.7 представлен текст примера. Листинг 15.7. Пример копирования элементов одной коллекции в другую 29: 30: 31: 32 : 3 3 34: 36 : Dim Target As New Collection RecordSet.MoveFirst Do While Not RecordSet.EOF Call Target.Add(RecordSet( FIRST NAME ) .Value) & & RecordSet( LAST NAME ).Value) RecordSet.MoveNext Loop Dim Artist As Variant For Each Artist In Target Debug.Print Artist Next Artist Set Target = Nothing RecordSet.Close Приведенный код необходимо рассматривать в контексте примера лис-1 тинга 15.5 (достаточно вставить его в листинг 15.5 после строки 24, в которой выполняется открытие набора записей RecordSet. Target (см. строку )). Это произвольная коллекция. После ее определения выполняется цикл, на каждом шаге которого считывается очередная запись набора данных RecordSet и значение объекта Field, связанного с полем ARTIST, заносится в новый элемент коллекции Target. Для определения факта достижения последней записи RecordSet используется метод EOF. В строке 28 в коллекции сохраняется поле, а не его значение. Строки 33-35 содержат цикл, позволяющий отобразить в окне Immediate содержимое каждого элемента Target. Далее выполняется оставшаяся часть кода листинга Если придется работать с коллекциями других видов, достаточно незначительно изменить рассмотренный код. Самое существенное отличие примера от реальной программы состоит в нецелесообразности открывать/создавать обе коллекции в пределах одной и той же процедуры (функции) - коллекция Target, например, может принадлежать визуальному компоненту, размещенному на одной из экранных форм приложения. Использование Addltem и Removeltem В Microsoft Access 2002 в элементы управления список и поле со списком было добавлено два метода - Addltem и Remove it em. : Метод Addltem получает два аргумента и добавляет элемент в коллек-is S цию, представляющую собой список или поле со списком. Метод Re-moveltem получает в качестве аргумента индекс и удаляет из коллекции О элемент с этим индексом. Синтаксис вызова методов следующий: Объект.AddItem(CTpoKa, Индекс) А Объект.Removeltem(Индекс) При работе с именем ComboNamesList в поле со списком необходимо сначала инициализировать список, используя массив (или другой источник данных) посредством кода, аналогичного приведенному в листинге 15.8. Если вы намерены добавлять элементы в список вручную, а не из источника данных, в диалоговом окне Properties установите свойство Row Source Type на Value List. Свойство RowSourceType можно изменить также в коде программы (см. приведенный ниже листинг). Листинг 15.8. Использование метода Addltem для добавления элементов списка 2 : 3: 5: 6 : 7: 8: 9: Private Sub Form Load() Dim Data As Variant Data = Array( Иван Иванов , Федор Федоров , Наталья Петрова , Сидор Ильин ) = Value List Dim I As Integer For I - Lbound(Data) To UBound(Data) Caii ComboNamesList.Addltem(Data (I) , I) Next I В листинге 15.8 в качестве источника данных используется массив. Чтобы заполнить список вручную, необходимо задать свойство RowSourceType равным Value List (см. строку 5). В цикле (строки 7-9) выполняется копирование данных из массива в список. Второй аргумент - это индекс элемента в списке. Чтобы удалить элемент из списка или поля со списком, используйте метод Remove Item. Помните, что при удалении происходит перенумерация оставшихся элементов списка, поэтому для выполнения этой операции не удастся использовать цикл For Next. Ниже приведен пример использования метода Removeltem. Do While {ComboNamesList.ListCount>0) Call ComboNamesList.Removeltem(O) Loop В этом цикле элементы с нулевым индексом будут удаляться до тех пор, пока не исчезнут со списка. А можно заполнить список данными из источника данных. Для этого задайте свойство RowSourceType равным Table/Query и укажите источник данных. Добавить в форму список или поле со списком вам поможет мастер, подробнее о котором рассказано в главе 19-й час. Создание экранных форм . Использование информационных ресурсов и поиск готовых решений За последние годы выстроены горы программного кода и плещется море вспомогательных данных - ни одна книга не в состоянии вместить в себя всю эту информацию. Издатели состязаются в попытках выпуска самых разнообразных и объемных пособий, посвященных одной и той же теме. В этом кратком разделе будут названы те информационные источники, которые окажут вам эффективную помощь в освоении и использовании средств класса ADO. Настоящее издание, разумеется, поможет взять удачный старт, но дорога, которую вам предстоит осилить, достаточно длинна. Вот в чем парадокс - тем, кто любит и умеет профаммировать, возможно, попросту не нужны тысячи страниц технической документации, но для новичка те же тысячи страниц могут стать непреодолимым препятствием. Наилучший совет таков. С одной стороны, следует осваивать материал по мере необходимости, в процессе работы над конкретной задачей. Но если вы хотите добиться успеха, вам никуда не уйти от серьезной работы по изучению самых передовых и эффективных алгоритмов, приемов работы и образцов профаммного кода. Вы сможете начать профаммировать для Access сразу же по завершении чтения этой книги; но насколько далеко вы продвинетесь в профессиональном смысле - зависит от ваших дальнейших действий, желаний и настойчивости. Новый термин Объектная модель - это иерархическая диафамма классов, которые реализованы в той или иной инструментальной оболочке и используются для создания профамм. Термин программа служит для обозначения исполняемого модуля, динамической библиотеки или компонента. В сети World Wide Web вы найдете полезную информацию по этому вопросу, например, по адресу http: www.microsoft.com/data/ado. Резюме Основная причина, побуждающая приобщиться к технологиям профаммирования на языке VBA для системы Access 2002, может быть связана с необходимостью решения задач обработки информации из баз данных. В ходе этого занятия вы изучили
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |