Программирование баз данных: доступные варианты выбора. Vba база данных


Работа с базами данных в Visual Basic

* Задание: Создайте приложение, которое вводит и редактирует данные о студентах в базу данных «Университет».

Рис. 18.1. Компоненты VB для работы с базой данных

Необходимые знания:

  • DataSet – объект Набор данных, состоит из коллекции таблиц и связей; при организации связи с БД он формируется автоматически и служит для кэширования данных из БД, отслеживает и хранит произведенные изменения.
  • Binding Source – скрытый элемент управления, который связывается с БД посредством DataSet. Инкапсулирует источник данных для формы.
  • DataGridView – элемент управления для просмотра записей базы данных. Связывается с конкретной таблицей БД через элемент Binding Source.
  • TableAdapter – скрытый элемент, добавляется автоматически при связывании элемента DataGridView и служит для обмена информацией через созданный канал связи. Его метод Fill заполняет значениями элемент DataSet, служащий для кэширования данных. Его метод Update позволяет обновить произведенные в проекте изменения в самой БД.
  • Binding Navigator – элемент управления, служащий для навигации по базе данных. Связывается с Binding Source.

Выполнение:

 
  1. Создайте новый проект.
  2. С помощью приложения Access 2007 создайте базу данных Университет из одной таблицы Студенты с тремя полями: ФИО, Факультет и Группа. Заполните несколько записей произвольными данными и сохраните базу данных. Закройте приложение Access
  3. Вернитесь к программе. В меню Data (Данные) выберите пункт Add New Data Source (Добавить новый источник данных). В открывшемся окне выберите пункт Database (База данных) → Next (Далее). Щелкните кнопку NewConnection (Создать подключение) → пункт Microsoft Access DatabaseFile. Щелкните по кнопке Browse (Обзор) и выберите файл созданной базы данных. Чтобы проверить соединение используйте кнопку Test Connection (Проверить подключение). Щелкните ОК и Next (Далее). В появившемся окне о копировании файла данных следует щелкнуть по кнопке Нет.
  4. Отметьте флажок с пунктом Tables (Таблицы) и Vews (Представления), чтобы присоединить все таблицы базы данных. Щелкните Finish (Готово).
  5. Добавьте панель Server Explorer для работы с соединениями, войдя в меню View (Вид) → Server Explorer (Обозреватель баз данных). Переключитесь на панель и посмотрите на добавленное соединение.
  6. На панели ToolBox (Инструменты) выберите элемент Binding Source (это скрытый элемент), формирующий данные из базы данных для формы. Для его свойства DataSourсe установите значение УниверситетDataSet, чтобы связать его с базой данных.
  7. Добавьте элемент DataGridView для просмотра записей базы данных. Для его свойства DataSource установите значение СтудентыBindingSource. Щелкните на стрелочке, находящейся над элементом и выберите пункт PreviewData (Просмотреть данные). Щелкните по кнопке Preview (Просмотр). Запустите проект.
  8. Дважды щелкните на пустом месте дизайна формы и запрограммируйте код для события Load формы (по загрузке формы):
Me.СтудентыTableAdapter.Fill(Me.УниверситетDataSet.Студенты)

Me.СтудентыTableAdapter.Fill(Me.УниверситетDataSet.Студенты)

Элемент TableAdapter добавляется автоматически при связывании элемента DataGridView и служит для обмена информацией через созданный канал связи. Его метод Fill заполняет значениями элемент DataSet, служащий для кэширования данных.

  1. Добавьте элемент Binding Navigator, служащий для навигации по базе данных. Для его свойства BindingSource установите значение СтудентыBindingSource. Запустите приложение. Попробуйте использовать панель навигации для добавления новой записи.
  2. Если Вы попробуете перезапустить приложение, то добавленные записи не сохранятся.
  3. Необходимо добавить кнопку Сохранить. В процедуру обработки события Click кнопки добавьте следующий код:
Me.СтудентыTableAdapter.Update(Me.УниверситетDataSet.Студенты)

Me.СтудентыTableAdapter.Update(Me.УниверситетDataSet.Студенты)

Таким образом, все изменения, накопленные в DataSet, сохраняются (обновляются при помощи метода Update) в базе данных посредством элемента TableAdapter и его метода Update.

  1. Добавьте новую запись и щелкните кнопку Сохранить. Еще раз запустите приложение и отладьте его. Все данные сохранились!
  2. Сохраните проект.
Дополнительное задание.
  1. Расширьте приложение так, чтобы в базе данных сохранялись поля Отделение и Курс, соответственно добавив их сначала в саму базу данных. Для добавления полей в элемент DataSet выберите его в окне SolutionExplorer, и в контекстном меню элемента выберите пункт Configure. Добавьте поля в SQL-запрос. Для обновления элемента DataGridView используйте пункт AddColumn ( ).
  2. Исключите появление ошибки при заполнении очередного поля таблицы пользователем, если оставлено обязательное поле пустым.

Для обработки исключений (некоторых ошибок) используется конструкция Try…Catch…End Try. Блок Try определяет фрагмент программы, в котором производится отслеживание ошибок. Если в этом фрагменте будет сгенерировано исключение, запустится Catch-блок, который представляет собой обработчик некоторого типа исключения.

Сохраните и закройте приложение. Откройте базу данных Университет и в конструкторе таблицы Студенты, сделайте поле ФИО обязательным. Опять откройте приложение и добавьте в процедуру-обработчик нажатия кнопки Сохранить следующий код:
1 2 3 4 5 Try Me.СтудентыTableAdapter.Update(Me.УниверситетDataSet.Студенты) Catch myException As Exception MsgBox(myException.Message) End Try

Try Me.СтудентыTableAdapter.Update(Me.УниверситетDataSet.Студенты) Catch myException As Exception MsgBox(myException.Message) End Try

Запустите приложение. Добавьте новую запись, не заполняя поле ФИО, и щелкните кнопку Сохранить.

Контрольное задание:

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

  1. «Автомобили» (модель, изготовитель, цена, цвет).
  2. Животные (название, отряд, место обитания).
  3. Расписание (предмет, время, преподаватель, группа).
  4. Косметика (наименования, тип, изготовитель, цена, примечания).
  5. Насекомые (название, цвет, крылья, лапки, копытцаJ).
  6. Банк (вкладчик, дата вклада, сумма, срок, процент).
  7. Магазин (продукт, цена, количество).
  8. Склад (товар, цена, количество, производитель).
  9. Расписание (предмет, время, преподаватель, группа).
  10. Преподаватели (фамилия, имя_отчество, дисциплина, злюка/добряк J).
Вопросы для самоконтроля:
  1. Какой элемент управления служит для обмена информацией через канал связи?
  2. Какое свойство элемента DataGridView устанавливает связь с таблицей?
  3. Какой элемент служит для кэширования изменений и добавлений?
  4. Для чего служат методы Fill и Update элемента TableAdapter?

* При использовании материалов обязательна ссылка на источник: Майер С.Ф., «MS Visual Basic 2008» — Учебно-методическое пособие : Южный федеральный университет. – Ростов-на-Дону, 2017. – 92 с.

labs.org.ru

Все об объектах баз данных. VBA для чайников

Все об объектах баз данных

Сам по себе язык VBA не предоставляет никаких средств для доступа к базам данных и манипулирования содержащейся в них информацией. Однако после объединения с библиотекой объектов баз данных VBA тотчас превращается в инструмент для программирования баз данных с очень широкими возможностями.

Основная задача, выполняемая библиотекой объектов базы данных,- представление базы данных и всех ее компонентов (таблицы, запросы, отчеты и т.д.) в объекты, по своему проявлению мало отличающиеся от других объектов, используемых в VBA. Благодаря этому вы получаете возможность манипулировать ими, используя их свойства, методы и события (подробности в главе 12). Поскольку база данных представляется в виде набора объектов, ее библиотека объектов избавляет вас от необходимости беспокоиться о деталях сложной структуры базы данных. Кроме того, вы можете использовать тот же набор объектов для манипулирования базами данных других типов.

Вы можете выбирать среди нескольких библиотек баз данных; чаще других пользуются предложения компании Microsoft. Сюда относятся ADO (ActiveX Data Objects- Объекты данных ActiveX), текущий стандарт, и DAO (Data Access Objects - Объекты доступа к данным), старая библиотека объектов, но все еще широко используемая. Другие поставщики предлагают свои собственные библиотеки объектов баз данных. Например, если вы работаете исключительно с файлами dBase, вам следует подумать об использовании CodeBase (продукт компании Sequiter Software).

В данный момент компания Microsoft настоятельно рекомендует использовать библиотеку объектов ADO. Эта библиотека предлагает простую в использовании объектную модель, которая одинаково хорошо подходит для работы как с локальными, так и удаленными данными.

Она содержит все инструменты, необходимые для одновременной работы с масштабируемыми сетевыми приложениями большого количества пользователей, но также замечательно подходит и для отдельных проектов, используемых на настольных компьютерах. ADO позволяет получать доступ не только к SQL-данным, но и данным других типов, таким как сведения Outlook, которая инструкции SQL не поддерживает.

Библиотека ADO поставляется в составе Office XP и Office 2000, в то время как DAO поставлялась с ранними версиями Office, включая Office 97, а также другими VBA приложениями. Если на вашем компьютере не установлена ни одна из этих библиотек объектов, вы можете загрузить их с Web-узла компании Microsoft, что, помимо всего прочего, гарантирует наличие на вашем компьютере самых последних версий этих библиотек.

После того как вы установили необходимую библиотеку объектов баз данных, вы должны указать ее наличие в VBA-проекте, прежде чем сможете использовать ее объекты. Для того чтобы это сделать, воспользуйтесь командой Tools = References, чтобы открыть диалоговое окно References (см. главу 12), в котором вам следует добавить необходимые сведения.

Какую бы библиотеку объектов баз данных вы ни выбрали, вы можете значительно расширить свои возможности программиста, используя связанные элементы управления AvtiveX, что означает, что они автоматически отображают данные из таблицы базы данных, с которой вы хотите работать. Когда пользователь изменяет данные в одном из подобных элементов управления, изменения автоматически будут отражены и в базе данных без каких либо действий с вашей стороны.

Возможность связывания элементов управления с данными представляет собой ключевое отличие Access от большинства других VBA-приложений. Однако, если вы используете приложение, например Word, которое не содержит элементы управления соответствующих типов, вы можете добавить их, отдельно приобретя специальные наборы инструментальных средств ActiveX. В состав пакета Microsoft Office Developer входит большое количество элементов управления для связывания данных, которые можно использовать в любом приложении Office, а также целый ряд других инструментов и утилит, значительно упрощающих создание программ управления базами данных на VBA. Кроме того, свои разработки предлагают многие сторонние поставщики.

Поделитесь на страничке

Следующая глава >

it.wikireading.ru

Глава 9Visual Basic и базы данных

Глава .9Visual Basic и базы данных

Если вы спросите профессионального программиста, зачем нужен Visual Basic, он ответит - В большинстве случаев для программирования баз данных. Да, действительно, ведь компьютер - это инструмент для обработки информации, а информация в деловом мире хранится в основном в базах данных, поэтому важная задача языка программирования, если он хочет быть нужным - обеспечить быструю, удобную и надежную работу с ними.

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

9.1.Понятие о базах данных

Что такое база данных, я пояснил в 1.2 на примере базы данных компьютерных игр. В подавляющем большинстве случаев база данных - это одна или несколько прямоугольных таблиц, таких, например, как эта таблица, посвященная боксерам:

Фамилия И.О.

Дата рождения

Спортивное общество

Разряд по боксу

Агамалов С.В.

12.4.78

Трудовые резервы

3

Парменов Л.В.

31.11.82

Динамо

3

Васин А.Н.

16.10.71

ЦСКА

3

Попов А.А.

14.2.79

Спартак

2

Яньков В.Ю.

27.1.84

Спартак

2

Иноземцев И.М.

3.3.80

Восток

1

Столбцы таблицы называются полями, строки - записями. Поля могут быть текстовыми (Спортивное общество), числовыми (Разряд по боксу), типа даты и времени (Дата рождения), булевскими, содержать объекты (картинки, звук, видео). Количество записей в реальных базах данных достигает многих тысяч. Обратите внимание, что база данных, рассмотренная нами в 1.2, к концу раздела приобретает более сложную структуру, чем просто одна прямоугольная таблица, но я ограничусь этим самым простым и распространенным случаем.

Для того, чтобы человек мог удобно работать с базами данных, написаны специальные программы - системы управления базами данных (СУБД). Основное, что нужно человеку от СУБД при работе с готовой базой данных - это сортировка, поиск и фильтрация. Например, наша база боксеров отсортирована по разряду. Пользователь должен иметь возможность легко сортировать базу данных по любому полю. Если в базе данных больше ста записей, становится актуальной проблема быстрого поиска нужной записи. Например, в базе данных о 20000 преступников нужно найти запись о Вольдемаре Сидорове, 1972 года рождения, по кличке Бармалей, чтобы посмотреть, есть ли у него шрам на левой щеке. Когда же мы ищем преступника по приметам, то из 20000 записей мы хотим вывести на экран только те несколько, что соответствуют кареглазым блондинам ростом от 175 до 180 см с татуировкой на правой руке. Этот процесс называется фильтрацией.

Кроме этих основных задач порядочная СУБД позволяет пользователю изменять содержимое записей, дополнять базу новыми записями, стирать ненужные, распечатывать в удобном виде нужную информацию из базы данных, позволяет при помощи программирования автоматизировать наиболее трудоемкие операции с базами данных и приспосабливать базы данных к конкретным нуждам пользователя.

СУБД, наиболее близкая к Visual Basic - это Microsoft Access, входящая в пакет Microsoft Office Professional. В Access вы можете и безо всякого программирования прекрасно работать с реальными базами данных. Ну а программирование работы в Access осуществляется на специальном языке Visual Basic for Applications, который является "диалектом" языка Visual Basic применительно к пакету Microsoft Office.

Если вы решили заняться базами данных, то у вас два пути:

  • Быстренько освоить на уровне пользователя Access, и тогда ваша работа с базами данных будет удобной и приятной, а необходимость в программировании вы почувствуете не скоро. Когда же почувствуете, то будете программировать на практически известном вам Visual Basic for Applications.

  • Осваивать работу с базами данных в среде Visual Basic. Это значительно труднее, но зато вы почти сразу же начнете программировать и сможете создавать проекты, в которых работа с базами данных объединена с совершенно другими областями обработки информации (например, с играми).

Название книги обязывает меня выбрать второй путь.

9.2.Создаем заготовку базы данных при помощи Visual Data Manager

Пусть мы хотим создать базу данных книг, выпущенных мифическим издательством "Контакт" в мифические времена. База данных должна иметь такой вид:

Название книги

Автор

Дата выпуска

Количество страниц

Понедельник начинается в субботу

Стругацкие

3.5.1965

187

Затерянный мир

Конан Дойль

15.11.1920

210

За миллиард лет до конца света

Стругацкие

14.7.1974

118

Белые ночи

Достоевский

30.9.1848

55

Туманность Андромеды

Ефремов

12.9.1957

348

Сорочинская ярмарка

Гоголь

31.12.1831

26

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

Конечно же, мы не будем пользоваться доморощенным программированием, как в 1.2 В Visual Basic имеются специальные инструменты для более быстрого и удобного выполнения всех этих операций. Первым мы используем VisualDataManager, расположенный в меню Add-Ins. Он представляет собой по сути простенькую СУБД, работающую автономно от среды Visual Basic. Но я его использую только для создания структуры базы данных.

Начнем создавать нашу базу, но сначала придумаем имя для таблицы - "Books" (отдельное имя для таблицы необходимо потому, что база данных может содержать несколько таблиц). И для полей тоже придумаем имена: Nazvanie, Avtor, Data, Kol_stran.

Add-InsVisualDataManagerFileNewMicrosoftAccess(мы выбрали Microsoft Access, это значит, что с этой базой данных можно будет в будущем работать не только из Visual Data Manager, но и в Access) Version 7.0 MDB. Перед вами откроется окно сохранения, которое предложит сохранить будущую базу в файле с расширением MDB. Дадим файлу имя "Книги" и сохранимся. Окно Visual Data Manager приобретет следующий вид (на картинке в левом окне показана структура таблицы, которую она приобретет позже, а пока там почти пусто):

Файл создан. Пора создавать таблицу. Щелкнем правой клавишей мышки внутри левого окна и в открывшемся контекстном меню выберем New Table. Перед нами откроется пустое окно структуры таблицы (на рисунке оно показано уже заполненным информацией о полях таблицы, причем слева виден список полей, а справа - информация о выделенном поле (Avtor) нашей таблицы):

Дадим имя таблице. Затем щелкнем по кнопке Add Field, перед нами откроется пустое окно для добавления поля (на рисунке оно показано уже заполненным информацией о поле Nazvanie нашей таблицы):

Вам достаточно только дать имя полю и выбрать под меткой Type его тип. Остальное - тонкости. Нажимая ОК, введем информацию о всех полях, затем закроем окно добавления поля (кнопка Close).

Поле можно удалить, выделив его в окне структуры таблицы и нажав кнопку Remove Field.

Закончив ввод информации о всех полях, нажимаем кнопку Build the Table и на этом создание структуры таблицы закончено. Все остальное мы будем делать другими инструментами.

9.3.Работа с базами данных. Элементы управления Data и DBGrid. Язык SQL.

Для работы с базами данных непосредственно изнутри проекта Visual Basic удобно применять элемент управления Data, расположенный в Toolbox. Разместим его на форме. Пусть его имя будет Data1. Прежде всего объясним ему, с каким файлом базы данных он должен работать. Для этого придадим его свойству DatabaseName значение адреса созданного в предыдущем разделе файла. Затем проследим, чтобы свойство Connect имело значение Access, EOFAction - Add New, установим в качестве значения свойства RecordSource (источник записей для работы элемента Data1) имя таблицы нашей базы - Books. Эти свойства можно устанавливать и в режиме работы. Например,

Data1.RecordSource = "Books"

С этого момента вы можете запускать проект и работать с базой данных программным путем. Однако, не очень-то удобно это делать, не видя во время работы саму таблицу базы данных, а Data сам по себе ее не показывает. Способов увидеть ее несколько. Самый лучший - использование элемента управления DBGrid. Находится он так: Project  Components Microsoft Data Bound Grid Control 5.0. Разместите его на форме. Пусть его имя будет DBGrid1. Работать он будет в паре с Data, таблицу которого и будет делать видимой в режиме работы. Установим его свойства:

Прежде всего, поскольку в проекте могут присутствовать несколько элементов Data, нужно указать, с каким именно из них будет работать наш DBGrid, другими словами, к кому он будет привязан. Для этого установим значение его свойства DataSource в Data1. Установим также в True следующие свойства DBGrid1: AllowAddNew (разрешить вручную добавлять в таблицу новые записи), AllowDelete (разрешить вручную удалять записи из таблицы), AllowUpdate (разрешить вручную изменять данные в таблице). Можете придать какое-нибудь значение свойству Caption.

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

В верхней части вы видите элемент Data1, от лицезрения которого толку мало, поэтому его вполне можно сделать невидимым.

Данные, которые вы вводите в поле, проверяются на принадлежность к типу поля. Обратите внимание, что Visual Basic "укоротил" те даты, которые считает "и так понятными".

Чтобы удалить запись, выделите ее щелчком по серому прямоугольнику слева от записи и нажмите на клавиатуре Delete. Можно расширять и сужать строчки и столбцы, перетаскивая границу между серыми прямоугольниками.

Когда вы завершите выполнение проекта, таблица будет автоматически сохранена в файл.

К Data можно привязывать не только DBGrid, но и другие элементы, например текстовые поля. Разместите на форме четыре текстовых поля и свяжите их с Data1. Также каждое из этих полей свяжите при помощи свойства DataField со своим полем таблицы. Запустите проект. Пощелкайте мышкой по разным записям в DBGrid. Вы видите, что значения текстовых полей автоматически становятся равными значениям полей текущей записи таблицы. И наоборот, стоит нам изменить содержимое текстового поля, как меняется соответствующее содержимое таблицы.

До сих пор мы меняли содержимое базы данных вручную. Посмотрим, как это можно делать программным способом. Таблица разделена на клетки-ячейки. Существует понятие текущей ячейки (current cell), с которой происходит в настоящий момент работа. Она задается номером записи (DBGrid1.Row) и номером поля (DBGrid1.Col). Свойство DBGrid1.Textозначает содержимое текущей ячейки. Самая верхняя запись имеет номер 0, а не 1. То же относится и к самому левому полю. Например, при работе с нашей базой данных фрагмент

DBGrid1.Row = 3

DBGrid1.Col = 1

Debug.Print DBGrid1.Text

напечатает слово Достоевский.

Вот пример процедуры, которая заполняет числами 2, 3, 4 поле Kol_str в записях со 2-й по 4-ю:

Private Sub Command1_Click()

DBGrid1.Col = 3

For i = 2 To 4

DBGrid1.Row = i

DBGrid1.Text = i

Next

End Sub

А вот строка, увеличивающая на одни сутки дату выпуска:

DBGrid1.Text = DateAdd("d", 1, DBGrid1.Text)

SQL

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

Private Sub Command4_Click()

Data1.RecordSource = "SELECT Avtor, Nazvanie, Data FROM Books ORDER BY Data"

Data1.Refresh

End Sub

Выполнив эту процедуру, вы увидите на экране такую таблицу:

Avtor

Nazvanie

Data

Гоголь

Сорочинская ярмарка

31.12.1831

Достоевский

Белые ночи

30.9.1848

Конан Дойль

Затерянный мир

15.11.1920

Ефремов

Туманность Андромеды

12.9.57

Стругацкие

Понедельник начинается в субботу

3.5.65

Стругацкие

За миллиард лет до конца света

14.7.74

Пояснения: Выше мы писали строку

Data1.RecordSource = "Books"

имея в виду, что источником данных для работы элемента Data1 будет целиком таблица Books. А вот первая строка нашей процедуры выбирает для работы элемента Data1 только три поля: Avtor, Nazvanie, Data. Действительно, в переводе с английского команда

SELECT Avtor, Nazvanie, Data FROM Books ORDERBY Data

означает

ВЫБРАТЬ Avtor, Nazvanie, Data ИЗ Books УПОРЯДОЧИТЬ ПО Data

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

Если вместо ORDER BY Data написать ORDER BY Data DESC, то записи будут упорядочены по убыванию даты.

Строка

Data1.Refresh

просто приводит предыдущую команду SELECT в действие.

Следующая процедура осуществляет фильтрацию.

Private Sub Command6_Click()

Data1.RecordSource = "SELECT * FROM Books WHERE Kol_str>100"

Data1.Refresh

End Sub

Пояснения: Звездочка в выражении

SELECT * FROM Books

означает, что мы выбираем все поля таблицы Books.

Выражение

WHERE Kol_str >100

переводится

ГДЕ количество страниц >100

и приказывает вывести на экран только те книжки, что толще 100 страниц.

Следующая таблица иллюстрирует некоторые другие возможности SQL:

Команда

Смысл

SELECT * FROM Books WHERE Avtor = 'Стругацкие' AND Data > #21/11/1970#

На экран выводятся книжки Стругацких, выпущенные позже 21 ноября 1970 года. Таким образом, в выражении могут содержаться логические операции. Обратите внимание, что 'Стругацкие' берутся в одинарные кавычки, а не двойные, так как вся команда SELECT сама является ни чем иным, как строкой в операторе присвоения, и вторые двойные кавычки создали бы путаницу.

SELECT TOP 3 * FROM Books ORDER BY Data DESC

На экран выводятся 3 последние книжки, выпущенные издательством. Выражение ORDER BY Data DESC сортирует записи по убыванию даты, а выражение TOP 3 показывает на экране только верхние 3 записи из отсортированных.

SELECT * FROM Books WHERE Kol_str BETWEEN 100 AND 200

На экран выводятся книжки с числом страниц МЕЖДУ 100 И 200.

textarchive.ru

vba - Как сжать базу данных MS Access, в то время как база данных открыта, используя vba

Недавно я наткнулся на этот вопрос, и некоторые вещи, с которыми я сталкиваюсь в ответах здесь, просто неверны:

  • НЕ МОЖЕТ компактно и восстановить базу данных доступа через VBA при ее открытии! Независимо от того, закрыты ли все таблицы, если у вас есть исключительная блокировка и т.д.
  • Вы можете, однако, скомпилировать бэкэнд из связанной базы данных, если все соединения с ним закрыты. Вот почему Тони Тоуус мог успешно сжать и восстановить.

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

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

  • Программно создать файл VBScript
  • Добавить код в этот файл, чтобы мы могли сжать и восстановить нашу базу данных, не открыв ее
  • Открыть и запустить этот файл асинхронно
  • Закройте нашу базу данных до того, как произойдет сжатие и восстановление.
  • Компактность и восстановление базы данных (создание копии), удаление старого, переименование копии
  • Откроем нашу базу данных, продолжаем пакет
  • Удалить вновь созданный файл
Public Sub CompactRepairViaExternalScript() Dim vbscrPath As String vbscrPath = CurrentProject.path & "\CRHelper.vbs" If Dir(CurrentProject.path & "\CRHelper.vbs") <> "" Then Kill CurrentProject.path & "\CRHelper.vbs" End If Dim vbStr As String vbStr = "dbName = """ & CurrentProject.FullName & """" & vbCrLf & _ "resumeFunction = ""ResumeBatch""" & vbCrLf & _ "Set dbe = WScript.CreateObject(""DAO.DBEngine.120"")" & vbCrLf & _ "Set objFSO = CreateObject(""Scripting.FileSystemObject"")" & vbCrLf & _ "On Error Resume Next" & vbCrLf & _ "Do" & vbCrLf & _ "If Err.Number <> 0 Then Err.Clear" & vbCrLf & _ "WScript.Sleep 500" & vbCrLf & _ "dbe.CompactDatabase dbName, dbName & ""_1""" & vbCrLf & _ "errCount = errCount + 1" & vbCrLf & _ "Loop While err.Number <> 0 And errCount < 100" & vbCrLf & _ "If errCount < 100 Then" & vbCrLf & _ "objFSO.DeleteFile dbName" & vbCrLf & _ "objFSO.MoveFile dbName & ""_1"", dbName" & vbCrLf & _ "Set app = CreateObject(""Access.Applition"")" & vbCrLf & _ "app.OpenCurrentDatabase dbName" & vbCrLf & _ "app.UserControl = True" & vbCrLf & _ "app.Run resumeFunction" & vbCrLf & _ "End If" & vbCrLf & _ "objFSO.DeleteFile Wscript.ScriptFullName" & vbCrLf Dim fileHandle As Long fileHandle = FreeFile Open vbscrPath For Output As #fileHandle Print #fileHandle, vbStr Close #fileHandle Dim wsh As Object Set wsh = CreateObject("WScript.Shell") wsh.Run """" & vbscrPath & """" Set wsh = Nothing Application.Quit End Sub

Это все шаги, описанные выше, и возобновляет пакет, вызывая функцию ResumeBatch в базе данных, которая вызвала эту функцию (без каких-либо параметров).

Обратите внимание, что такие действия, как защита от щелчка и антивирус/политика, не нравятся vbscript файлам, могут испортить этот подход.

qaru.site

доступные варианты выбора. VBA для чайников

Программирование баз данных: доступные варианты выбора

Как известно, Access представляет собой приложение для работы с базами данных, входящее в состав Microsoft Office, поэтому использование Access для построения пользовательских программ для работы с базами данных кажется вполне логичным. Однако приведенные ниже причины могут подтолкнуть вас к рассмотрению других возможных вариантов.

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

Мое личное мнение таково: поскольку пользовательский интерфейс и ядро базы данных •- это разные части программного обеспечения, вы можете использовать инструменты, отличные от Access, для того чтобы сообщить ядру базы данных, что же именно вы от него хотите, Именно это вы и делаете, когда создаете программу для работы с базами данных, используя VBA. Даже если вы создаете код в рамках Access, полученный VBA-код взаимодействует с ядром базы данных как с независимым программным компонентом, таким как ADO, а не посредством Access.

Если вам не нужна Access для управления ядром базы данных, какой же инструмент использовать для создания программы для работы с базами данных? Возможные варианты, а также их преимущества, перечислены ниже.

* Access. VBA-программы, созданные в среде Access, могут напрямую обращаться к объектам этого приложения, в частности к формам и отчетам. Поскольку формы и отчеты Access обладают встроенными функциональными возможностями баз данных, они позволяют сократить цикл разработки программ значительнее, чем VBA общего назначения. А так как Access предоставляет быстрый доступ к данным, вы всегда можете работать со своими данными, даже если работа над программой еще не закончена. Это замечательная среда для разработки несрочных проектов только в удобное время для вас время.

* Другое приложение Office, такое как Word или Excel. В многих пользовательских программах доступ к базам данных представляет собой лишь часть функциональных возможностей. Если программа, которую вам необходимо написать, будет выполнять такие функции, как обработка текста или математические и статические расчеты, создание ее в среде Word или Excel позволит вам напрямую воспользоваться преимуществами соответствующего приложения. С помощью ADO ваша VBA-программа все равно будет обладать возможностью получать, отображать данные и манипулировать ими из баз данных. А программа окажется еще и небольшая, быстрая и менее сложная, чем если вы использовали бы модель СОМ для автоматизации доступа к данным Access из, скажем, Word (или автоматизации доступа к данным Word из Access).

Сами по себе формы и отчеты VBA не способны взаимодействовать с базами данных, но написать код для связывания формы данных вручную не так уже сложно. Кроме а того, вы можете приобрести Office Developer или другие инструментальные средства от сторонних производителей, которые позволят связать формы и элементы управления с данными. Вы можете также переслать результаты своей работы непосредственно в другие VBA-приложения, так как они не зависят от форм Access.

* Visual Basic (не VBA). Visual Basic- это восхитительный инструмент для разработки баз данных. Написанный вами код на Visual Basic может через ADO подключаться к базам данных, как и при использовании VBA, однако формы Visual Basic напрямую поддерживают работу с базами данных, точно так же, как и формы Access. Программа, созданная с помощью Visual Basic, обладает двумя значительными преимуществами перед программой, созданной с помощью VBA-приложения, такого как Word или Excel. Во-первых, она быстрее работает, так как программы, написанные на Visual Basic, компилируются, а не интерпретируются при каждом выполнении, как программы, созданные с помощью VBA. Во-вторых, вы можете свободно распространять программы: конечным пользователям не понадобится базовое VBA-приложение с помощью которого оно было создано.

Поделитесь на страничке

Следующая глава >

it.wikireading.ru

excel-vba - База данных управления Excel через VBA

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

Шаг 1: создайте (возможно, скрытый) лист, где вы вытащите все данные SQL, которые вам нужны в этом файле Excel. Потяните данные в таблицу one со всеми необходимыми столбцами/измерениями, чтобы получить данные после этого из этой таблицы.

Вот что я имею в виду. Предположим, что вам нужен в этом файле Excel некоторые данные из таблицы Users на SQL-сервере, а также некоторая информация из таблицы StockMarket на сервере. Из таблицы Users требуется идентификатор пользователя, имя, фамилия и название задания. Из таблицы StockMarket вам понадобится идентификатор Stockmarket и цена для этой конкретной акции. Поскольку эти цены по дате, вам также нужна дата котировки для цены.

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

Затем вы можете получить все данные из приведенной выше таблицы с помощью таких функций поиска, как эти:

=INDEX(SQLdata,MATCH(1,(SQLdata[Table]="Users")*(SQLdata[UserID]=25),0),4)

Обратите внимание, что я назвал таблицу SQLdata, чтобы упростить ее рассмотрение и понимание. Кроме того, вы можете легко сканировать файл Excel для любой ссылки на эту таблицу.

Другим подходом может быть следующее: сделать таблицу более кратким:

Обратите внимание, что на этот раз я смешиваю Strings с Numbers, а также Strings с Date (что очень плохой дизайн, и для некоторых людей здесь даже невозможно думать). Кроме того, заголовки столбцов теперь менее наглядны. Тем не менее, это тоже работает:

=INDEX(SQLrev,MATCH(1,(SQLrev[Table]="Users")*(SQLrev[Dimension1]=25),0),5)

Заметьте, что я на этот раз вызывал таблицу SQLrev.

Оба решения позволяют также собирать данные из таблицы. Итак, если вы хотите (например) среднюю цену для Apple в 2017 году, то вы можете использовать следующую формулу, чтобы суммировать цитаты за этот год и разделить их на 3:

=SUM(IF("StockMarket"=SQLrev[Table];1;0)*IF("AAPL"=SQLrev[Dimension1];1;0)*SQLdata[Price])/3

Наиболее заметным преимуществом для этого подхода является то, что вам просто нужно обновить одну таблицу во всем файле Excel, что означает, что на сервере есть только один.

Наиболее заметным недостатком (помимо выбора SQL, который может стать довольно сложным для записи) является то, что вам нужно знать все данные, которые должны находиться в этой таблице. Если данные не втянуты в эту таблицу, ни одна из приведенных выше формул не сможет извлечь эти значения.

Хотя этот подход, безусловно, имеет свои недостатки, это намного проще реализовать, чем Excel AddIn, к которому вы стремитесь.

Все приведенные выше формулы являются формулами массива и должны быть введены нажатием Ctrl + Shift + Enter. Для получения дополнительной информации о формулах массивов, пожалуйста, прочитайте следующее: https://support.office.com/en-us/article/Guidelines-and-examples-of-array-formulas-7D94A64E-3FF3-4686-9372-ECFD5CAA57C7

qaru.site

Visual Basic Основы работы с базами данных

Visual Basic - Основы работы с базами данных

Умение обращаться с файлами данных - чуть ли не одна из самых важных ступений в обучении программированию на Visual Basic! Здесь я постараюсь выложить только самые основные приёмы работы с объектом Data.

Прежде чем начать использовать базу данных её нужно сначала создать ;)!

1.Создайте стандартный проект. 2.Кликните на ToolBox'e на кнопку Data и натяните на форму так, чтобы полоска была не очень широкой и в самом низу формы. 3.Теперь создайте на форме четыре кнопки и назовите их (по порядку создания): cmdAdd, cmdDelete, cmdUpdate, cmdExit. Свойствам Caption дайте эти же имена, только без "cmd". 4.Создайте на форме три текстовых поля одинаковой длины. 5.Теперь надо связать объект ^ с какой-нибудь базой данных. С какой? С той которая есть у всех владелцев VBasic'a - biblio.mdb! Активируйте объект Data и в свойствах, в DatabaseName выберите этот файл. Теперь там же, но в поле RecordSource надо выбрать раздел "Authors". Этим мы выберем только нужную часть базы данных. 6.Выделите первое текстовое поле и в свойствах, в DataSource выберите единственную в списке, созданную нами базу данных ^ , т.е. тем самым мы связываем это текстовое поле с объектом Data1. А в поле свойств DataField выберите "Au_ID". Теперь задача этого поля отображать идентификационный номер каждого автора! То же самое проделайте со следующими двумя другими полями, но в DataField вместо "Au_ID" выберите "Author" и "Year Born".

Поздравляю! Если Вы ещё этого никогда не делали, то знайте - Вы написали первую в своей жизни простенькую программку для отображения содержания базы данных!!! А теперь научимся редактировать её. Итак, главное редактирование - это занесение записей и удаление их.

7.Щёлкните два раза на кнопку Add и введите:

Private Sub cmdAdd_Click()    Data1.Recordset.AddNew    'Все поля, которые могут быть отредактированы будут очищены    'и подготовлены, поле Year Born будет установленно на 0,    'т.к. оно должно иметь какое-то значение    'поле Au_ID не будет очищено вообще, а изменено на самую    'последнюю позицию End Sub

8.Следующая кнопка сохраняет внесённые изменения в базе данных. Сделайте двойной клик по кнопке Update и введите:

Private Sub cmdUpdate_Click()     'сохраняем ...     Data1.UpdateRecord     'без следующей строки после сохраниения в полях     'автоматически появились бы самые первые записи.     'поэтому закладке присваеваем идентификатор последней     'изменённой записи и в полях остануться ваши записи     Data1.Recordset.Bookmark = Data1.Recordset.LastModified End Sub

9.Теперь самое лёгкое - удаление записей!!! Ведь правильно говорят - "Ломать - не строить!" :-))). Делаем двойной щелчок по кнопке Delete и вводим:

Private Sub cmdDelete_Click()   'чтобы выполнить последовательность инструкций над   'одиночным объектом Data1,  не перечисляя его каждый   'раз, используем инструкцию With   With Data1.Recordset     .Delete     .MoveNext     If .EOF Then .MoveLast   End With End Sub

10.И теперь для кнопки Exit просто введите:

Private Sub cmdExit_Click()     End End Sub

Всё! А тепeрь Вы создали почти настоящую программу с базой данных!!!

10.Запустите проект. Нажмите на правую кнопку >. Содержание полей сменилось! Теперь нажмите на правую кнопку >|. В полях появились самые последние записи! То же самое будет происходить при нажатии на левые кнопки | и . Но как Вы, наверное, заметили поле, содержащие год рождения, всегда пустое! 11.Теперь нажмите кнопку "Add". 12.Первое поле НЕ испраляйте, во второе ввидите, например, ваше имя, а в третье год рождения. 13.Теперь сохраните эту запись, нажав кнопку "Update". 14.Знайте, ваша запись теперь сохранена на самом последнем месте! Можете снова "прогуляться" по записям и вернутся наконец с помощью правой кнопки >|. Ваша запись на месте. 15.Теперь нажмите на кнопку Delete... запись исчезла! НО! В этом случае мы НЕ можем удалять записи сделанные не нами.

Ну, вот и готово! А теперь я расскажу немного о создании некотрых удобств с работой с базой данных. Например, представим себе, что Вы, просматривая нашу базу данных, заметили имя автора где-то в середине и через некоторое время должны вернуться к этой записи... Не пролистывать же нам снова окло тысячи имён!!! Для этого можно создавать так называеимые закладки!

16.создайте на форме ещё две кнопки с именами cmdMBM и cmdSMB со следующими надписями: Make the Bookmark и Show the Bookmark. 17.Теперь в разделе формы ^ объявите переменную, которая будет содержать идентификатор актуальной записи:

'переменная должна быть объявлена, как Variant поскольку 'значения закладки могут быть как числовые, так и строковые Dim BM As Variant

18.Теперь делаем двойной щелчок по кнопке cmdMBM и вводим:

Private Sub cmdMBM_Click()     'получаем идентификатор актуальной записи     BM = Data1.Recordset.Bookmark End Sub

19.Теперь делаем двойной щелчок по кнопке cmdSBM и вводим:

Private Sub cmdSBM_Click()     'присваеваем закладке идентификатор нужной записи     Data1.Recordset.Bookmark = BM End Sub

20.Снова запустите проект и прощёлкайте несколько записей. 21.Нажмите кнопку "Make the Bookmark". Так, теперь пролистайте ещё дальше или вернитесь, вобщем уйдите от этой записи. 22.Щёлкните на кнопку "Show the Bookmark".

В полях появились записи, на которые Вы и поставили закладку!

А теперь я расскажу немного о поисках записей в базе данных. Представьте себе, что Вам нужно найти конкретное имя автора из тысяч других... WOW!!! :-)) Представили? Ну, так вот листать - вроде совсем не интересно... Нужно воспользовать одним из способов нахождения : FindFirst, FindLast, FindNext или FindPrevious. В следующей таблице представлены ихзначения:  

Метод Пояснение
FindFirst Ищет первую запись в БД
FindLast Ищет последнюю запись в БД
FindNext Ищет каждую следующую запись в БД
FindPrevious Ищет предыдущую запись в БД
23.Создайте кнопку cmdFind c надписью "Find" и впишите:

Private Sub cmdFind_Click()     'у пользователя запрашивается имя автора а потом происходит     'поиск его в БД     Data1.Recordset.FindFirst "Author = '" _     & Trim(InputBox("Введите имя автора")) & "'"     'если запись не найдена появляется следующая надпись:     If Data1.Recordset.NoMatch Then MsgBox "Имя не найдено" End Sub

24.Теперь запустите проект. Выищите какое-нибудь имя из БД и нажмите кнопку Find. 25.Введите имя и нажмите ОК.

Имя появилось! Чтобы искалось имя с конца БД слово FindFirst надо поменять на FindLast. А если Вы хотите проверить БД на наличие одного имени несколько раз надо применять слово FindNext и каждый раз вызывать поиск!

do.gendocs.ru