- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
VBA для чайников - Стив Каммингс
Шрифт:
Интервал:
Закладка:
Используйте метод AddNew для занесения новой записи в набор или перехода к новой записи. Если вы уже создали новый объект Recordset под названием rstIng, все, что вам необходимо для добавления новой записи, - это инструкция rst.Ing. После этого вы можете приступать к заполнению полей записи (подробности в разделе '"Изменение данных поля" дальше в настоящей главе). Однако, если хотите, можете указать значения полей сразу при создании новой записи. Метод -AddXew позволяет вам указывать поля и их значения, как показано ниже:
With rstIng
Array ( "Имя", "Возраст", "Пол"; .
Array("Анна", 42, "Ж")
End With
Как видно из этого примера, вы передаете аргументы методу AddNew в виде пары массивов, первый из которых содержит имена полей, а второй - их значения. В этом примере я использовал функцию Array VBA для создания на ходу массива, содержащего строковые значения. Вместо этого вы можете использовать переменные, представляющие массивы, которые вы создали раньше. В любом случае подобный прием для обеспечения значений полей массивов в момент создания новой записи означает, что вам не нужно вводить отдельную строку кода для каждого поля.
Для удаления текущей записи предназначен метод Delete.
Работа с текущим значением определенного поля с помощью программного кода так же проста, как и считывание значения свойства Value этого поля. Укажите поле по имени или по его индексному номеру, как показано в приведенных ниже примерах. Обратите внимание на то, что свойство Value является свойством по умолчанию, поэтому указывать его в коде не обязательно:
If rstYGate.Fields ("Service visits").Value >10
MsgBox "This unitneeds a major over haul!"
End If
strCurrentFieldData = rstYGate.Fields(3)
Поскольку коллекция Fields является коллекцией по умолчанию объекта Recordset, вам не обязательно указывать ее по имени. Для обращения к полю просто укажите его имя, предварительно поставив восклицательный знак и заключив в квадратные скобки имена, содержащие пробелы: rstYGatelDate = #5/15/2001#
With rstYGate
intltems =![Oil cans]
End With
Изменение (обновление) данных поля определенной записи с помощью ADO совсем несложно. Все, что вам необходимо сделать, - указать новое значение, после чего переместиться к другой записи, как показано ниже (здесь предполагается, что набор записей rstBucket уже открыт и содержит определенные данные):
KithrstBucket
.Fields ( 0).Value = "Love"
.MoveNext
End With
А если вы не хотите перемещаться от текущей записи, можно внести изменения в базу данных, воспользовавшись методом Update. В приведенном ниже примере я воспользовался преимуществами, обеспечиваемыми стандартным состоянием коллекции Fields и свойством Value, чтобы свести к минимуму код, который необходимо написать:
With rstBucket
!Value =8.93
.Update
End With
Как и метод AddNew, метод UpDate позволяет вам передать значения новых полей с помощью пары массивов, как показано ниже:
With rstBucket
.Update Array("Имя", "Звание", "Любимый напиток"),
Array("Лола", "Младший лейтенант", "Кофе")
End With
Используйте цикл Do для проверки или операций с несколькими записями в наборе, как показано в следующем примере;
'Циклическое перемещение между записями в наборе
With rstInPeace
Do Until .EOF
Debug.Print.Fields(0)
.MoveNext
Loop
End With
SetrstInPeace = Nothing
End Sub
Использование объекта Command
В ADO объект Command представляет команду, такую как инструкция SQL или сохраненная процедура, которая может применяться к источнику данных. Вы можете использовать объекты Commands для получения записей из объектов Recordset, а также выполнения таких операций, как обновление или удаление нескольких записей. (Пример программного кода, приведенный ниже, выполняет только последние операции; примеры, использующие наборы записей, приведены раньше в настоящей главе.)
Не удивляйтесь, если вы не сможете использовать объект Command с определенным источником данных. Средства доступа OLE DB Provider не нужны для реализации объекта Command, а значит, и не требуются для обработки параметров.
Хранимые процедуры - это запросы и другие операции, которые вы или кто-нибудь еще определили раньше (обычно с помощью SQL) и сохранили в источнике данных. В качестве хранимых процедур можно привести запросы Access. Несмотря на то, что вы можете спроектировать запрос Access визуально с помощью сетки, он представляет собой инструкцию, которую вы увидете, выбрав представление SQL. Запрос сохраняется как часть файла базы данных .mdb, к которой он относится. Сетевые базы данных, такие как SQL Server, также позволяют вам определять подобные хранимые процедуры.
Хранимая процедура уже готова к использованию, поэтому вам необходимо знать только ее имя: вы можете спокойно забыть обо всех тонкостях определения запроса с помощью программного кода. Еще важнее, что хранимые процедуры выполняются намного быстрее и более надежны при использовании в сети, чем эквивалентные инструкции SQL. Однако инструкции SQL для вашей хранимой процедуры не являются частью кода, а значит, вы не сможете при необходимости их изменять.
Настройка объекта Command
Для настройки объекта Command вам следует начать с объявления соответствующей переменной и создания собственно объекта. После этого вы можете использовать свойства объекта для связи его с подключением, для определения команд, которые должны выполняться в форме инструкции SQL или имени хранимой процедуры, а также для определения типа операции. После этого вы можете использовать метод Execute объекта Command для действительного выполнения команды. Ниже приведен пример инструкции обновления SQL.
Обратите внимание на свойство CommandType, которому вы должны присвоить значение adCmdText для передачи инструкции SQL источнику данных:
Dim consecrate As Connection
Dim cmdVBA As Command
Dim prmDate
( Connection...)
Set cmdVBA = New Command
With cmdVBA
.ActiveConnection = consecrate
.CommandText = _ "UPDATE Bicycles SET OnSale = True" _
& "WHERE Category = 4;"
.CommandType = adCmdText
.Execute
End With
Использование параметров команды
Если для выполнения команды требуются входные параметры (значения, передаваемые команде при выполнении, например диапазон данных или критерий поиска), вы должны определить индивидуальные объекты Parameter, добавляя их к коллекции Parameters объекта Command. Пример, приведенный ниже, иллюстрирует, как это все работает, и как можно использовать объект Command для выполнения хранимой процедуры, а не инструкции SQL:
Dim consecrate As Connection
Dim cmdVBA As Command
Dim prmDate
( Connection...)
Set cmdVBA = New Command
With cmdV3A
.ActiveConnection = consecrate
.CommandText = "qryDeleteOldRecords"
.CommandType = adCmdStoredProc ' in Jet, _
adCmdTable
End With
Set prmDate - New Parameter
With prmDate
.Name = "Date"
.Value = InputBox "Enter the cut-off date."
.Type = adDate
.Direction = adParamlnput
End With
With cmdVBA
.iarameters.Append prrnDate ' Добавление параметра
.Execute ‘ Выполнение команды
End With
Если вы выполняете запрос, сохраненный в базе данных Jet/Access, используйте значение adCmdTable свойства CommandType объекта Command, а не adCmdStoredProc, относящееся к SQL Server и многим другим серверам баз данных.
Работа с SQL
Достаточно просто открыть набор записей с помощью ADO, но заполнение его данными - задача гораздо сложнее. Если вы намерены создавать серьезные приложения баз данных, вам следует изучить SQL, а также познакомиться с инструментами, автоматизирующими написание инструкций SQL.
Как избежать SQL
Добавление инструкций SQL в код VBA чем-то сродни изучению письма, содержащего отрывки на греческом языке, сложные математические вычисления и музыкальное представление. Несмотря на то, что SQL более компактный и узконаправленный язык программирования, чем Visual Basic, многие VBA-программисты находят его сложным в использовании по той причине, что он просто другой. Осознавая подобное положение, вы можете захотеть использовать инструменты разработки, которые будут составлять инструкции SQL, базирующиеся на вашем выборе из списка полей, критериях поиска определенных полей, а также действиях, которые должен совершать запрос.
Встроенный конструктор запросов Access - один из подобных инструментов. После того как вы создали и протестировали запрос Access, у вас есть два варианта выбора для добавления объекта Command в ваш код VBA для выполнения запросов.
Объект Command может выполнять запрос как хранимую процедуру или же вы можете копировать SQL-код, полученный с помощью конструктора запросов, а затем вставить его в свой код VBA. Для того чтобы воспользоваться последним приемом, сконструируйте запрос в Access и тщательно его проверьте; затем выберите команду
View=SQL View (Вид=Режим SQL), чтобы отобразить соответствующую инструкцию. Скопируйте ее в буфер обмена, переключитесь к редактору VBA, после чего вставьте, заключив в кавычки, в инструкцию VBA, которая определяет значение свойства CcnmandText объекта Command. Подробные сведения о выполнении инструкций SQL и хранимых процедур изложены в разделе "Использование объекта Command" раньше в настоящей главе.

