| 
| 
 | Вопрос # 2 403/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!
 Огромная просьба помочь в решении этих задач. Как по сути их реализовать, то есть отдельно для каждой задачи какие компоненты нужны как связать их. может есть у кого исходники, пожалуйста помогите,я вижу что в принципе нет ничего сложного, но время уже потеряно и я не успеваю самостоятельно их выполнить поэтому прошу помощи у вас Уважаемые Эксперты!
 
 Задача1
 1.Выяснить, для какой фамилии имеется наибольшее число однофамильцев.
 эту задачу нужно выполнить навигационным способом(Table)
 
 Задача2
 2.Найти отдел предприятия, который получил наибольшую суммарную зарплату в прошлом году.
 эту задачу нужно выполнить реляционным способом(Query).
 
 общее условие для двух задач пожалуйста смотрите ниже
 
|  |   Вопрос задал: ubyou (статус: Посетитель)Вопрос отправлен: 7 февраля 2009, 15:33
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 10; последнее сообщение — 12 февраля 2009, 10:36; участников в обсуждении: 3. 
|   | ubyou (статус: Посетитель), 7 февраля 2009, 17:19 [#1]:Я использую базу данных  созданую в ACCES  Kadrbase.mdb компоненты TADOTable и для второй задачи TADOQueri. Подскажите каким компонентом поиска и какой код написать чтоб для первой найти наибольшее число однофамильцев а для второй Найти отдел предприятия, который получил наибольшую суммарную зарплату в прошлом году
 |  
|   | Мережников Андрей (статус: Абитуриент), 7 февраля 2009, 21:46 [#2]:какие компоненты использовать Вы уже написали в своем вопросе. Что такое навигационный способ - не сильно понятно, на SQL  это делается в 2-3 строки. Если уточните, что подразумевается под навигационным способом, то получите исчерпывающий ответ. По второй части вопроса ответ отправлю завтра, если кто-нибудь не опередит   |  
|   | ubyou (статус: Посетитель), 8 февраля 2009, 00:00 [#3]:Собственно говоря как я понял навигационный способ это с использованием компонента TTable,  так как дано в лекции, цитирую: "По методам доступа компоненты  делятся на навигационные(Table) и реляционные(Query). Характеристикой навигационной модели является то, что  у каждой записи есть свой номер, для реляционного досткпа это не характерно."
 
 Но так как база ACCES то и компонент  TADOTable для первой задачи, думаю правильно выбрал)))
 |  
|   | ubyou (статус: Посетитель), 8 февраля 2009, 00:07 [#4]:Вот ещё из лекции: Работа  с базами данных  с использованием  компонента Table
 Для работы с БД необходимо поместить на форму два не визуальных компонента: TDataSource(страница Data Access - Delphi7)  и  TTable(страница BDE -Delphi7 ). Также очень часто используют визуальный компонент DBGrid(для отображения полей таблицы ) и визуальный компонент DBNavigator для перемещения по таблице(страница Data Access). Для того чтобы получить простейшее приложение с таблицей выполним эти действия – поместим указанные компоненты на форму. Затем определим свойства с помощью инспектора объектов в следующем порядке:
 1)	DataSource1.DataSet:=Table1(щелкнуть мышью по пустому полю DataSet, будет предложен список компонентов Table формы)
 2)	DBGrid1.DataSource:= DataSource1
 3)	DBNavigator1.DataSource:= DataSource1
 4)	Table1.DataBaseName:=history(выбрать  из списка алиасов)
 5)	Table1.TableName=baza.db(выбрать псевдоним из списка, у Вас может быть свой псевдоним!)
 6)	Table1.Active=true (выбрать  из списка)
 Если все сделано верно то будут видны данные(поля и записи)
 Здесь на первом месте стоит название компонента(свойство Name), на втором название свойства. Визуальные компоненты DBGrid, DBNavigator соединяются с  таблицей черезTable с помощью DataSource
 
 По сути  как бы ясно, но вопрос как поиск организовать по заданным задачам ???
 рассчитываю на вашу помощь.
 |  
|   | Мережников Андрей (статус: Абитуриент), 8 февраля 2009, 16:02 [#5]:Для решения не хватает еще одной таблицы (или поля в первой таблице) - с информацией о том, в каком отделе работает сотрудник |  
|   | ubyou (статус: Посетитель), 8 февраля 2009, 16:27 [#6]:можно добавить) |  
|   | Мережников Андрей (статус: Абитуриент), 8 февраля 2009, 19:19 [#7]:то есть структура таблиц окончательно еще не разработана? Напишите, что уже сделано по структурам таблиц (поля, типы данных). Для таблицы kadr рекомендую разделить поле fio на три: фамилия, имя, отчество. Создать индекс по этим полям. |  
|   | ubyou (статус: Посетитель), 8 февраля 2009, 19:41 [#8]:Все разработано |  
|   | Мережников Андрей (статус: Абитуриент), 8 февраля 2009, 19:50 [#9]:тогда напишите полностью структуру таблиц, можете написать в личные сообщения, потом пришлю ответ. Принцип решения уже есть, не хватает конкретики с Вашей стороны |  
|   | Тов. Женька (статус: 3-ий класс), 12 февраля 2009, 10:36 [#10]:Задача номер 1. Мда. Раз навигационный способ, то получается подсчет перебором, как с массивом.
 Но вот по поводу однофамильцев не очень ясно. Требуется строгое соответствие или просто совпадение, т.е:
 а. Отдельно варианты "Иванов", отдельно "Иванова" и т.д.
 б. Иванов, Иванова, Ивановский, Ивановская, Иванов-Петров, Петров-Иванов и прочие производные, где встречается Иванов.
 
 Задача номер 2.
 Нет таблицы отделов, но это не принципиально, ведь важен сам алгоритм расчета.
 В общем случае запрос может быть такой (сочинил его на своей рабочей базе, поэтому такой длинный путь до бабок: подразделения ->Сотрудники->Должности-Оклады), но можно легко адаптировать:
 
 /*Удаляем временную таблицу, если есть, она потребуется позже*/
 drop table if exists temp;
 
 /*Выбираем подразделения и суммы по каждому подразделению*/
 /*результат пишем во временную таблицу*/
 SELECT
 Podrazd.NAME,
 SUM(PKGKU.Oklad) as Summa
 into temp
 FROM
 Podrazd
 INNER JOIN Sotr ON (Podrazd.ID = Sotr.Podr_ID)
 INNER JOIN Dolzhn ON (Sotr.Dolzhn_ID = Dolzhn.ID)
 INNER JOIN PKGKU ON (Dolzhn.PKGKU_ID = PKGKU.ID)
 GROUP BY
 Podrazd.NAME;
 
 /*ну и собственно выбор подразделения с максимальной ЗП*/
 select name from temp where summa in (select max(summa) from temp);
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |