Постановка задачи: необходимо в СУБД « MS Access 2002» создать базу данных «Расписание занятий преподавателя».
Запускаем « MS Access 2002», создаем новую базу данных, сохраняем ее на диск. Долее переходим в первый раздел «Таблицы» и начинаем его заполнять. В общей сложности нужно будет создать следующие таблицы:
Для того чтобы создать первую таблицу нужно перейти в раздел «Таблицы», запустить конструктор и ввести названия полей, их тип и размер.
Тип поля, размер
Счетчик, первичный ключ
Далее создаем таблицу «Пары».
Тип поля, размер
Счетчик, первичный ключ
Затем создаем таблицу «Группы».
Тип поля, размер
Счетчик, первичный ключ
Потом переходим к созданию таблицы «Виды занятий».
Тип поля, размер
Счетчик, первичный ключ
Далее делаем таблицу «Аудитории», в которой будут содержаться номера аудиторий для проведения занятий.
Тип поля, размер
Счетчик, первичный ключ
Затем создаем таблицу «Четность недели», т.к. занятия очень часто имеют различное расписание по четным и нечетным неделям.
Как создать ЗАПРОСЫ НА ДОБАВЛЕНИЕ в Microsoft Access за 8 минут
Тип поля, размер
Счетчик, первичный ключ
Далее переходим к созданию таблицы «Дисциплины».
Тип поля, размер
Счетчик, первичный ключ
И, наконец, создаем ключевую таблицу во всех смыслах «Расписание».
Тип поля, размер
Счетчик, первичный ключ
Внешний ключ, таблица «Дни недели»
Внешний ключ, таблица «Четность недели»
Внешний ключ, таблица «Пары»
Внешний ключ, таблица «Группы»
Внешний ключ, таблица «Дисциплины»
Внешний ключ, таблица «Виды занятий»
Внешний ключ, таблица «Аудитории»
Когда все таблицы созданы, нужно перейти в раздел «Сервис – Схема данных…», чтобы подкорректировать связи, а именно установить в них обеспечение целостности, каскадное удаление и каскадное обновление данных.
Рис. 1. Схема данных базы
Рис. 2. Таблица «Дни недели»
Рис. 3. Таблица «Пары»
Рис. 4. Таблица «Группы»
Рис. 5. Таблица «Виды занятий»
Рис. 6. Таблица «Аудитории»
Рис. 7. Таблица «Четность недели»
Рис. 8. Таблица «Дисциплины»
Рис. 9. Таблица «Расписание»
Чтобы создать отчет нужно перейти в раздел «Отчеты», запустить мастер отчетов, далее выбрать таблицу, например, «Расписание», затем отобрать необходимые поля, добавить уровни группировки. Потом выбрать порядок сортировки по полю «Пара». Далее выбирается макет отчета. Затем нужно определить стиль отчета. А в конце задать имя отчета и сохранить его.
Как создать запросы в Microsoft Access за 10 минут
Рис. 10. Отчет «Расписание» в первом приближении
Отчет получился, мягко говоря, корявенький. Чтобы его исправить, нужно выделить его мышкой и запустить конструктор отчетов.
Рис. 11. Отредактированный отчет «Расписание»
Источник: bd-subd.ru
Как написать функцию на VBA Access 2003
Продолжаем осваивать Access 2003, и пришло время поговорить о написании собственных функций на VBA. Мы рассмотрим немного теории, т.е. где создаются эти функции, для чего их пишут, а также как обычно попрактикуемся в этом, в принципе не сложном, деле.
Тему программирования на VBA Access 2003 мы уже немного затрагивали, например, рассматривали встроенные функции и если говорить вообще об Access 2003, то тут мы тоже преуспели, например, освоили группировку данных в отчете.
А сегодня, приступим к более интересной, как мне кажется, теме это написание своих функций на языке VBA.
Что такое пользовательские функции VBA и зачем их пишут
Это функции, которые пишет сам программист для упрощения остального кода программы.
Что здесь понимается под упрощением, и для чего вообще нужно писать такие функции, я решил объяснить по пунктам, так как это будет более понятно для начинающих, да и просто для восприятия:
- И в первом пункте сразу хотелось бы отметить это значительное сокращение кода. Например, Вам часто нужно выполнять какие-либо действия, код которых занимает, скажем, 10-20 и более строк, и вот представите, что Вы данный код будете повторять 2-3-10… раз в своем основном коде программы, другими словами количество строк основного кода возрастет в разы, а чем это грозит, рассмотрим во втором пункте;
- Если у Вас код очень большой, то его будет трудно в дальнейшем редактировать и к тому же если у Вас есть повторяющейся код, то тогда придется искать его и исправлять код во всех местах, что согласитесь первое, это очень нудно, а второе Вы можете просто забыть изменить код в каком-нибудь месте и программа не будет работать или что еще хуже, будет работать, но не правильно, за что Вас конечно начальство не похвалит;
- Про сокращение кода мы сказали, но также мы делаем его более наглядным и понятным. Другими словами, когда в коде мы встретим вызов той или иной функции, мы сразу поймем, что она делает, и будем меньше тратить время на разбор и понимание всего кода, а это принесет нам выгоду, так как мы будем более оперативно вносить изменения в функционал нашей программы, а вот за это начальство может нас похвалить.
Как и у любого языка программирования и среды программирования в VBA Access есть область видимости функции, например, мы, можем написать функцию которую можно будет вызвать только в пределах одного объекта (формы или отчета) или мы можем ее написать в области видимости всего проекта, т.е. функцию можно будет вызвать из любой формы или отчета. Мы сегодня рассмотрим оба варианта, соответственно на примерах.
Примеры написания функций VBA Access
И для начала давайте определимся, что за функцию мы будем писать, т.е. что она будет делать. Я предлагаю написать в качестве простого примера функцию, которая будет принимать один параметр с типом date и возвращать строку вида «19 Июня 2014г.». Как мне кажется достаточно простой пример, но вдруг кому-нибудь пригодится.
Пишем локальную функцию VBA
Как я уже сказал ранее, есть разные области видимости функций и сейчас мы напишем своего рода локальную функцию, которую можно будет запустить только из кода того объекта, где эта функция написана.
Для реализации нашего примера давайте создадим форму, добавим на нее кнопку, клик по которой будет вызывать нашу функцию. Думаю показывать, как создать форму не стоит, так как мы это уже неоднократно делали, единственное скажу, что я форму назвал «Тестовая форма», элемент кнопка назвал «start» с подписью «Старт»
Теперь запустим редактор кода VBA, это можно сделать путем нажатия кнопки на панели инструментом «Программа»
И вставляем код нашей функции и сразу же код ее вызова, т.е. код обработки события нажатия кнопки (весь код прокомментирован):
Private Function getStrDate(dt As Date) As String ‘Объявляем вспомогательные переменные Dim d As String Dim m As String Dim y As String ‘Получаем день d = Day(dt) ‘Получаем месяц m = Month(dt) ‘Определяем, какой именно месяц Select Case m Case 1: m = «Января» Case 2: m = «Февраля» Case 3: m = «Марта» Case 4: m = «Апреля» Case 5: m = «Мая» Case 6: m = «Июня» Case 7: m = «Июля» Case 8: m = «Августа» Case 9: m = «Сентября» Case 10: m = «Октября» Case 11: m = «Ноября» Case 12: m = «Декабря» End Select ‘Получаем год y = Year(dt) ‘Соединяем и возвращаем результат getStrDate = d » » » «г.» End Function Private Sub start_Click() ‘Выводим сообщение с текстом, который вернет нам наша функция MsgBox getStrDate(«19.06.2014») End Sub
В итоге у Вас должно получится следующее:
То, что это функция локальная свидетельствует слово Private перед названием функции.
Теперь все сохраняем, открываем нашу форму, жмем, старт и получаем наше сообщение:
Как видите, мы получили тот результат, который хотели, т.е. мы передавали в качестве параметра дату «19.06.2014» и получили соответствующий результат.
Пишем глобальную функцию VBA
Для того чтобы написать такую функцию создадим модуль, например «test_func» а там уже напишем нашу функцию. Для того чтобы создать модуль, открываем Access и на панели объектов выбираем «Модули» и жмем «Создать».
Затем вставляем наш код, с одним изменением, перед названием функции пишем Public, и у Вас должно получится вот такая картина:
Теперь осталось изменить код вызова нашей новой глобальной функции, для этого меняем код обработки события нажатия кнопки на нашей тестовой форме, на вот такой:
MsgBox test_func.getStrDate(«19.06.2014»)
Сохраняем и проверяем, результат будет таким же, но его нам вернула уже совсем другая функция.
Как видите, все нет так уж и сложно, функция конечно простая, но Вы можете писать функции для собственных нужд, которые будут более сложными. Я всем советую весь повторяющийся код выносить в функции, так как это будет намного лучше, как для работы с этим кодом, так и просто для восприятия. Надеюсь, сегодняшняя статья помогла Вам разобраться с вопросом «Как написать функции на VBA Access?». Удачи в программировании на VBA.
Источник: info-comp.ru
Работа с базой данной MS Access в C#
Для соединения с базой данных MS Access (файл .mdb) в C# следует использовать класс OleDbConnection со следующими параметрами соединения: provider=Microsoft.Jet.OLEDB.4.0;data source=databaseFile Здесь databaseFile — абсолютный путь к файлу базы данных Access. Провайдер соединения должен иметь значение Microsoft.Jet.OLEDB.4.0 . Пример параметров соединения с файлом базы данных Microsoft Access:
string connectionString = «provider=Microsoft.Jet.OLEDB.4.0;» + «data source=C:datadbase.mdb»;
Бэкслеши в пути файла следует заэскейпить (именно поэтому в примере вместо одного бекслеша поставлено по два). Вышеупомянутую строку параметров соединения следует передать конструктору: OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); Ниже приведен листинг программы, которая подключается к базе данных клиентов в формате MS Access и выводит информацию по первому клиенту. Для отправки SQL-запросов и чтения их результатов здеь используются объекты OleDbCommand и OleDbDataReader .
using System; using System.Data; using System.Data.OleDb; class OleDbConnectionAccess < public static void Main() < // Формируем строку с параметрами подключения к файлу базы данных string connectionString = «provider=Microsoft.Jet.OLEDB.4.0;» + «data source=C:datadbase.mdb»; // создаем объект OleDbConnection для соединения с Бд и передаем его конструктору строку с параметрами подключения OleDbConnection myOleDbConnection = new OleDbConnection(connectionString); // создаем объект OleDbCommand OleDbCommand myOleDbCommand = myOleDbConnection.CreateCommand(); // задаем SQL-запрос к базе данных в свойстве CommandText объекта OleDbCommand // Результатом запроса должны быть данные клинета с именем Кто-то myOleDbCommand.CommandText = «SELECT CompanyName, ContactName, Address » + «FROM Clients » + «WHERE ContactName = ‘Кто-то'»; // открываем соединение с БД с помощью метода Open() объекта OleDbConnection myOleDbConnection.Open(); // создаем объект OleDbDataReader и вызываем метод ExecuteReader() для выполнения введенного SQL-запроса OleDbDataReader myOleDbDataReader = myOleDbCommand.ExecuteReader(); // Читаем первую (в нашем случае — и единственную) строку ответа базы данных с помощью метода Read() объекта OleDbDataReader myOleDbDataReader.Read(); // отображаем результат запроса Console.WriteLine(«myOleDbDataReader[» CompanyName «] = » + myOleDbDataReader[«CompanyName»]); Console.WriteLine(«myOleDbDataReader[» ContactName «] = » + myOleDbDataReader[«ContactName»]); Console.WriteLine(«myOleDbDataReader[» Address «] = » + myOleDbDataReader[«Address»]); // закрываем OleDbDataReader методом Close() myOleDbDataReader.Close(); // закрываем соединение с БД myOleDbConnection.Close(); >>
Результатом работы программы будет следующий текст:
myOleDbDataReader[«CompanyName»] = Кто-то и Компания
myOleDbDataReader[«ContactName»] = Кто-то
myOleDbDataReader[«Address»] = Улица Какая-то, д.12
Добавление, изменение и удаление данных в БД
Для чтения данных из БД MS Access используется класс OleDbDataReader . Но для выполнения запросов на вставку, изменение, или удаление данных из базы данных следует использовать метод класса OleDbCommand ExecuteNonQuery () . Его вызов выполняет указанный в свойстве CommandText класса OleDbCommand запроc и возвращает int -число затронутых запосом полей.
В данном случае rowsAffected будет равняться единице. Во время INSERT ‘ов можно использовать параметры, что может пригодиться, например, для загонки в базу данных файла изображения.
Однако во взаимодействии C# и СУБД Microsoft Access есть одна очень неприятная загвоздка: при каких-либо ошибках в синтаксисе, или структуре SQL-запроса, программа падает в OS Loader Lock, и не дает никакой информации о произошедшей ошибке.
Чтобы этого избежать и получить довольно исчерпывающую информацию о произошедшей ошибке, следует выполнять запросы в try-catch блоках:
OleDbCommand cmd = dbconnection.CreateCommand(); cmd.CommandText = «DELETE FROM myTable WHERE (data='» + textbox1.Text + «‘)»; conn.Open(); try < int rowsAffected = cmd.ExecuteNonQuery(); System.Windows.Forms.MessageBox.Show(rowsAffected.ToString()); >catch (Exception ex) < System.Windows.Forms.MessageBox.Show(ex.Message); >conn.Close();
Работа через DataSet и DataTable
При работе через DataSet и DataTable все аналогично за исклением того, что вместо OleDbCommand используется OleDbDataAdapter :
Источник: pro-prof.com