Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Создание DBGrid'a из нескольких таблиц |
Автор: ParaNO1k 14.6.2009, 18:35 |
Доброго времени суток, Уважаемые Формучане! Использую базу Acceess 2003. Доступ через ADO. Проблему немогу решить уже долгое время, есть несколько связанных таблиц, рисунок БД прилагается. Необхомо в DBGrid'е вывести список всех учащихся (но желательно определенного класса (хотя это уже решил)) и поля для выбора даты (выбирается отдельно и заносится для всех учащихся), номера уроков (так же выбираются отдельно и заносятся для всей группы), предметов (аналогия с ранее сказанным) и оценок (необходимо сделать для всех учащихся отдельно). Суть проблемы в том, что не получается сделать весь список класса, с пустыми полями для оценок. Получалось либо повторение данных, либо только те учащиеся, которые уже есть в таблице "jurnal". Заранее Спасибо! |
Автор: Keeper89 14.6.2009, 18:51 |
Покажите формат вывода данных, т.е. в каком виде вы хотите видеть "весь список класса, с пустыми полями для оценок". |
Автор: ParaNO1k 14.6.2009, 19:01 |
Планировал выводить все в DBGrid'е или DBGridEh'е, выглядеть это должно вот так: Фамилия | Имя | Оценка | ---------------------------------------------- | Сидоров | Алексей | 3 | Иванив | Иван | | Любых | Настя | | и тд. По хорошему поле "Оценка" LookUp поле из таблицы. |
Автор: Romikgy 14.6.2009, 19:05 |
а оценка одна же на предмет или усредненая нужна? |
Автор: ParaNO1k 14.6.2009, 19:08 |
Оценка идет 1, на предмет, на урок и на конкретный день для учащегося. Это сдаланно для того чтобы после, можно было сделать распечатку отчета, в котором будут указываться промежутки дат, предметы и оценки за это время для класса. |
Автор: Romikgy 14.6.2009, 19:11 | ||
возможно что то типа такого
а вообще БД саму прикрепи ... |
Автор: ParaNO1k 14.6.2009, 19:19 | ||||
Идия то хорошая и мною разобранная вдоль и поперек, но... главная проблема, что мне необходимо выбирать учеников конкретного класса...:( Ученики ссылаются на класс при помощи поля id_node в таблице uch и если пытаться сортировать учащихся по классу, то остаются только те поля которые заполнены в таблице jurnal... В БД, в запросах можешь посмотреть кое какие попытки решить эту проблему... Отвечаю заранее на вопрос, почему имеется такой код
Это сделанно потому что в Delphi программно будет указываться номер класса, чтобы выбирались учащиеся этого класса, а не все учащиеся. |
Автор: Romikgy 14.6.2009, 19:34 |
еще раз , как хочется получить результат , можешь показать ? |
Автор: ParaNO1k 14.6.2009, 19:45 |
Я уже писал%) |Фамилия | Имя | Оценка | |----------------------------------------------| |Сидоров | Алексей | 3 | |Иванов | Иван | | |Любых | Настя | | |и тд. По хорошему поле "Оценка" LookUp поле из таблицы. Как ещё это изобразить на форуме я не знаю... З.Ы. Отображать нужно учащихся определенного класса, который будет выделен! Чтото пришла такая мысль: а что если выводить всех учащихся, но перед тем как они появятся, в гриде скрывать тех кто не относится в выбранному классу... Тогда пролбема получается как скрывать строки с ненужными учащимися ![]() |
Автор: Romikgy 14.6.2009, 19:50 |
тогда это к чему? |
Автор: ParaNO1k 14.6.2009, 19:54 |
Эм... такая система, в Delphi есть TreeView в котором отображается список класса, при выделении какого-либо класса, берется его ID. После выделении класса отображается DBGrid с таблицей, в которой должны отображатся список класса и выбор оценок для каждого учащегося. Отдельно имеются кнопки для выбора предмета, номера урока и даты. |
Автор: Romikgy 14.6.2009, 20:03 | ||||
так ? Добавлено через 2 минуты и 35 секунд или
and uch.id_node=2 это для выбора по классу |
Автор: ParaNO1k 14.6.2009, 20:28 |
Сорри, но не то :( Он все равно делает выборку из тех учащихся которые занесены в таблицу jurnal, а нужно чтобы он брал учащихся из класса, а потом уже заносил в эту таблицу, когда проставлены оценки. |
Автор: ParaNO1k 14.6.2009, 21:54 | ||
Эх... почему мозги у меня не так работают?! :( Ладно, поробую тогда так: в ДБГрид, надо сделать список класса, класс формируется по значению ид_ноде в таблице уч. Так же напротив каждого учащегося надо сделать выпадающий список с оценкой, которой он получил(ит). Может быть станет понятнее, если увидишь форму... На кнопки добавить день и урок, не обращая внимания, толку от них пока все равно ни какого... В зависимости от выбранного дня формируется подобная форма, на ней отображаются номера уроков, предмет который был выбран в соответствии с уроком, в ДИБГрид появляется список ВСЕХ учащихся ЭТОГО КЛАССА. Нужно чтобы ещё справа от списка учащихся появлялось ЛукАп поле с выбором оценки учащемуся, при нажатии кнопки сохранить, данные сохранялись в таблицу jurnal. Пока для вывода списка использую:
|
Автор: ParaNO1k 15.6.2009, 15:01 | ||||
Часть проблемы решена, для того чтобы отображать данные из таблицы jurnal использую код предложенный Romikgy
Только с той поправкой, что была изменена база: были удалены связи таблицы jurnal с таблицами predmet и ocenka. Используя следующий код добавляю всем учащимся класса, дату и номер урока:
Где за место вопросиков будет ставится предмет, но в виде текстового поля, так как он будет указываться во время создания урока в какую то дату. А оценка будет добавлятся позже отдельно, так же как текст (убрал связи). Теперься такая проблема, как сделать выпадающий список оценок, чтобы заносились не ID поля, а его текстовку, потому что связи пришлось убрать... |
Автор: Romikgy 15.6.2009, 16:17 |
ParaNO1k, у тя много оценок будет ? имхо проще выбросить эту табл и писать цифры напрямую, по просьбе, кидай комбобокс , и заполняй его из БД текст как текстовые оценки , объекты как ид текстовой оценки (юзая AddObject) |
Автор: ParaNO1k 15.6.2009, 16:27 |
Оцени 1..5 + Н, того 6, я бы с удовольствием, всё выкинул, но нельзя... ещё немного осталось ![]() Попробую, а можно в DBGrid или DBGridEh как нить реализовать LookUp поле из уже готовых значений (программно забить эти оценки), чтобы они не брались из БД, тем самым облегчить себе работу и лишний раз не юзать БД? |
Автор: Romikgy 15.6.2009, 16:31 |
низнаю насчет этого , я вообще пытался не юзать компоненты из db кучи |
Автор: ParaNO1k 15.6.2009, 16:35 |
Хорошо, поробую, как сделаю/не сделаю отпишусь! ![]() |
Автор: flomaster 16.6.2009, 02:08 | ||||
Вы хотите сделать Пустую страницу (шаблон) Журнала, наподобие как в Екселе? Чтобы учитель, открыв Вашу таблицу проставлял оценки? Либо надо добавлять каждый день на каждого ученика по каждому предмету пустую запись, и ее редактировать в гриде, либо иметь гемор с редактированием через ДБГрид несуществующих еще записей.
Дальше как обычно делаем датасет, открываем редактируем... Только указывайте соответствующие условия (ParamClass и ParamPredmet)
Рекомендую изменить название поля Date, т.к. будут неудобства в дальнейшем. Полям jurnal.predmet и predmet.id дать одно название напр, в [PredmetId] и т.д. К слову, использование одинаковых названий для полей и таблиц ведет к путанице в голове. Удобно для таблиц как название использовать существительное множественного числа, для поля - единственного числа. Применение таблицы "Оценка" - вообще бессмысленно, если Вы планируете там указывать цифровые обозначения оценок. Для использования поля подстановки его нужно создать дизайнером в ДатаСете. В гриде оно появится автоматом. |
Автор: ParaNO1k 16.6.2009, 06:46 |
Спасибо за предложенную идею, но данную часть задачи я уже решил, почти аналогичным способом, написанную ранее (или выше, в начале страницы)). Сейчас у меня проблема с созданием отчета для вывода на печать... Необходимо выводить в ДБГрид(Ех) (или ещё куданить откуда можно распечатать без особых проблем), следующие очеты: 1) список учащихся, а так же предметы и уроки с оценками за определенный промежуток времени; (наверное придется отказаться, слишком тяжело на вывод и не удобно в печати из-за возможного большого кол-ва данных) 2) список учащихся и оценки по конкретному предмету за промежуток времени; 3) для каждого учащегося отдельный отчет, в котором за промежуток времени указываются предметы и оценки. (самый распространеный отчет, который будет чаще всего использоваться) В книге Excel на каждой странице я отобразил примерно как это должно выглядеть. лист 1: ParamPredmet - отображает название предмета и в это поле заносятся все оценки по этому предмету за промежуток времени; лист 2: Data1 - зачем я её поставил не понял, поэтому можно отказаться и просто выводить оценки сплошником; лист 3: ничего особенного не заметил. З.Ы. Все что выделенно синим, в это место необходимо вставлять оценки ![]() |
Автор: flomaster 16.6.2009, 22:53 |
При изменении региональных настроек полезут грабли. Изучайте запросы с параметрами. Dataset.Parameters Только это избавит вас от головняка с передачей дат в запрос. |
Автор: ParaNO1k 17.6.2009, 06:21 |
Эм... проблем с датами нет и возникнуть не должно... лист 2: Data1 просто указывает дату когда была проставленна оценка... Сейчас парю мозг над тем как скинуть данные в Excel, если есть хорошие ссылки по этой информации поделитесь плиз... Заранее спасибо! |
Автор: flomaster 17.6.2009, 12:16 |
http://www.delphikingdom.com/asp/search.asp Есть статья про Excel и БД. Называется "Excel ЧаВо..." в пяти частях. Найдется по "Excel ADO" Не надейся. Работа с датами через параметры - единственный ГАРАНТИРОВАНО надежный способ. |
Автор: ParaNO1k 17.6.2009, 12:22 | ||
Спасибо) попробую) |