Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 403

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!

Огромная просьба помочь в решении этих задач. Как по сути их реализовать, то есть отдельно для каждой задачи какие компоненты нужны как связать их. может есть у кого исходники, пожалуйста помогите,я вижу что в принципе нет ничего сложного, но время уже потеряно и я не успеваю самостоятельно их выполнить поэтому прошу помощи у вас Уважаемые Эксперты!

Задача1
1.Выяснить, для какой фамилии имеется наибольшее число однофамильцев.
эту задачу нужно выполнить навигационным способом(Table)

Задача2
2.Найти отдел предприятия, который получил наибольшую суммарную зарплату в прошлом году.
эту задачу нужно выполнить реляционным способом(Query).

общее условие для двух задач пожалуйста смотрите ниже

Приложение:
  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. Deti
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22. Zarpl
  23.  
  24.  
  25.  
  26.  
  27.  


ubyou Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: ubyou (статус: Посетитель)
Вопрос отправлен: 7 февраля 2009, 15:33
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 10; последнее сообщение — 12 февраля 2009, 10:36; участников в обсуждении: 3.
ubyou

ubyou (статус: Посетитель), 7 февраля 2009, 17:19 [#1]:

Я использую базу данных созданую в ACCES Kadrbase.mdb
компоненты TADOTable и для второй задачи TADOQueri. Подскажите каким компонентом поиска и какой код написать чтоб для первой найти наибольшее число однофамильцев а для второй Найти отдел предприятия, который получил наибольшую суммарную зарплату в прошлом году
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 7 февраля 2009, 21:46 [#2]:

какие компоненты использовать Вы уже написали в своем вопросе. Что такое навигационный способ - не сильно понятно, на SQL это делается в 2-3 строки. Если уточните, что подразумевается под навигационным способом, то получите исчерпывающий ответ. По второй части вопроса ответ отправлю завтра, если кто-нибудь не опередит :-)
ubyou

ubyou (статус: Посетитель), 8 февраля 2009, 00:00 [#3]:

Собственно говоря как я понял навигационный способ это с использованием компонента TTable, так как дано в лекции, цитирую:
"По методам доступа компоненты делятся на навигационные(Table) и реляционные(Query). Характеристикой навигационной модели является то, что у каждой записи есть свой номер, для реляционного досткпа это не характерно."

Но так как база ACCES то и компонент TADOTable для первой задачи, думаю правильно выбрал)))
ubyou

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

ubyou (статус: Посетитель), 8 февраля 2009, 16:27 [#6]:

можно добавить)
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 8 февраля 2009, 19:19 [#7]:

то есть структура таблиц окончательно еще не разработана? Напишите, что уже сделано по структурам таблиц (поля, типы данных). Для таблицы kadr рекомендую разделить поле fio на три: фамилия, имя, отчество. Создать индекс по этим полям.
ubyou

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);

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 марта 2023, 22:30
Выполнено за 0.03 сек.
Рейтинг@Mail.ru