0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
1 |
|
Отношение должно быть задано для одинакового количества полей30.11.2014, 22:02. Показов 21633. Ответов 9
Здравствуйте уважаемые форумчане, помогите пожалуйста разобраться новичку со связями, при попытке образовать связи вылазит ошибка «Отношение должно быть задано для одинакового количества полей» не понимаю, в чем загвоздка
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
30.11.2014, 22:02 |
Ответы с готовыми решениями: каково должно быть примерное отношение масс Как должна быть организована сеть офиса? Что должно быть настроено обязательно, а чего быть не должно?
Каким должно быть заданное отношение, чтобы выполнялись условия рефлексии, симметрии, антирефлексии , антисимметрии? 9 |
0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
30.11.2014, 22:37 [ТС] |
2 |
НазваниеОС — код операционной системы, числовое поле, подстановка из таблицы «ОС», связь по полю «КодОС», подпись «ОС», отображается поле «НазваниеОС» таблицы «ОС». как я понял это нужно через тип мастер подстановок делать? Задача: построить базу данных интернет-магазина по продаже мобильных телефонов
0 |
0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
30.11.2014, 23:19 [ТС] |
3 |
правильно ли я связал таблицы?
0 |
26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
01.12.2014, 01:52 |
4 |
РешениеСмотрите схему данных. В таблице Телефоны изменены типы полей с мемо на числовой и связаны с кодом соответствующей таблицы. Добавлены новые таблицы. В принципе, схема «звезда» с небольшими дополнениями отражает модель данных задачи и вполне может быть применена.
1 |
0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
01.12.2014, 22:38 [ТС] |
5 |
а почему при заполнении таблицы «телефоны» столбец тип телефона дублируется, это нормально?
0 |
26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
01.12.2014, 22:48 |
6 |
а почему при заполнении таблицы «телефоны» столбец тип телефона дублируется В каком смысле «дублируется»? Разумеется, тип телефона должен быть описан для каждого апппарата. Или Вы о чем-то ином? Тогда о чем?
0 |
0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
01.12.2014, 23:43 [ТС] |
7 |
да там просто два столбца одинаковых было, я переименовал и все, как-то непонятно получается или я что не так делаю( Миниатюры
0 |
0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
02.12.2014, 20:14 [ТС] |
8 |
как сделать, чтобы подстановка данных шла не по коду ос например, а по названию?
0 |
26784 / 14463 / 3192 Регистрация: 28.04.2012 Сообщений: 15,782 |
|
02.12.2014, 20:20 |
9 |
как сделать, чтобы подстановка данных шла не по коду ос например, а по названию? Это делают в формах с помощью полей со списком. Если правильно организовать поле со списком, то видно будет название, а значением поля со списком будет числовой код. Очень удобно. Обычно, при создании поля со списком на форме, мастер сам подсказывает как это сделать.
1 |
0 / 0 / 0 Регистрация: 30.11.2014 Сообщений: 37 |
|
02.12.2014, 20:35 [ТС] |
10 |
Это делают в формах с помощью полей со списком. Если правильно организовать поле со списком, то видно будет название, а значением поля со списком будет числовой код. Очень удобно. Обычно, при создании поля со списком на форме, мастер сам подсказывает как это сделать. ясно, далек я до этого(
0 |
Содержание
- Что значит отношение должно быть задано для одинакового количества полей с одинаковыми типами данных
- Отношение должно быть задано для одинакового количества полей
- Решение
- Что значит отношение должно быть задано для одинакового количества полей с одинаковыми типами данных
Что значит отношение должно быть задано для одинакового количества полей с одинаковыми типами данных
Здравствуйте многоуважаемые.
Мне нужна пооооомощь .
Я пишу программу для туристической фирмы и работаю с БД через ADO .
У меня есть 2 таблицы: со списком туристов и со списком информации на каждого туриста.
Так вот мне надо сделать так, чтобы когда я удаляю рейс, то вместе с ним удалялась инфа на этого туриста из 2-ой таблицы.
Можно конечно через циклы отслеживать и т.д. НО .
Мне надо через Access . Там есть такая феня.
«Обеспечение целостности данных»: каскадное обновление и каскадное удаление .
Я пытаюсь делать но . (неудачи подстерегают меня)
Вот привожу данные 1-ой таблицы:
Code — счетчик
Name — название туриста
Вот привожу данные 2-ой таблицы:
Code — счетчик
Name — имя туриста
Age — возраст
и т.д
Я пытаюсь их в Access»e соединить и привязать но не получается.
please HELP MEEEEEE 🙂 🙂 🙂
← →
menart ( 2002-12-16 20:52 ) [1]
пробуй с помощью SQL-запросов досточно быстро получается
← →
sniknik ( 2002-12-16 23:41 ) [2]
Для создания внешнего ключа можно использовать зарезервированные слова FOREIGN KEY. Если ключ внешней таблицы состоит из нескольких полей, необходимо использовать предложение CONSTRAINT, предназначенное для создания составного индекса. При этом следует перечислить все поля, содержащие ссылки на поля во внешней таблице, а также указать имя внешней таблицы и имена полей внешней таблицы, на которые ссылаются поля, перечисленные выше, причем в том же порядке. Если адресуемые поля являются ключами внешней таблицы, указывать эти поля не следует. По умолчанию ядро базы данных воспринимает ключ внешней таблицы как адресуемые поля.
Ограничения для внешних ключей определяют конкретные действия, выполняемые в случае изменения значения соответствующего ключа:
Можно указать подлежащие выполнению действия с внешней таблицей, исходя из соответствующего действия, выполняемого над ключом в той таблице, для которой определено предложение CONSTRAINT. Например, рассмотрим следующее определение таблицы «Клиенты»:
CREATE TABLE Клиенты (ИндексКлиента INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))
Рассмотрим следующее определение таблицы «Заказы», в котором задано отношение для внешнего ключа, адресующее ключ в таблице «Клиенты»:
CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE CASCADE ON DELETE CASCADE
Оба предложения ON UPDATE CASCADE и ON DELETE CASCADE определены для внешнего ключа. Предложение ON UPDATE CASCADE означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», в таблице «Заказы» будет произведено соответствующее каскадное обновление. Каждый заказ, содержащий соответствующее значение кода клиента, будет автоматически обновлен с использованием нового значения этого кода. Предложение ON DELETE CASCADE означает, что в случае удаления клиента из таблицы «Клиенты», все строки таблицы «Заказы», содержащие код данного клиента, также будут удалены.
Рассмотрим другое определение таблицы «Заказы», где вместо операции CASCADE используется операция SET NULL:
CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE SET NULL ON DELETE SET NULL
Предложение ON UPDATE SET NULL означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», соответствующим значениям внешнего ключа в таблице «Заказы» будут автоматически присвоены значения NULL. Аналогично, предложение ON DELETE SET NULL означает, что в случае удаления клиента из таблицы «Клиенты», всем соответствующим внешним ключам в таблице «Заказы» будут автоматически присвоены значения NULL.
← →
FLIZ ( 2002-12-17 03:55 ) [3]
не понял, что конкретно не получается — связать
в самом Аксесе? не верю, там все просто 🙂
сам работаю в АДО + Аксесс. в аксессе установленны
связи между таблицами, при удалении из дельфи
все прекрасно работает.
можно поточнее — в чем именно трабл. что именн
НЕ работает ?
← →
Sword-Fish ( 2002-12-17 09:58 ) [4]
У меня не получаеться связать таблицы так чтобы подчиненные сами обнавлялись и удалялись нужные данные из подчиненной таблицы .
Я ставлю обеспечение целостности данных и каскадное обновление и каскадное удаление связей .
Нажимаю Создать а он пишет: что так нельзя .
Может я не так делаю .
У меня в обоих таблицах есть ключевые поля Code
В первой таблице 2 поля, во второй таблице 6 полей пытаюсь связать по ключевым полям а он пишет «Недопустимое описание поля при определении индекса или связи. (Ошибка 3409)»
Пытаюсь связать так: в главной таблице по CODE а в подчиненной по какому-нибудь полю, он пишет: «Отношение должно быть задано для одинакового количества полей с одинаковыми типами данных. (Ошибка 3368)»
Я ниче не ПОНИМАЮ .
ПОМОГИТЕ please .
Или дайте ссылку на хороший учебник.
С уважением, Sword-FISH
У тебя пример перед носом (sniknik © (16.12.02 23:41)). подставь свои поля в запросы
CREATE TABLE Клиенты .
CREATE TABLE Заказы .
ну и поменяй имена таблиц на свои.
Хелп по SQL для Access (и для Delphi -> ADOCommand, ADODataSet. ets.) лежит в файле JETSQL40.CHM (у тебя на компьютере, сделай поиск, при установленом в полном варианте Office2000 и «>»)
Ссылка на хороший учебник —>> ближайщий технический магазин.
← →
sniknik ( 2002-12-17 10:36 ) [6]
Извиняюсь! неточность. «ближайщий магазин технической книги»
← →
Sword-Fish ( 2002-12-17 23:06 ) [7]
БОЛЬШОЕ SWORD-FISH»евское спасибо .
🙂 🙂 🙂
← →
std79 ( 2002-12-18 16:25 ) [8]
sniknik
А можно дописать ON UPDATE CASCADE ON DELETE CASCADE,
чтобы при добавлении в главной таблице в таблице заказов тоже добавлялась строчка?
← →
BlackTiger ( 2002-12-18 16:56 ) [9]
Наколько я понял, «таблица туристов» это и есть «таблица рейсов»?
Ты пытаешься связать еще пустые таблицы или уже заполненные. Если заполненные, то видимо у тебя нарушена связанность. Сейчас сформулирую. Короче есть в рейсе есть ссылка на инфу туриста, которая уже удалена (кажется так, или наоборот). Внутренняя проверка integrity просто не дает создать тебе такую «непонятную» связь «чего-то» с «неизвестно-чем». Попробуй очистить таблицы от данных.
У тебя есть рейс под кодом «R1», есть инфа на туриста под кодом «T1». Но если та же инфа есть на другой рейс «R2», то каскадного удаления на получится.
Короче связать для каскада можно «что-то уникально проиндексированное» с «чем-то существующим и проиндексированным» (ОДИН-КО-МНОГИМ).
вряд ли, откуда ему данные для второй тавлици брать? и зачем? 2 инсерта подряд решают проблему. А тригеров где бы можно расписать куда что распихивать в Access в отличии от MSSQL нет.
а вообще поищи у себя JETSQL40.CHM (в руском офисе он даже будет на русском! скорее всего) и почитай что возможно что нет.
Источник
Отношение должно быть задано для одинакового количества полей
Вложения
![]() |
new.rar (21.4 Кб, 12 просмотров) |
Как должна быть организована сеть офиса? Что должно быть настроено обязательно, а чего быть не должно?
Добрый день. Сразу оговорюсь, что я инженер-строитель и настройкой сети занимаюсь только потому.
Создать класс. Символьное поле должно быть задано как объект класса string
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как объект класса string.
НазваниеОС — код операционной системы, числовое поле, подстановка из таблицы «ОС», связь по полю «КодОС», подпись «ОС», отображается поле «НазваниеОС» таблицы «ОС».
как я понял это нужно через тип мастер подстановок делать?
Задача: построить базу данных интернет-магазина по продаже мобильных телефонов
Вложения
![]() |
new2.rar (22.4 Кб, 19 просмотров) |
Решение
Смотрите схему данных. В таблице Телефоны изменены типы полей с мемо на числовой и связаны с кодом соответствующей таблицы. Добавлены новые таблицы.
В принципе, схема «звезда» с небольшими дополнениями отражает модель данных задачи и вполне может быть применена.
Источник
Что значит отношение должно быть задано для одинакового количества полей с одинаковыми типами данных
Здравствуйте многоуважаемые.
Мне нужна пооооомощь .
Я пишу программу для туристической фирмы и работаю с БД через ADO .
У меня есть 2 таблицы: со списком туристов и со списком информации на каждого туриста.
Так вот мне надо сделать так, чтобы когда я удаляю рейс, то вместе с ним удалялась инфа на этого туриста из 2-ой таблицы.
Можно конечно через циклы отслеживать и т.д. НО .
Мне надо через Access . Там есть такая феня.
«Обеспечение целостности данных»: каскадное обновление и каскадное удаление .
Я пытаюсь делать но . (неудачи подстерегают меня)
Вот привожу данные 1-ой таблицы:
Code — счетчик
Name — название туриста
Вот привожу данные 2-ой таблицы:
Code — счетчик
Name — имя туриста
Age — возраст
и т.д
Я пытаюсь их в Access»e соединить и привязать но не получается.
please HELP MEEEEEE 🙂 🙂 🙂
← →
menart ( 2002-12-16 20:52 ) [1]
пробуй с помощью SQL-запросов досточно быстро получается
← →
sniknik ( 2002-12-16 23:41 ) [2]
Для создания внешнего ключа можно использовать зарезервированные слова FOREIGN KEY. Если ключ внешней таблицы состоит из нескольких полей, необходимо использовать предложение CONSTRAINT, предназначенное для создания составного индекса. При этом следует перечислить все поля, содержащие ссылки на поля во внешней таблице, а также указать имя внешней таблицы и имена полей внешней таблицы, на которые ссылаются поля, перечисленные выше, причем в том же порядке. Если адресуемые поля являются ключами внешней таблицы, указывать эти поля не следует. По умолчанию ядро базы данных воспринимает ключ внешней таблицы как адресуемые поля.
Ограничения для внешних ключей определяют конкретные действия, выполняемые в случае изменения значения соответствующего ключа:
Можно указать подлежащие выполнению действия с внешней таблицей, исходя из соответствующего действия, выполняемого над ключом в той таблице, для которой определено предложение CONSTRAINT. Например, рассмотрим следующее определение таблицы «Клиенты»:
CREATE TABLE Клиенты (ИндексКлиента INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))
Рассмотрим следующее определение таблицы «Заказы», в котором задано отношение для внешнего ключа, адресующее ключ в таблице «Клиенты»:
CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE CASCADE ON DELETE CASCADE
Оба предложения ON UPDATE CASCADE и ON DELETE CASCADE определены для внешнего ключа. Предложение ON UPDATE CASCADE означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», в таблице «Заказы» будет произведено соответствующее каскадное обновление. Каждый заказ, содержащий соответствующее значение кода клиента, будет автоматически обновлен с использованием нового значения этого кода. Предложение ON DELETE CASCADE означает, что в случае удаления клиента из таблицы «Клиенты», все строки таблицы «Заказы», содержащие код данного клиента, также будут удалены.
Рассмотрим другое определение таблицы «Заказы», где вместо операции CASCADE используется операция SET NULL:
CREATE TABLE Заказы (КодЗаказа INTEGER PRIMARY KEY, ИндексКлиента INTEGER, ПримечанияЗаказа NCHAR VARYING (255), CONSTRAINT ВнКлЗаказыИндексКлиента FOREIGN KEY (ИндексКлиента) REFERENCES Клиенты ON UPDATE SET NULL ON DELETE SET NULL
Предложение ON UPDATE SET NULL означает, что в случае обновления кода клиента (ИндексКлиента) в таблице «Клиенты», соответствующим значениям внешнего ключа в таблице «Заказы» будут автоматически присвоены значения NULL. Аналогично, предложение ON DELETE SET NULL означает, что в случае удаления клиента из таблицы «Клиенты», всем соответствующим внешним ключам в таблице «Заказы» будут автоматически присвоены значения NULL.
← →
FLIZ ( 2002-12-17 03:55 ) [3]
не понял, что конкретно не получается — связать
в самом Аксесе? не верю, там все просто 🙂
сам работаю в АДО + Аксесс. в аксессе установленны
связи между таблицами, при удалении из дельфи
все прекрасно работает.
можно поточнее — в чем именно трабл. что именн
НЕ работает ?
← →
Sword-Fish ( 2002-12-17 09:58 ) [4]
У меня не получаеться связать таблицы так чтобы подчиненные сами обнавлялись и удалялись нужные данные из подчиненной таблицы .
Я ставлю обеспечение целостности данных и каскадное обновление и каскадное удаление связей .
Нажимаю Создать а он пишет: что так нельзя .
Может я не так делаю .
У меня в обоих таблицах есть ключевые поля Code
В первой таблице 2 поля, во второй таблице 6 полей пытаюсь связать по ключевым полям а он пишет «Недопустимое описание поля при определении индекса или связи. (Ошибка 3409)»
Пытаюсь связать так: в главной таблице по CODE а в подчиненной по какому-нибудь полю, он пишет: «Отношение должно быть задано для одинакового количества полей с одинаковыми типами данных. (Ошибка 3368)»
Я ниче не ПОНИМАЮ .
ПОМОГИТЕ please .
Или дайте ссылку на хороший учебник.
С уважением, Sword-FISH
У тебя пример перед носом (sniknik © (16.12.02 23:41)). подставь свои поля в запросы
CREATE TABLE Клиенты .
CREATE TABLE Заказы .
ну и поменяй имена таблиц на свои.
Хелп по SQL для Access (и для Delphi -> ADOCommand, ADODataSet. ets.) лежит в файле JETSQL40.CHM (у тебя на компьютере, сделай поиск, при установленом в полном варианте Office2000 и «>»)
Ссылка на хороший учебник —>> ближайщий технический магазин.
← →
sniknik ( 2002-12-17 10:36 ) [6]
Извиняюсь! неточность. «ближайщий магазин технической книги»
← →
Sword-Fish ( 2002-12-17 23:06 ) [7]
БОЛЬШОЕ SWORD-FISH»евское спасибо .
🙂 🙂 🙂
← →
std79 ( 2002-12-18 16:25 ) [8]
sniknik
А можно дописать ON UPDATE CASCADE ON DELETE CASCADE,
чтобы при добавлении в главной таблице в таблице заказов тоже добавлялась строчка?
← →
BlackTiger ( 2002-12-18 16:56 ) [9]
Наколько я понял, «таблица туристов» это и есть «таблица рейсов»?
Ты пытаешься связать еще пустые таблицы или уже заполненные. Если заполненные, то видимо у тебя нарушена связанность. Сейчас сформулирую. Короче есть в рейсе есть ссылка на инфу туриста, которая уже удалена (кажется так, или наоборот). Внутренняя проверка integrity просто не дает создать тебе такую «непонятную» связь «чего-то» с «неизвестно-чем». Попробуй очистить таблицы от данных.
У тебя есть рейс под кодом «R1», есть инфа на туриста под кодом «T1». Но если та же инфа есть на другой рейс «R2», то каскадного удаления на получится.
Короче связать для каскада можно «что-то уникально проиндексированное» с «чем-то существующим и проиндексированным» (ОДИН-КО-МНОГИМ).
вряд ли, откуда ему данные для второй тавлици брать? и зачем? 2 инсерта подряд решают проблему. А тригеров где бы можно расписать куда что распихивать в Access в отличии от MSSQL нет.
а вообще поищи у себя JETSQL40.CHM (в руском офисе он даже будет на русском! скорее всего) и почитай что возможно что нет.
Источник
Oh yet another wonderful error from Access. This time I get the «Relationship must be on the same number of fields with the same data types.» message. This would seem like such a simple fix but I’m thoroughly confused as to why this message would pop up given my code:
Code for first table in which I’m trying to reference:
CREATE TABLE ProgramSupervisor
( EmpNo CHAR (6) ,
ProgramSupervisorNo CHAR (6) ,
TeamNo CHAR (3) CONSTRAINT TeamNoRequired NOT NULL ,
CONSTRAINT PKProgramSupervisor PRIMARY KEY (EmpNo , ProgramSupervisorNo) ,
CONSTRAINT FKProgSupEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )
Code for the second table that is referencing the first table:
CREATE TABLE ISL
( ISLNo CHAR (6) ,
ProgramSupervisorNo CHAR (6) ,
ISLName VARCHAR (30) CONSTRAINT ISLNameRequired NOT NULL,
ISLStreet VARCHAR (40) CONSTRAINT ISLStreetRequired NOT NULL ,
ISLCity VARCHAR (30) CONSTRAINT ISLCityRequired NOT NULL ,
ISLState CHAR (2) CONSTRAINT ISLStateRequired NOT NULL ,
ISLZip CHAR (5) CONSTRAINT ISLZipRequired NOT NULL,
CONSTRAINT PKISL PRIMARY KEY (ISLNo) ,
CONSTRAINT FKProgSupNo FOREIGN KEY (ProgramSupervisorNo) REFERENCES
ProgramSupervisor )
I’m trying to reference the PK ProgramSupervisorNo as a FK in my ISL table. Yet it gives me the above mentioned error when both fields in each table have a CHAR (6) data definition. I have no idea what to do and any help is much appreciated.
Создать таблицу «Штатное расписание»
Аналогично предыдущей таблице создаем вторую:
Заполняем данную таблицу (произвольно):
3. Создать таблицу «Детали»
Как и в пунктах 1-2 создаем новую таблицу:
Примечание: Обратите внимание на поле «Время обработки», размер этого поля «одинарное с плавающей точкой» и «число десятичных знаков» указываем 2 знака. Это необходимо для того, чтобы можно было вводить дробные значения. Например, время обработки детали составляет 6 минут, т.е. 0,1 часа.
4. Создать таблицу «Работники»
Как и в предыдущих случаях, сохранить и заполнить таблицу, при этом поле «Код должности» может иметь только те значения, которые использованы в таблице «Штатное расписание». Например, если в «штатном расписании» код должности – это значения от 1 до 5, то и в таблице «Работники» можно вводить в любом порядке именно эти значения, повторяя их, если нужно, так как несколько человек могут иметь одну и ту же должность. Номера цехов также повторяются (от 1 до 5), так как в одном и том же цехе работает несколько работников.
Пример заполнения таблицы (можно заполнять произвольными данными):
5. Создать таблицу «Выполнение работ»
Создаем таблицу со следующими полями:
Ключевых полей в этой таблице нет. В таблице будет информация о том, какие работы выполнены в течение заданного периода (за один день или за одну неделю). Значения всех полей могут повторяться, так как один и тот же работник выполнит несколько видов работ, и одна и та же деталь может обрабатываться разными работниками. Количество обработанных деталей указываем произвольно).
Вносим необходимые данные (произвольно) – не менее 20 записей.
Установить связи между таблицами
Закрыть все таблицы
Работа с базами данных – Схема данных
Устанавливаем необходимые связи, при этом отмечаем флажками поля
Затем нажимаем на кнопку «Объединение» и выбираем направление связи между таблицами, которое зависит от того, какая таблица будет основной в данном случае, а какая зависимой.
Если возникают ошибки при установлении связей, то исправляем их:
Пояснение. При установлении связей возможны следующие ошибки:
После того, как все таблицы будут связаны, можно создавать запросы.
7. Создать запрос «Расчет» в режиме «Конструктор» по всем таблицам с полями: Табельный номер, ФИО, Номер цеха, Название цеха, Код должности, Должность, Разряд, Часовой тариф, Код детали, Название детали, Время обработки, Количество.
Создание – Конструктор запросов
добавляем все таблицы:
Далее выбираем необходимые поля, Табельный номер из таблицы «Выполнение работ», ФИО из таблицы «Работники», Номер цеха из таблицы «Перечень цехов» и т.д. Проверяем, как работает запрос, т.е. при правильно установленных связях на экран д.б. выведены все эти поля, если же запрос не работает, то это, скорее всего, из-за того, что неверно выбрано направление связей. В этом случае нужно удалить запрос, открыть Схему данных и проверить тип объединения, а затем создать запрос заново.
Рассчитать в новой графе стоимость выполнения работ по формуле Стоимость:[Количество]*[Время обработки]*[Часовой тариф]
В следующем свободном поле пишем формулу стоимости:
, пример выполненного запроса:
Возвращаемся в режим конструктора и делаем поле «Стоимость» денежным:
Закрываем запрос, появится окно Сохранить?, сохраняем под именем «Расчет».
8. Создать отчет в режиме Мастера по запросу «Расчет» с группировкой по полю «табельный номер» и с подсчетом итоговой суммы по полю «Стоимость».
Создание – Мастер отчетов
В появившемся окне выбираем запрос «Расчет»:
переходим Далее, выбираем группировку поля «табельный номер» по возрастанию,
нажимаем кнопку «Итоги», указываем вид итога (Sum по полю стоимость),
вид макета выбираем табличный, выбираем стиль (произвольно), задаем имя отчета, Готово. Пример отчета:
Для удаления лишней информации в отчете переходим в режим конструктора отчетов и убираем некоторые строки.
Так выглядит отчет в режиме конструктора:
Например, можно удалить строку:
Также нужно для итогов сделать денежный формат (через правую клавишу мыши и «свойства»):
Источник
Отношение должно быть задано для одинакового количества полей
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вложения
![]() |
new.rar (21.4 Кб, 12 просмотров) |
Как должна быть организована сеть офиса? Что должно быть настроено обязательно, а чего быть не должно?
Добрый день. Сразу оговорюсь, что я инженер-строитель и настройкой сети занимаюсь только потому.
Создать класс. Символьное поле должно быть задано как объект класса string
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как объект класса string.
как я понял это нужно через тип мастер подстановок делать?
Задача: построить базу данных интернет-магазина по продаже мобильных телефонов
Вложения
![]() |
new2.rar (22.4 Кб, 19 просмотров) |
Решение
Смотрите схему данных. В таблице Телефоны изменены типы полей с мемо на числовой и связаны с кодом соответствующей таблицы. Добавлены новые таблицы.
В принципе, схема «звезда» с небольшими дополнениями отражает модель данных задачи и вполне может быть применена.
Источник
Создание, изменение и удаление отношения
Отношение в Access позволяет объединить данные из двух разных таблиц. Каждое отношение состоит из двух полей (по одному в каждой таблице) со связанными данными. Например, таблицы «Товары» и «Сведения о заказах» могут содержать поле «КодТовара». Каждая запись в таблице «Сведения о заказах» содержит значение поля «КодТовара», которому соответствует запись в таблице «Товары» с тем же значением в данном поле.
При помощи отношений между связанными таблицами приложение Access определяет, какие записи из каждой таблицы поместить в набор результатов запроса. Отношение также позволяет избежать потери данных, препятствуя исключению удаленных данных из синхронизации. Это называется целостностью данных.
Перед началом работы с отношениями изучите основные понятия. Дополнительные сведения о см. в статьях Руководство по связям между таблицами и Начало работы со связями между таблицами.
В этой статье
Обзор
Чтобы создать отношение в базе данных Access, можно воспользоваться одним из указанных ниже методов.
В окне «Схема данных» добавьте таблицы, которые требуется связать, а затем перетащите нужное поле из одной таблицы в другую.
Перетащите поле в таблицу из области Список полей.
При создании отношения между таблицами общие поля могут называться по-разному, однако часто требуется, чтобы эти имена совпадали. Очевидно, что общие поля должны иметь одинаковый тип данных. Однако если поле первичного ключа имеет тип «Счетчик», поле внешнего ключа также может быть числовым, если свойство Размер поля (FieldSize) обоих полей совпадает. Например, можно сопоставить поля с типами «Счетчик» и «Числовой», если свойство Размер поля обоих полей имеет значение «Длинное целое». Если оба общих поля являются числовыми, у них должно совпадать значение свойства Размер поля.
Создание отношения между таблицами с помощью окна отношений
На вкладке Работа с базами данных в группе Отношения выберите элемент Схема данных.
На вкладке Конструктор в группе Связи нажмите на Добавление таблиц (или Добавление таблицы в Access 2013).
Выберите одну или несколько таблиц или запросов и нажмите кнопку Добавить. После добавления таблиц и запросов на вкладку «Схема данных» нажмите кнопку Закрыть.
Перетащите поле (как правило, поле первичного ключа) из одной таблицы на общее поле (поле внешнего ключа) в другой таблице. Чтобы перетащить сразу несколько полей, нажмите и удерживайте клавишу CTRL, нажмите каждое поле и перетащите выделенные поля.
Откроется диалоговое окно Изменение связей.
Убедитесь, что имена общих полей отношения отображаются правильно. Если имя поля неправильное, щелкните его и выберите нужное поле из списка.
Чтобы обеспечить целостность данных для этой связи, установите флажок Обеспечение целостности данных. Дополнительные сведения о целостности данных см. в разделе Обеспечение целостности данных.
Нажмите кнопку Создать.
Будет нарисована линия связи между двумя таблицами. Если установлен флажок Обеспечение целостности данных, концы линии выглядят утолщенными. Кроме того, если установлен флажок Обеспечение целостности данных, над утолщенной частью на одном конце линии связи будет отображаться цифра 1, а на другом — символ бесконечности ( ∞), как показано на рисунке ниже.
Создание связи «один-к-одному» Оба общих поля (как правило, поля первичного ключа и внешнего ключа) должны иметь уникальный индекс. Это означает, что свойство Индексированное этих полей должно иметь значение Да (Совпадения не допускаются). Если оба поля имеют уникальный индекс, в Access будет создано отношение «один-к-одному».
Создание отношения «один-ко-многим». Поле на стороне «один» (как правило, первичный ключ) отношения должно иметь уникальный индекс. Это значит, что свойство Индексированное поле должно иметь значение Да (Совпадения не допускаются). Поле на стороне «многие» не должно иметь уникального индекса. Это поле может быть индексированным, но для него должны допускаться повторы. Это означает, что свойство Индексированное поле должно иметь значение Нет или Да (Допускаются совпадения). Когда у одного поля однозначный индекс, а у другого — нет, в приложении Access создается отношение «один-ко-многим».
Создание отношения между таблицами с помощью панели списка полей
Добавить поле в существующую таблицу, открытую в режиме таблицы, можно путем перетаскивания этого поля из области Список полей. В области Список полей отображаются доступные поля из связанных таблиц, а также из других таблиц базы данных.
При перетаскивании поля из «другой» (несвязанной) таблицы и выполнении инструкций мастера подстановок между таблицей из области Список полей и таблицей, в которую перетаскивается поле, автоматически создается новое отношение «один-ко-многим». Это отношение, созданное Access, не обеспечивает целостность данных по умолчанию. Чтобы обеспечить целостность данных, нужно изменить отношение. Дополнительные сведения см. в разделе Изменение отношения.
Открытие таблицы в режиме таблицы
Дважды щелкните таблицу в области навигации.
Открытие области «Список полей»
Нажмите клавиши ALT+F8. Будет отображена область Список полей.
В области Список полей отображены все другие таблицы базы данных, сгруппированные по категориям. При работе с таблицей в режиме таблицы в области Список полей отображаются поля в одной из двух категорий: Доступные поля в связанной таблице и Доступные поля в другой таблице. К первой категории относятся все таблицы, связанные отношением с текущей таблицей. Во второй категории перечислены все таблицы, с которыми данная таблица не связана отношением.
Чтобы просмотреть список всех полей таблицы, щелкните знак плюс ( +) рядом с именем таблицы в области Список полей. Чтобы добавить поле в таблицу, перетащите его из области Список полей в таблицу в режиме таблицы.
Добавление поля и создание связи из области «Список полей»
Открыв таблицу в режиме таблицы, нажмите клавиши ALT+F8. Будет отображена область Список полей.
Чтобы отобразить список полей в таблице, в группе Доступные поля в другой таблице щелкните знак плюс ( +) рядом с именем таблицы.
Перетащите нужное поле из области Список полей в таблицу, открытую в режиме таблицы.
Когда появится линия вставки, поместите поле в выбранное место.
Появится окно мастера подстановок.
Следуйте инструкциям мастера подстановок.
Поле будет отображено в таблице в режиме таблицы.
При перетаскивании поля из «другой» (несвязанной) таблицы и выполнении инструкций мастера подстановок между таблицей из области Список полей и таблицей, в которую было перетаскивается поле, автоматически создается новое отношение «один-ко-многим». Это отношение, созданное Access, не обеспечивает целостность данных по умолчанию. Чтобы обеспечить целостность данных, нужно изменить отношение. Дополнительные сведения см. в разделе Изменение отношения.
Изменение отношения
Чтобы изменить отношение, выберите его в окне «Схема данных» и внесите нужные изменения.
Установите указатель на линию связи и щелкните линию, чтобы выделить ее.
При выделении линия связи становится толще.
Дважды щелкните выделенную линию связи
на вкладке Конструктор в группе Сервис выберите команду Изменить связи.
Откроется диалоговое окно Изменение связей.
Открытие диалогового окна «Изменение связей»
На вкладке Работа с базами данных в группе Отношения выберите элемент Схема данных.
На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
Будут отображены все таблицы с отношениями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр «Показывать скрытые объекты».
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
Дважды щелкните линию связи.
На вкладке Конструктор в группе Сервис выберите команду Изменить связи.
Откроется диалоговое окно Изменение связей.
Внесите изменения и нажмите кнопку ОК.
В диалоговом окне Изменение связей можно изменить связи между таблицами (например, таблицы, запросы или поля на любой стороне связи). Можно также задать тип соединения или включить обеспечение целостности данных и выбрать каскадный параметр. Дополнительные сведения о типе соединения и его просмотре см. в разделе Указание типа соединения. Дополнительные сведения об обеспечении целостности данных и выборе каскадного параметра см. в разделе Обеспечение целостности данных.
Указание типа соединения
При определении отношения между таблицами сведения о нем влияют на структуру запросов. Например, при определении отношения между двумя таблицами и создании запроса, работающего с этими двумя таблицами, в Access автоматически выбираются сопоставляемые поля по умолчанию на основе полей, указанных в отношении. Эти исходные значения в запросе можно переопределить, но часто значения, определенные отношением между таблицами, являются верными. Поскольку сопоставление и объединение данных из двух таблиц являются часто воспроизводимыми действиями во всех базах данных, кроме самых простых, параметры по умолчанию, определенные отношениями между таблицами, могут быть полезны и экономить время.
С помощью запроса к нескольким таблицам можно комбинировать данные из них путем сопоставления значений в общих полях. Операция сопоставления и комбинирования называется объединением. Например, требуется отобразить заказы клиентов. Для этого создается запрос, объединяющий таблицы «Клиенты» и «Заказы» по полю «Код клиента». Результаты запроса содержат сведения о клиенте, а также другие сведения только для строк с найденным соответствующим значением.
Одно из значений, которое можно задать для каждого отношения, — это тип объединения. Тип объединения определяет, какие записи будут включены в результаты запроса. Обратимся к описанному примеру с объединением таблиц «Клиенты» и «Заказы» по общим полям, представляющим код клиента. При использовании типа объединения по умолчанию (внутреннего соединения) запрос возвращает только строки таблиц «Клиенты» и «Заказы», для которых общие поля (также называемые связанными полями) совпадают.
Предположим, что требуется включить в результаты всех клиентов — даже тех, которые еще не сделали ни одного заказа. Для этого нужно изменить тип объединения с внутреннего на так называемое левое внешнее соединение. При использовании левого внешнего соединения возвращаются все строки таблицы на левой стороне отношения и только сопоставленные строки на правой. При использовании правого внешнего соединения возвращаются все строки на правой стороне отношения и только сопоставленные — на левой.
Примечание: В этом случае термины «слева» и «справа» относятся к положению таблиц в диалоговом окне Изменение связей, а не в окне «Схема данных».
Следует определить, какие результаты наиболее часто требуются от запроса, соединяющего таблицы в конкретной связи, и в соответствии с этим выбрать тип соединения.
Указание типа соединения
В диалоговом окне Изменение связей нажмите кнопку Тип соединения.
Откроется диалоговое окно Параметры соединения.
Выберите нужные параметры и нажмите кнопку ОК.
В таблице ниже, составленной на основании таблиц «Клиенты» и «Заказы», приведены три варианта, отображаемые в окне Параметры объединения, указан используемый в них тип объединения, а также то, какие именно строки (все или только сопоставленные) возвращаются для каждой из таблиц.
1. Объединение только тех записей, в которых связанные поля обеих таблиц совпадают.
2. Объединение ВСЕХ записей из таблицы «Клиенты» и только тех записей из таблицы «Заказы», в которых связанные поля совпадают.
Левое внешнее соединение
3. Объединение ВСЕХ записей из таблицы «Заказы» и только тех записей из таблицы «Клиенты», в которых связанные поля совпадают.
Правое внешнее соединение
При выборе варианта 2 или 3 на линии связи будет отображена стрелка, указывающая на ту сторону связи, в которой отображаются только сопоставленные строки.
Внесение изменений в окне «Параметры объединения»
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр «Показывать скрытые объекты».
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
Дважды щелкните линию связи. Откроется диалоговое окно Изменение связей.
В диалоговом окне Параметры объединения выберите нужный параметр и нажмите кнопку ОК.
Внесите в связь необходимые изменения и нажмите кнопку ОК.
Обеспечение целостности данных
Целью обеспечения целостности данных является предотвращение появления непарных записей, ссылающихся на несуществующие записи. Обеспечение целостности данных включается для конкретного отношения между таблицами. В результате Access отменяет для этого отношения все действия, которые могут нарушить целостность данных. Это означает, что будет отменено как обновление, изменяющее целевой объект ссылки, так и удаление такого целевого объекта. Сведения о том, как настроить в Access распространение операций обновления и удаления таким образом, чтобы в результате изменялись и все связанные строки, см. в разделе Задание каскадных параметров.
Включение и отключение обеспечения целостности данных
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр «Показывать скрытые объекты».
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
Дважды щелкните линию связи. Откроется диалоговое окно Изменение связей.
Выберите или отмените параметр Обеспечение целостности данных.
Внесите в отношение необходимые изменения и нажмите кнопку ОК.
В режиме обеспечения целостности данных действуют перечисленные ниже правила.
Не допускается ввод в поле внешнего ключа связанной таблицы значений, отсутствующих в поле первичного ключа главной таблицы, поскольку это приводит к появлению потерянных записей.
Не допускается удаление записи из главной таблицы, если в связанной таблице существуют связанные с ней записи. Например, невозможно удалить запись из таблицы «Сотрудники», если в таблице «Заказы» имеются заказы, относящиеся к данному сотруднику. Однако можно удалить главную запись и все связанные записи одним действием, установив флажок Каскадное удаление связанных записей.
Не допускается изменение значения первичного ключа в главной таблице, если это приведет к появлению потерянных записей. Например, нельзя изменить номер заказа в таблице «Заказы», если в таблице «Сведения о заказах» имеются строки, относящиеся к этому заказу. Однако можно обновить главную запись и все связанные записи одним действием, установив флажок «Каскадное обновление связанных полей».
Примечания: Если при включении обеспечения целостности данных возникли трудности, обратите внимание на то, что должны выполняться условия, перечисленные ниже.
Общее поле главной таблицы должно быть первичным ключом или иметь уникальный индекс.
Общие поля должны иметь одинаковый тип данных. Единственное исключение — поле типа «Счетчик» можно связать с полем типа «Числовой», если его свойство Размер поля имеет значение Длинное целое.
Обе таблицы существуют в одной базе данных Access. Обеспечение целостности данных нельзя включить для присоединенных таблиц. Однако если исходные таблицы имеют формат Access, можно открыть базу данных, в которой они хранятся, и включить обеспечение целостности данных в этой базе.
Задание каскадных параметров
Иногда возникает ситуация, в которой требуется изменить значение только на стороне «один» отношения. В этом случае необходимо, чтобы Access автоматически обновил все затронутые строки в ходе выполнения одной операции. Тогда обновление будет полностью завершено, а база данных не будет находиться в несогласованном состоянии, когда некоторые строки обновлены, а другие — нет. Этой проблемы можно избежать с помощью параметра Access «Каскадное обновление связанных полей». Если при включении обеспечения целостности данных был включен параметр «Каскадное обновление связанных полей», то при последующем обновлении первичного ключа автоматически будут обновлены все связанные с ним поля.
Также может потребоваться удаление строки и всех связанных с ней записей — например, записи в таблице «Поставщики» и всех связанных с этим поставщиком заказов. Для этого в Access предназначен параметр «Каскадное удаление связанных записей». Если включить обеспечение целостности данных и установить флажок Каскадное удаление связанных записей, при удалении записи, содержащей первичный ключ, будут автоматически удалены все записи, связанные с этим первичным ключом.
Включение и отключение каскадного обновления и каскадного удаления
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр «Показывать скрытые объекты».
Щелкните линию отношения, которое вы хотите изменить. При выделении линия связи становится толще.
Дважды щелкните линию связи.
Откроется диалоговое окно Изменение связей.
Установите флажок Обеспечение целостности данных.
Установите флажок Каскадное обновление связанных полей, Каскадное удаление связанных записей или оба эти флажка.
Внесите в отношение необходимые изменения и нажмите кнопку ОК.
Примечание: Если первичным ключом является поле «Счетчик», установка флажка Каскадное обновление связанных полей не произведет никакого эффекта, поскольку изменить значение поля «Счетчик» нельзя.
Удаление отношения между таблицами
Важно: При удалении связи также отключается обеспечение целостности данных для этой связи, если оно было включено. В результате Access больше не будет автоматически предотвращать появление потерянных записей на стороне «многие» отношения.
Чтобы удалить отношение между таблицами, нужно удалить линию связи в окне «Схема данных». Установите указатель мыши на линию связи и щелкните ее. При выделении линия связи становится толще. Выделив линию связи, нажмите клавишу DEL.
На вкладке Работа с базами данных в группе Отношения нажмите кнопку Схема данных.
На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
Будут отображены все таблицы со связями, а также соответствующие линии связи. Обратите внимание на то, что скрытые таблицы (таблицы, для которых установлен флажок скрытый в диалоговом окне Свойства) и их отношения не отображаются, если в диалоговом окне Параметры переходов не выбран параметр «Показывать скрытые объекты».
Щелкните линию связи, которую требуется удалить. При выделении линия связи становится толще.
Нажмите клавишу DEL
При этом может появиться сообщение Подтвердите удаление выделенной связи из базы данных. В этом случае нажмите кнопку Да.
Примечание: Если одна из таблиц, участвующих в отношении, в данный момент используется (возможно, третьим лицом, процессом либо в открытом объекте базы данных, например в форме), удалить отношение между таблицами будет невозможно. Перед попыткой удаления отношения между таблицами закройте все открытые объекты, использующие эти таблицы.
Источник
Доступ к ОШИБКЕ: отношение должно быть в том же количестве полей с одинаковыми типами данных.
Обновлено 10.12.2019
Вопрос:
Еще одна замечательная ошибка от Access. На этот раз я получаю “Отношения должны быть на одинаковом числе полей с одинаковыми типами данных”. сообщение. Это похоже на такое простое исправление, но я совершенно смущен, почему это сообщение появилось в моем коде:
Код для первой таблицы, в которой я пытаюсь ссылаться:
CREATE TABLE ProgramSupervisor
( EmpNo CHAR (6) ,
ProgramSupervisorNo CHAR (6) ,
TeamNo CHAR (3) CONSTRAINT TeamNoRequired NOT NULL ,
CONSTRAINT PKProgramSupervisor PRIMARY KEY (EmpNo , ProgramSupervisorNo) ,
CONSTRAINT FKProgSupEmpNo FOREIGN KEY (EmpNo) REFERENCES Employee )
Код для второй таблицы, ссылающийся на первую таблицу:
CREATE TABLE ISL
( ISLNo CHAR (6) ,
ProgramSupervisorNo CHAR (6) ,
ISLName VARCHAR (30) CONSTRAINT ISLNameRequired NOT NULL,
ISLStreet VARCHAR (40) CONSTRAINT ISLStreetRequired NOT NULL ,
ISLCity VARCHAR (30) CONSTRAINT ISLCityRequired NOT NULL ,
ISLState CHAR (2) CONSTRAINT ISLStateRequired NOT NULL ,
ISLZip CHAR (5) CONSTRAINT ISLZipRequired NOT NULL,
CONSTRAINT PKISL PRIMARY KEY (ISLNo) ,
CONSTRAINT FKProgSupNo FOREIGN KEY (ProgramSupervisorNo) REFERENCES
ProgramSupervisor )
Я пытаюсь ссылаться на PK ProgramSupervisorNo как FK в моей таблице ISL. Тем не менее это дает мне вышеупомянутую ошибку, когда оба поля в каждой таблице имеют определение данных CHAR (6). Я не знаю, что делать, и любая помощь очень ценится.
Ответ №1
В этой строке:
CONSTRAINT FKProgSupNo FOREIGN KEY (ProgramSupervisorNo) REFERENCES
ProgramSupervisor )
вы не указали поле в таблице ProgramSupervisor, к которому вы хотите обратиться. Сообщение об ошибке вводит в заблуждение.