Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [MS Access] вопрос по запросам


Автор: 4YBAK 26.10.2011, 20:05
Есть таблица работники.
Там поля: ФИО Должность
Например там такая строка есть:
чувак инженер

И еще таблица Оклады
В ней поля Должность Оклад
К примеру, строки в ней такие:
Сантехник 20000
Слесарь 25000
Токарь 22000
инженер 30000

какой запрос надо сделать, чтоб отобразить у каждой записи из таблицы работники соответствующей должности оклад?
разжуйте плиз все подробно, куда надо нажать в аксессе 07, штоб было щастье. (увы, функции "получить щастье" в данной программе нет :()



Автор: Akina 26.10.2011, 20:09
Для домашних заданий, курсовых и вопросов типа "Сделайте за меня" существует раздел "Центр Помощи".

Тема перенесена.

Автор: 4YBAK 27.10.2011, 10:24
Цитата(Akina @ 26.10.2011,  20:09)
Для домашних заданий, курсовых и вопросов типа "Сделайте за меня" существует раздел "Центр Помощи".

Тема перенесена.

это не курсовик.
это попытка понять хоть што-то в БД.
че, никто не подскажет?

Автор: Woodlin 27.10.2011, 10:40
4YBAK, я бы сделал так:
в таблице Оклады создал поле, к примеру КодОклады, тип данных счетчик, сделал его индексированным (индексированное поле - Да (Совпадения не допускаются)). Забегая вперёд, как я думаю, одной должности и окладу может соответствовать несколько работников.

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

В схеме данных отображаем эти две таблицы, создаёшь между ними связь, связь должна быть один ко многим.

Потом создаёшь запрос. В конструкторе запроса отображаешь эти две таблицы, между ними уже должна быть связь. Закидываешь в поля запроса поля таблиц, которые тебе нужны... и вот оно щастье.

Автор: 4YBAK 6.11.2011, 01:13
Цитата(Woodlin @ 27.10.2011,  10:40)
4YBAK, я бы сделал так:
в таблице Оклады создал поле, к примеру КодОклады, тип данных счетчик, сделал его индексированным (индексированное поле - Да (Совпадения не допускаются)). Забегая вперёд, как я думаю, одной должности и окладу может соответствовать несколько работников.

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

В схеме данных отображаем эти две таблицы, создаёшь между ними связь, связь должна быть один ко многим.

Потом создаёшь запрос. В конструкторе запроса отображаешь эти две таблицы, между ними уже должна быть связь. Закидываешь в поля запроса поля таблиц, которые тебе нужны... и вот оно щастье.

ничего не понял по поводу связей... для чего они нужны?
у меня методом научного тыка в конструкторе получился такой запрос:

SELECT рабы.*, оклады.оклад
FROM рабы, оклады
WHERE ((([рабы]![профа])=[оклады]![должность]))
ORDER BY рабы.Код;

все работает.
на схеме данных поле должность из таблицы оклады связано с полем профа из таблицы рабы. причем если посмотреть свойства этой связи, то у нее тип отношения "не определено". Что это значит?


Автор: Woodlin 6.11.2011, 13:16
Цитата(4YBAK @  6.11.2011,  04:13 Найти цитируемый пост)
на схеме данных поле должность из таблицы оклады связано с полем профа из таблицы рабы. причем если посмотреть свойства этой связи, то у нее тип отношения "не определено". Что это значит?

Скорее всего одно из связанных полей, или оба не индексированы.

Цитата(4YBAK @  6.11.2011,  04:13 Найти цитируемый пост)
у меня методом научного тыка в конструкторе получился такой запрос:

SELECT рабы.*, оклады.оклад
FROM рабы, оклады
WHERE ((([рабы]![профа])=[оклады]![должность]))
ORDER BY рабы.Код;

все работает.

Вы просто руками прописали условие отбора записей ( WHERE ((([рабы]![профа])=[оклады]![должность])) ) поэтому и работает как надо. А если бы были установлены связи таблиц, то запрос бы отбирал записи автоматом, кстати можно устанавливать связи в запросе (в схеме данных не отобразится, действует только для текущего запроса).
А вообще я в двух словах не смогу написать для чего нужно устанавливать связи между таблицами, лучше почитайте.

Автор: 4YBAK 6.11.2011, 13:51
Цитата(Woodlin @  6.11.2011,  13:16 Найти цитируемый пост)
А если бы были установлены связи таблиц, то запрос бы отбирал записи автоматом


Цитата(Woodlin @  6.11.2011,  13:16 Найти цитируемый пост)
А вообще я в двух словах не смогу написать для чего нужно устанавливать связи между таблицами, лучше почитайте.

подскажите пж-та толковую статейку по данной теме

Автор: Woodlin 7.11.2011, 08:17
Цитата(4YBAK @  6.11.2011,  16:51 Найти цитируемый пост)
подскажите пж-та толковую статейку по данной теме

Я книгу покупал, а вообще воспользуйтесь поисковиком, забейте "Связи таблиц в Access" и читайте.

Автор: 4YBAK 7.11.2011, 18:51
Цитата(Woodlin @ 7.11.2011,  08:17)
Цитата(4YBAK @  6.11.2011,  16:51 Найти цитируемый пост)
подскажите пж-та толковую статейку по данной теме

Я книгу покупал, а вообще воспользуйтесь поисковиком, забейте "Связи таблиц в Access" и читайте.

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

Автор: Woodlin 8.11.2011, 05:27
Цитата(4YBAK @  7.11.2011,  21:51 Найти цитируемый пост)
назовите книгу и афтора

http://www.it-bookshop.ru/catalog/bazy-dannykh/access-2002-bibliya-polzovatelya-cd-rom-kerri-n-prag-maikl-r-irvin-1216-str
моя первая книжка, покупал в магазине, в комплект входит диск с примером базы данных и другими полезностями.

Автор: 4YBAK 9.11.2011, 19:29
спасибо! книгу обязательно прочту.

друзья, помогите пожалуйста.
запрос-то работает. но вот конкретная задача не выполняется.
выкладываю БД. Убрал из нее все связи и все ключевые поля.
Большая просьба, проставьте их. И выложите сюда ваш вариант базы.
Нужно чтоб на форме для каждого работника в зависимости от должности проставлялся оклад из таблицы оклады.
Для вас пять минут, для меня хоть какое-то понимание баз. Гуглил очень много, помогите плиз.

Автор: Woodlin 10.11.2011, 07:17
4YBAK, у меня Access 2003, Ваш пример открыть не могу.
Прилагаю свой
смотрите запрос1

Автор: 4YBAK 10.11.2011, 16:03
Woodlin, спасибо!

На базе вашей работы я наконец сделал то, что мне нужно.
Удалось сделать форму на базе запроса.
Посмотреть можно в прикрепленном файле, может кому пригодится.
В файле 2 версии: для access 2007 и для более ранних.

Добавлено через 14 минут и 9 секунд
По сути все просто. Обычная экселевская функция ВПР. 
С ее помощью и еще нескольких, я в экселе творю чудеса (увы, чудеса пока для дяди)
А в акСексе приходица долго трахаца, штоб сделать то, что в экселе делается за 1 минуту.
Может, есть какая-то программа, которая анализирует функции экселя и на их основе создает базу со связями в акСексе?
Я акСекс начал изучать только потому, что во фрилансе полно проектов на эту тему...

Автор: 4YBAK 10.11.2011, 16:25
и такой вопрос:
можно ли обнулить щечик записей?
у меня в таблице почему-то он начался с цифры 2. а надо чтоб с цифры 1

Автор: Woodlin 10.11.2011, 20:01
Цитата(4YBAK @  10.11.2011,  19:25 Найти цитируемый пост)
можно ли обнулить щечик записей?

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

По поводу обнуления счетчика, это можно делать когда таблица ни коим образом не участвует в связях с другими таблицами, и проще всего это сделать удалив (в режиме конструктора таблицы) поле Счетчик, а потом его снова добавить. Иначе произойдёт путаница, небольшой пример; в таблице Оклады (Счетчик=3 - к примеру сантехник, Счетчик=4 - инженер) удалили запись у которой Счетчик=3 (типа должность сантехник сократили), получается нарушен порядок нумерации (после 2 сразу идет 4). Если каким либо способом порядок следования значений Счетчика восстанавливаем (Счетчик = 1, 2, 3) то получаем должность у которой Счетчик был = 4 становится 3, и при построении запроса с таблицами Работники и Оклады мы получим работников - сантехников, которых запрос показал как инженеров.

Автор: 4YBAK 11.11.2011, 14:35
Woodlin, спасибо!
подскажите еще такой вопросец:
есть база с инфой о людях (фио, телефон, и т.д.)
надо к ней добавить фотки людей.
Я создал поле типа "вложение" - новинка аксекса 2007 и фотки туда - все ништяк.
Но база получается большаватая по размеру.
Слышал, как-то можно хранить фото не в базе, а на компе, а в базе хранить лишь ссылку на фото.
1) какое поле нужно для хранения ссылки на рисунок, текстовое или гиперссылка?
2) кинул на форму обьект Рисунок. Что нужно нажать, чтобы для каждого человека загружалась его фотка, считывая ссылку из пункта1?
3) кинул кнопку на форму. что написать в обработчике клика на кнопку, чтобы открывалось окно для загрузки новой фотки и чтоб путь загруженной фотки записывался в поле из пункта1

меня уже посылали в Борей. Ну честно, не могу понять как оно там работает
Помогите пожалуйста! Может набросаете простейший примерчик из пары полей и рисунка?

Автор: 4YBAK 11.11.2011, 15:05
del

Автор: 4YBAK 17.11.2011, 01:45
а как умеьншить размер формы, созданной в мастере форм?
там за край не зацепить, она на весь экран. и свойство ширина не редактируется

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)