Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
Результаты опроса: Есть необходимость создавать свои статьи
согласен (согласна) 6 100.00%
не согласен (не согласна) 0 0%
мне все равно 0 0%
Голосовавшие: 6. Вы ещё не голосовали в этом опросе

 
 
Рейтинг 4.68/543: Рейтинг темы: голосов - 543, средняя оценка - 4.68
Сергей1980
481 / 314 / 11
Регистрация: 17.12.2009
Сообщений: 742
05.03.2012, 10:50 #21
Совместная работа MS Access и сервера MySQL
Уважаемые коллеги, любители, профессионалы, айтишники, бухгалтеры, логисты, здравствуйте!
Возникла идея написать полезную статью, как организовать совместную работу бесплатного сервера MySQL и программного продукта MS Access (2003,2007,2010).
У каждого человека в данной ветке, пользующегося аксессом в рабочих целях рано или поздно возникала мысль сделать работу программы пошустрей (особенно если использовалась обычная разделенная база данных , где таблицы просто лежали в какой либо папке и пользователь через оболочку аксесса/клиентской частью подключался к этим таблицам, которые все больше и больше тормозили из-за увеличивающегося количества информации и увеличивающегося количества пользователей).
Хоть и обещают разработчики аксесса, что могут единовременно трудится в ней порядка 255 человек, но все это спорно. При моих таблицах нормальные тормоза уже возникали при 16-18 людях, которые одновременно использовали проект. Количество полей в некоторых таблах достигало порядка 100 штук.
Причем проект был неплохо нормализован и логические связи в схеме данных были прописаны правильно.
Решил избавиться от тормозов и поискать удобные решения работы через сервер. Расставаться с удобным и дружелюбным интерфейсом аксесса не хотелось и поэтому в качестве клиентской части оставил его.
В качестве сервера перепробовал следующие варианты:
1) ORACLE
2)SQL LITE
3) MS SQL SERVER 2008
4) MYSQL
Все эти сервера были поставлены и опробованы мной на локальной машине(обычном ноутбуке).
Остановился на последнем варианте, а именно mysql server.
Что понравилось:
1) самая большая скорость работы, по сравнению с остальными вариантами. (те, кто скажет что в мускуле нет транзакций, можно отхлестать по заднице до покраснения)) В версии 5 все есть)
2) Легкость в установке и настройке.
3) Возможность писать помимо аксесовского варианта еще и вэб интерфейс (то есть использовать БД как источник данных для сайта)
4) Хорошая отказоустойчивость.
5) Совместимость языка MySQL и обычного аксесовского JET SQL.
6) Легкий и интуитивно понятный интерфейс администратора сервера MYSQL.
7) Возможность обычной линковки таблиц через MyODBC driver (в случае если база используется на одном компе или в одной корпоративной сети с настроенным общим доступом к источнику данных. В остальных случаях доступ логичней организовать через connection string c точечными запросами к серверу. Мне вообще больше нравится второй вариант, ибо ...ибо нравится)))

ГЛАВА 1. - Установка и настройка MySQL server на домашний комп.
Итак, желание есть, возможности есть, места известны, устанавливаем собственно на комп MySQL server и MyODBC driver.
1) Где найти MySQL . Предлагаю вам сразу поставить готовую сборку MySQL+PHP+HTML+APACHE от энтузиастов сайтостроения. Скачать эту сборку можно
ЗДЕСЬ
Заходите на сайт. Видите большую оранжевую кнопку?? Вот вот, ее и можно нажимать и заливать сервак к себе на комп.
После скачивания дистрибутива, устанавливаете все это к себе на компьютер ("при установке следуйте за зеленым кроликом (С)"-Там все написано таким языком, что даже самый последний даун поставит мускул и апачи к себе на комп. Но не забудьте в конце установки сказать, чтобы иконки на рабочем столе появились.)
После того, как вы все поставили у вас на рабочем столе появились три иконки в виде перышка. START,RESTART,STOP То есть соответственноЗАПУСТИТЬ МУСКУЛ И АПАЧ, ПЕРЕЗАПУСТИТЬ МУСКУЛ И АПАЧ, ЗАВЕРШИТЬ РАБОТУ С МУСКУЛОМ И АПАЧ
Вот такие:
Название: 111.jpg
Просмотров: 11531

Размер: 6.4 Кб
Нажмите иконку перезапустить Денвер.
После перезапуска в нижнем правом углу монитора появится значок перышка и шляпы. Это значит ,что апач и мускул заработал.
Вот такое увидите :
Название: 222.jpg
Просмотров: 12373

Размер: 3.7 Кб
Все отлично, заработало,ура. Возник вопрос, как нам теперь попасть на сервак?
Очень просто, открываете в интернет браузере следующий адрес http://localhost/PhpMyAdmin/
Появится подобная картинка:
Написание статей

По умолчанию денвер никак не паролит сервер и дает свободный доступ к нему любого желающего на локальной машине. Вбиваете логин ROOT и нажимаете Ok Никакой пароль не забиваете. Все , процесс доступа свершился.
Появляется примерно такая картинка:
Написание статей

Видите обведенный поле красным? Это поле ждет, когда вы туда забьете имя своей базы данных, которую будете переносить потом с аксесса на MySQL.
Вводите любое имя на английском и нажимайте Ок.
Все, база данных создана и готова к импорту таблиц с аксесса.


ГЛАВА 2. Перенос таблиц и запросов с аксесса на мускул. Линковка MS access и таблиц мускула через MyODBC driver
Что мы хотим сделать в этой главе? Мы хотим подружить аксесс и MySQL , чтобы мускул крутил наши таблы а аксесс выполнял функции погонщика и смотрителя за педалями этого велосипеда.
Создайте тестовую БД в обычном аксеccе . Создайте одну табличку. Назовите ее по английски Table1.
Создайте в ней всего три поля schetchik,chislo,tekst. Типы данных надеюсь обьяснять не надо
Заполните эту табличку какой нибудь произвольной хренью, которая придет в голову. Числом записей этак на двадцать. Все , пациент к экспорту на мускул готов и ждет его.
Чтобы нормально, грамотно и очень быстро перенести данную таблицу на мускул (она может перенести естественно не только одну таблицу, но и тысячу. Сколько в аксессе есть, столько и перенесет. Если захотите, может и запросы прихватить), предлагаю установить дополнительную программку. Называется она Database Migration Toolkit.
Ну собственно тушка и таблетка находится
ТУТ
ESF Database Migration Toolkit Pro 6.3.27

Не забудьте про лекарства. Сейчас весна, переходный период. Витаминов не хватает. Таблетки помогут.
Рецепт только немного почитайте.
Скачиваете эту программку запускаете. В качестве источника указываете и находите вашу свежесозданную БД в аксеcсе. В качестве пункта назначения выбираете из списка
MySQL database
Server: localhost
Port:3306
User:root
Database: (Имя вашей базы, которую вы создали на серваке).

Не забудьте, что в этот момент мускул должен быть запущен. То есть перышко и шляпа должны быть видны внизу вашего экрана.
Ну там дальше прогресс бар, вы смотрите как заливается на мускул ваши таблы из акса, итд итп. После заливки закрываете программку миграции. Она вам больше не нужна сейчас (если еще ченить захотите потом экспортнуть, ради бога.)
Все, сервер и база готовы к приему аксесса.
Но аксесс не готов. Чтобы ему увидеть мускул, необходимо поставить переходник. То есть MyODBC driver . Это нужно для того, чтобы аксесс читал синтаксис сервака, и наоборот, сервак читал команды аксесса.
Скачать драйвер можно ЗДЕСЬ. Или поставить из приложения в данной статье. Файл называется ДРОВА МУСКУЛ. На 32 битный и 64 битный виндоуз . Выбирайте.
После скачки и установки драйвера, вам необходимо настроить источник данных , по которому аксесс будет связываться с серваком на мускуле.
Чтобы попасть в настройку источника данных- самый простой вариант:
ПУСК-> ВЫПОЛНИТЬ-> odbcad32-> Ок
А далее смотрите по рисунку:
Написание статей

Все. Источник для связки акса готов.
Теперь открываете аксесс и делаете следующее:
Написание статей

Все, вы прилинковались. Успехов. Далее работаете как в классике. Эксперементируйте. Не забывайте включать сервер перед работой акса и мускула. Осторожней с запросами на изменение. Иногда синтаксис не совпадает. Приятного аппетита.


Если моя статья помогла вам, можете кликнуть спасибку.

Кстати при выборе пакета MYSQL можно еще воспользоваться не менее креативной сборкой от наших земляков и поставить мускул от энтузиастов на NIMPBOX. Установить Апач,Мускул,Nginx,FileZilla можно
ЗДЕСЬ. В самопальной сборке очень удобно править настройки обеих серверов. Доступ прямо к файлу htdocs. Все перед глазами. Это не отступление от самой статьи. Это просто для тех, кто освоит инструкцию выше и захочет чего то большего.

Вот кстати сам сервак MySQL приложил. Установочный пакет. С Денвера.

С Уважением,
Сергей
54
Вложения
Тип файла: rar ДРОВА_МУСКУЛ.rar (6.90 Мб, 815 просмотров)
Тип файла: rar САМ_СЕРВАК.rar (6.12 Мб, 604 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.03.2012, 10:50
Ответы с готовыми решениями:

Сжатие базы данных по варианту 6.4. из темы Написание статей
Выполнил все рекомендации изложенные в пункте 6.4.. На последнем этапе застрял....

Написание формул
Здравствуйте, подскажите пожалуста где можно прочитать как составлять формулы в...

Написание формулы
Как правильно записать формулу подсчета накрутки на товар. есть таблица...

Написание триггеров к БД
Доброго времени суток! Необходима помощь в написании триггеров на SQL к БД...

Написание SQL запросов
привет всем! нужна помощь в написании нескольких запросов. извините, просто...

27
Ameli
2058 / 1134 / 38
Регистрация: 05.11.2009
Сообщений: 1,604
17.03.2012, 18:22 #22
Пример разработки структуры базы данных для деканата факультета ВУЗа (в дополнение к статье "О разработке структуры базы данных")

1. Определяемся с целями и задачами нашей бд
Это будет база данных для деканата факультета ВУЗа для учета данных по студентам, преподавателям, для составления учебных планов и расписаний, расчета нагрузки преподавателей, учета сдачи студентами зачетов и экзаменов.

2. Определимся со списком данных, которые нужно хранить в бд
При этом распределяем данные по группам, в дальнейшем это поможет нам разбить данные по таблицам. Хотя набор таблиц может быть другим, но это может стать отправной точкой.
•Студенты в группах (форма обучения, бюджет/контракт, специальности, группы, специализации, ФИО студентов, дата рождения, их контактные данные)
•Преподаватели (ФИО преподавателей, кафедра, должность, звание, научная степень, контактные данные)
•Дисциплины (наименование дисциплины, кто из преподавателей читает или эту информацию отнести к Преподавателям?)
•Учебные планы по курсам (сколько часов какой дисциплины положено на каком курсе по какой специальности и специализации)
•Зачеты и экзамены (какие зачеты и экзамены должны сдавать студенты на определенном курсе, определенной специальности и специализации; результаты сдачи зачетов и экзаменов)
•Расписание занятий для студентов (по каждой группе: неделя (числитель/знаменатель), день недели, время занятия, аудитория, преподаватель, название дисциплины)
•Расписание занятий для преподавателей (по каждому преподавателю: неделя (числитель/знаменатель), день недели, время занятий, аудитория, дисциплина, группа)
•Расчет нагрузки преподавателей (сколько пар каждый день, составление диаграммы)
•Статистика по студентам (бюджет/контракт, рейтинги по оценкам за сдачу экзаменов)
•Начисление стипендии студентам по результатам сдачи экзаменов
При этом заметим, что некоторые данные будут входной информацией, некоторые выходной. Последние четыре пункта нашего списка можно отнести к выходной информации, т.к. введенных данных по всем предыдущим пунктам будет достаточно для получения этих данных.

3. Составим список таблиц
Каждой группе входных данных – своя таблица.
•Студенты
•Преподаватели
•Дисциплины
•Учебные планы
•Зачеты и экзамены
•Расписание занятий
Проанализируем каждую из таблиц на наличие повторяющихся данных:
1)Студенты: В примере студент 1-го курса, который еще не выбрал специализацию:
Основа обученияФорма обученияСпециальностьГруппаСпециализацияФИО студентаДата рожденияАдресТелефон
БюджеточнаяФизика80Ф-11 Иванов Иван Иванович01.01.1995ул. Мира, 5111-11-11
В этой таблице будет происходить дублирование каждой группы по количеству в ней студентов. Каждый раз придется писать номер группы вручную, это может привести к опечаткам, а затем к ошибкам при фильтрации по группе, например. Поэтому выделим группы в отдельную таблицу.
Специальность связана с группой, поэтому отнесем ее к таблице Группы. При этом название специальности все равно придется каждый раз дублировать, поэтому выделяем их в отдельную таблицу.
Также мы видим, что будет происходить дублирование полей Основа обучения и Форма обучения, поэтому эти значения также выделим в отдельные таблицы.
Аналогично со специализацией.
Т.о., вместо одной таблицы Студенты мы получили следующие:
•Специальности
•Группы
•Специализации
•Формы обучения
•Основы обучения
•Студенты
2)Преподаватели:
ФИО преподавателяКафедраДолжностьЗваниеНаучная степеньТелефон
Иванов Иван ИвановичВысшая математикаСтарший преподавательДоцентКандидат наук222-22-22
Здесь будет происходить дублирование по кафедрам, должностям, званиям, научным степеням, поэтому их также выделим в отдельные таблицы, избавив тем самым пользователей бд от необходимости вносить значения этих полей вручную.
Итак, вместо одной таблицы Преподаватели получаем следующие:
•Кафедры
•Должности
•Звания
•Научные степени
•Преподаватели
3)Дисциплины: здесь мы задали себе вопрос, должна ли содержаться в этой таблице информация о том, какой преподаватель читает данную дисциплину, или эту информацию стоит отнести к таблице Преподаватели (т.е. какие дисциплины читает)
ДисциплинаПреподаватель
Мат анализИванов Иван Иванович
Мат анализПетров Петр Петрович
Происходит дублирование названия дисциплины, если ее читает несколько преподавателей.
Если же мы сделаем наоборот и добавим дисциплину в таблицу Преподаватели, то будет происходить дублирование данных о преподавателе в случае чтения им нескольких дисциплин.
Выход из положения – помимо таблиц Преподаватели и Дисциплины, создание дополнительной таблицы Дисциплины по преподавателям, связывающей Преподавателей и Дисциплины.
•Дисциплины
•Дисциплины по преподавателям
4)Учебный план: он будет разным для каждого курса, специальности и специализации:
КурсСпециальностьСпециализацияДисциплинаКол-о часов
1Физика-Механика100
1Физика тв тела-Механика100
3ФизикаМЭЭлектродинамика100
3Физика тв телаМЭЭлектродинамика100
4ФизикаМЭАтомная физика100
4Физика тв телаМЭАтомная физика100
5ФизикаМЭМикроэлектроника100
5Физика тв телаМЭМикроэлектроника100
5 (маг)ФизикаМЭМикроэлектроника100
5 (маг)Физика тв телаМЭМикроэлектроника100
Здесь мы видим дублирование курса, и в принципе не сложно поставить номер курса каждый раз, но у нас имеется 5 (маг), который требует ввода текста, поэтому стоит вынести курсы в отдельную таблицу.
•Курсы
•Учебный план
5)Зачеты и экзамены, назовем эту таблицу Отчетность. Они будут также разными для курсов, специальностей и специализаций, а также семестров:
КурсСпециальностьСпециализацияСеместрДисциплинаВид отчетности
1Физика-1Мат анализЭкзамен
1Физика-1ФизкультураЗачет
Здесь мы видим, что будут дублироваться виды отчетности (зачет/экзамен), поэтому выделим их в отдельную таблицу.
Кроме этого должна быть таблица по сдаче студентами зачетов и экзаменов:
СтудентДата сдачиЗачет/экзаменОценка
Иванов Иван Иванович04.01.2012Мат анализ, экзамен5
Иванов Иван Иванович20.12.2011Физкультура, зачетЗачет
Где поле Зачет/экзамен – поле, связанное с предыдущей таблицей.
Оценки также будут дублироваться, поэтому их тоже стоит выделить в отдельную таблицу. При чем, система оценивания зависит от вида отчетности (зачет/экзамен).
Итак, получаем следующие таблицы:
•Виды отчетности
•Отчетность
•Оценки
•Сдача студентами экзаменов/зачетов
6)Расписание занятий:
НеделяДень неделиВремя занятийГруппаСпециализацияДисциплинаПреподавательТип занятияКорпусАудитория
ЧислительПонедельник8:30 – 10:0580Ф-11-Мат анализИванов Иван Ивановичлекцияглавный302
Будут дублироваться Недели, Дни недели, Время занятий, Типы занятий, Корпуса, Аудитории, поэтому все это выделяем в отдельные таблицы.
•Недели
•Дни недели
•Расписание звонков
•Типы занятий
•Корпуса
•Аудитории

Итак мы получили следующий набор таблиц:
•Курсы
•Специальности
•Группы
•Специализации
•Формы обучения
•Основы обучения
•Студенты
•Кафедры
•Должности
•Звания
•Научные степени
•Преподаватели
•Дисциплины
•Дисциплины по преподавателям
•Учебный план
•Виды отчетности
•Отчетность
•Оценки
•Сдача студентами экзаменов/зачетов
•Недели
•Дни недели
•Расписание звонков
•Типы занятий
•Корпуса
•Аудитории

4. Распределим данные по столбцам таблиц
•Курсы (Курс)
•Специальности (Специальность)
•Группы (Год создания, Специальность, Номер группы)
•Специализации (Специализация)
•Формы обучения (Форма обучения)
•Основы обучения (Основа обучения)
•Студенты (ФИО, Дата рождения, Адрес, Телефон, Основа обучения, Форма обучения, Группа, Специализация)
•Кафедры (Кафедра)
•Должности (Должность)
•Звания (Звание)
•Научные степени (Научная степень)
•Преподаватели (ФИО, Кафедра, Должность, Звание, Научная степень, Контакты)
•Дисциплины (Дисциплина)
•Дисциплины по преподавателям (Дисциплина, Преподаватель)
•Учебный план (Курс, Специальность, Специализация, Дисциплина, Количество часов)
•Виды отчетности (Вид отчетности)
•Отчетность (Курс, Специальность, Специализация, Семестр, Дисциплина, Вид отчетности)
•Оценки (Вид отчетности, Оценка)
•Сдача студентами экзаменов/зачетов (Студент, Дата, Отчетность, Преподаватель, Оценка)
•Недели (Вид недели)
•Дни недели (День недели)
•Расписание звонков (Номер пары, Время начала, Время окончания)
•Типы занятий (Тип занятия)
•Корпуса (Корпус)
•Аудитории (Корпус, Аудитория, Тип аудитории, Количество посадочных мест)
•Расписание занятий (Неделя, День недели, Время занятий, Группа, Специализация, Дисциплина, Тип занятия, Преподаватель, Аудитория)
•Типы аудиторий (Тип аудитории)
Появление последней таблицы обязано продумыванием полей для таблицы Аудитории: возникло бы дублирование типов аудиторий – лекционная, лаборатория и т.д.
Совет: добавлять поля для иерархии, чтобы можно было отфильтровывать список значений поля, стоящего ниже по иерархии, для удобства и ускорения поиска.
Например, на факультете есть специализации, каждая группа – выбранная специальность, она есть в таблице Группы, поэтому Специальность для Группы иерархически выше. Добавив выбор специальности в таблицу Студенты, можно будет отфильтровывать список групп для упрощения ее поиска в списке.
Аналогично с Расписанием занятий: добавим сюда поле Специальность для последующей фильтрации списка групп в списке.
И точно также поступим с Корпусами и Аудиториями в таблице Расписание занятий: добавим поле Корпус для иерархии (чтобы фильтровать аудитории по выбранному корпусу).
Вспомним о правиле, что лучше разбивать информацию на минимальные логические компоненты, поэтому поля ФИО таблиц Студенты и Преподаватели разобьем на три поля, поле Контакты таблицы Преподаватели разобьем на Адрес и Телефон. В дальнейшем это может упростить поиск данных, например. Из поля ФИО сложнее получить Фамилию и инициалы, чем из трех полей Фамилия, Имя, Отчество.
Как видим, наши таблицы не содержат вычисляемых данных, т.к. мы изначально определились, что будет входной информацией, а что выходной.
Учтем советы об именах полей и таблиц: имена, состоящие из нескольких слов, запишем без пробелов, разделяя символом подчеркивания или выделим с большой буквы.
Итак, после небольших корректировок таблицы будут содержать следующие поля:
•Курсы (Курс)
•Специальности (Специальность)
•Группы (Год_создания, Специальность, Номер_группы)
•Специализации (Специализация)
•Формы_обучения (Форма_обучения)
•Основы обучения (Основа_обучения)
•Студенты (Фамилия, Имя, Отчество, Дата_рождения, Адрес, Телефон, Основа_обучения, Форма_обучения, Специальность, Группа, Специализация)
•Кафедры (Кафедра)
•Должности (Должность)
•Звания (Звание)
•Научные_степени (Научная_степень)
•Преподаватели (Фамилия, Имя, Отчество, Кафедра, Должность, Звание, Научная_степень, Адрес, Телефон)
•Дисциплины (Дисциплина)
•Дисциплины/преподаватели (Дисциплина, Преподаватель)
•Учебный_план (Курс, Специальность, Специализация, Дисциплина, Количеств_ часов)
•Виды_отчетности (Вид_отчетности)
•Отчетность (Курс, Специальность, Специализация, Семестр, Дисциплина, Вид_отчетности)
•Оценки (Вид_отчетности, Оценка)
•Сдача_ экз/зач (Студент, Дата, Отчетность, Преподаватель, Оценка)
•Недели (Вид_недели)
•Дни_недели (День_недели)
•Расписание_звонков (Номер_пары, Время_начала, Время_окончания)
•Типы_занятий (Тип_занятия)
•Корпуса (Корпус)
•Аудитории (Корпус, Аудитория, Тип_аудитории, Количество_мест)
•Расписание_занятий (Неделя, День_недели, Время_занятий, Специальность, Группа, Специализация, Дисциплина, Тип_занятия, Преподаватель, Корпус, Аудитория)
•Типы аудиторий (Тип_аудитории)

5. Определим ключевые поля таблиц
Воспользуемся советом о том, что самый лучший и простой ключ для таблицы – счетчик, поэтому добавим его в каждую таблицу с название Код…, где вместо троеточия будем подставлять сокращенные названия таблиц. Это делается для того, что по названию сразу было видно из какой таблицы данный счетчик-ключ.
•Курсы (КодКурса, Курс)
•Специальности (КодСпециальности, Специальность)
•Группы (КодГруппы, Год_создания, Специальность, Номер_группы)
•Специализации (КодСпециализ, Специализация)
•Формы_обучения (КодФормыОбуч, Форма_обучения)
•Основы_обучения (КодОснОбуч, Основа_обучения)
•Студенты (КодСтуд, Фамилия, Имя, Отчество, Дата_рождения, Адрес, Телефон, Основа_обучения, Форма_обучения, Специальность, Группа, Специализация)
•Кафедры (КодКафедры, Кафедра)
•Должности (КодДолжности, Должность)
•Звания (КодЗвания, Звание)
•Научные_степени (КодНаучСт, Научная_степень)
•Преподаватели (КодПрепода, Фамилия, Имя, Отчество, Кафедра, Должность, Звание, Научная_степень, Адрес, Телефон)
•Дисциплины (КодДисц, Дисциплина)
•Дисциплины/преподаватели (КодДисцПреп, Дисциплина, Преподаватель)
•Учебный_план (КодУчПлан, Курс, Специальность, Специализация, Дисциплина, Количество_часов)
•Виды_отчетности (КодВидОтч, Вид_отчетности)
•Отчетность (КодОтч, Курс, Специальность, Специализация, Семестр, Дисциплина, Вид_отчетности)
•Оценки (КодОценки, Вид_отчетности, Оценка)
•Сдача_ экз/зач (КодСдачи, Студент, Дата, Отчетность, Преподаватель, Оценка)
•Недели (КодНед, Вид_недели)
•Дни_недели (КодДняНед, День_недели)
•Расписание_звонков (КодРасписЗв, Номер_пары, Время_начала, Время_окончания)
•Типы_занятий (КодТипЗан, Тип_занятия)
•Корпуса (КодКорп, Корпус)
•Аудитории (КодАуд,Корпус, Аудитория, Тип_аудитории, Количество_ мест)
•Расписание_занятий (КодРаспис, Неделя, День_недели, Время_занятий, Специальность, Группа, Специализация, Дисциплина, Тип_занятия, Преподаватель, Корпус, Аудитория)
•Типы_аудиторий (КодТипАуд, Тип_аудитории)

6. Определим типы данных и другие ограничения для полей
Определяем типы данных полей. Например, Дата рождения таблицы Студенты будет иметь тип Дата/время. Тоже касается полей Время начала, Время окончания таблицы Расписание звонков.
Помним, что тип данных первичных и внешних ключей (т.е. ссылок на первичные ключи) должен совпадать, а т.к. у нас все первичные ключи таблиц – счетчики, то все внешние ключи будут числового типа. Т.е. во внешних ключах будут содержаться первичные ключи – коды записей из связанных таблиц.
Например, поле Специальность таблицы Группы будет числовым, т.к. это внешний ключ таблицы Специальности, и будет связан с первичным ключом Специальностей на схеме данных.
Кроме определения типов данных, задаем также некоторые ограничения для полей. Например, сделаем в поле Семестр подстановку значений 1,2 и зададим свойство Ограничиться списком = Да.
Для полей Время начала и Время окончания таблицы Расписание звонков зададим Формат поля – Краткий формат времени.
К примеру, для поля Курс таблицы Курсы можно задать размер поля 10, т.к. больше 10-символов в этом поле вряд ли будет. Этим мы уменьшаем размер бд, т.е. экономим дисковое пространство.

7. Определим связи между таблицами
Мы планировали связывание таблиц еще на этапе распределения данных по таблицам, поэтому изначально добавляли в нужные места внешние ключи (т.е. ссылки на первичные ключи). Поэтому мы просто соединяем первичные ключи таблиц с внешними ключами.
Например, для таблицы Специализации первичным ключом будет поле КодСпециализ, а внешними ключами для этой таблицы будут поля Специализация таблиц Студенты, Отчетность, Учебный план, Расписание занятий. На схеме данных соединяем их с первичным ключом таблицы Специализация.
И так, проверяя каждую из таблиц, расставляем связи, используя Обеспечение целостности данных.
Новичкам же, возможно, придется на этом этапе проектирования добавлять внешние ключи для связывания таблиц, а может и отдельные связующие таблицы.
Написание статей


Обсуждение статьи
30
Вложения
Тип файла: rar Пример бд.rar (39.9 Кб, 2472 просмотров)
mobile
Эксперт MS Access
22567 / 12885 / 2634
Регистрация: 28.04.2012
Сообщений: 14,092
14.01.2016, 16:58 #23
В Microsoft выпустили хелп-файлы по идентификаторам интерфейса управления библиотеки офиса (Microsoft Office 14.0 Object Library) - https://www.microsoft.com/en-us/download/confirmation.aspx?id=6627 для офиса 10. Статья была видимо подготовлена давно, но никаких ссылок на нее в сети не видел. А очень полезная. Дает имена контролов, тип и ID всех контролов, которые могут быть использованы в меню, контекстном меню, на ленте или выполнены. Особый интерес, для меня во всяком случае, что с помощью команды ExecuteMso можно выполнить любую команду меню. Синтаксис: (пример для вызова диалога принтера)
Visual Basic
1
Application.CommandBars.ExecuteMso "PrintDialogAccess"
Прикладываю скачанный файл со списком команд для всех программ офиса. Для использования команд надо подключать библиотеку офиса Microsoft Office ХХ.0 Object Library. Большая часть команд из файла AccessControls.xlsx пригодна и для старших офисов 2003, 2007.

Весьма любопытно использование команд для других программ офиса. Например в екселе процедура красит цветом по умолчанию текущую ячейку (команды из файла ExcelControls.xlsx во вложении)
Visual Basic
1
2
3
4
Sub SelectionFillColor()
'закрасить ячейки текущим цветом из палитры
    Application.CommandBars.ExecuteMso "CellFillColorPicker"
End Sub
8
Вложения
Тип файла: rar Office2010ControlIDs.rar (2.43 Мб, 91 просмотров)
Khaker_tt
30 / 30 / 6
Регистрация: 24.11.2015
Сообщений: 330
Завершенные тесты: 1
10.02.2016, 07:49 #24
Но всё правило.
0
nizami95
0 / 0 / 0
Регистрация: 08.11.2014
Сообщений: 5
19.04.2016, 02:00 #25
Спасибо, помогло!
0
mobile
Эксперт MS Access
22567 / 12885 / 2634
Регистрация: 28.04.2012
Сообщений: 14,092
22.09.2016, 11:23 #26
В последнее время участились примеры баз с модулями без использования Option Explicit. Хотя и раньше их было немало. В связи с этим размещаю небольшую, но выразительную статью автора Shoker.Pro с другого форума.
К сожалению, по правилам cyberforum.ru не могу дать ссылку на первоисточник
Используйте Option Explicit

Напишите в заголовке каждого своего модуля (то есть перед всеми другими переменными, функциями и процедурами):
Visual Basic
1
Option Explicit
Что это значит?
Это значит, что отныне все переменные, которые вы используете в своей программе, нужно будет объявить явно с помощью оператора объявления Dim.
То есть, если у вас есть процедура:
Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Command1_Click()
 
For i = 1 To 5
  k = "Проход №" + CStr(i)
  '..............
  '..............
Next
 
End Sub
она должна стать такой:
Visual Basic
1
2
3
4
5
6
7
8
9
10
Private Sub Command1_Click()
 
Dim i As Integer, k As String
For i = 1 To 5
  k = "Проход №" + CStr(i)
  '..............
  '..............
Next
 
End Sub
Зачем это нужно?
Если вам дали ссылку на эту статью, значит в своей программе вы допустили ошибку или проявили непонимание, которые можно устранить с помощью Option Explicit. Дело в том, что в случае отсутствия этой опции, VB/VBA встретив незнакомое ему слово, считает его новой переменной. Хотя вы, скорее всего, имели ввиду совершенно другое.


Типичные ошибки:
Visual Basic
1
2
3
4
MyNiceVariable = 5
'..............
If MyNceVariable = 5 Then 'ошибка в имени переменной
                          'VBA решит, что вы ввели новую переменную
Visual Basic
1
2
y = xmod10 'вариант ошибки в синтаксисе (вместо y = x mod 10)
           'VBA решит, что xmod10 - это новая переменная
Visual Basic
1
2
Workbooks(Книга1).Close 'ошибка в использовании текстовой константы (нет кавычек)
                        'VBA решит, что Книга1 - это новая переменная
Visual Basic
1
2
3
4
5
6
k = "Hello World"
'..............
'..............
'..............
p = k + 5 'использование переменной неверного типа (так как тип переменной
          'не объявлен явно в Dim)

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

Как включить:
Tools => Options => Editor => Require Variable Declaration
Включите этот флажок и Option Explicit будет появляться автоматически во всех новых модулях/формах/классах (в старых не появится, нужно будет прописать вручную)
5
habdulov
201 / 22 / 4
Регистрация: 27.01.2015
Сообщений: 313
Записей в блоге: 1
27.12.2016, 17:01 #27
Цитата Сообщение от БурундукЪ Посмотреть сообщение
При удалении данных в таблица
а как вообще удалить?
0
brown-aleks
0 / 0 / 0
Регистрация: 03.01.2015
Сообщений: 9
05.09.2017, 10:18 #28
Цитата Сообщение от Сергей1980 Посмотреть сообщение
Если моя статья помогла вам, можете кликнуть спасибку.
Огромное Вам спасибо! И низкий поклон, за то что пролили свет на тёмные пятна моих познаний. Давно искал способы реализации такой идеи. Кнопку "Спасибка" не нашёл, но от вашей статьи и приложенных к ней файликов я в восторге!

Добавлено через 11 часов 39 минут
Цитата Сообщение от Сергей1980 Посмотреть сообщение
1) самая большая скорость работы, по сравнению с остальными вариантами. (те, кто скажет что в мускуле нет транзакций, можно отхлестать по заднице до покраснения)) В версии 5 все есть)
Всё настроил. Запустил. Работает норм! только вот один косяк не могу понять.... когда Access обращается на сервер через связанную таблицу... на жёсткий диск нагрузка 100% приложение подвисает секунд на 5-30 (зависит от количества записей в данной таблице). Приходят данные свежие, явно подгруженные с сервера, но для чего так жёстки диск нагружать? И ведь пока с диском работать не за кончает, запрашиваемую таблицу не отображает. А если запрос на обновление из нескольких таблиц, то вообще, за это время можно и вздремнуть немного . Количество записей в таблицах совсем крохотное 100-150 максимум. Скорость сети 100Мбит/с. База данных MySQL на хостинге в REG.RU по безлимитному тарифу. Что я настроил не так?
0
05.09.2017, 10:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2017, 10:18

Объявляется тендер на написание простейшей БД!!
Объявляется тендер на написание простейшей БД! Кто заинтересовался пишите на...

Написание запроса к нескольким таблицам
Еще раз здравствуйте! Необходимо написать запрос который возвращает мне ФИО...

Написание сложного запроса SQL
Задача такая: Оператор телефонной связи берет абонентскую плату 300р. и абонент...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru