Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/30: Рейтинг темы: голосов - 30, средняя оценка - 4.63
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175

Вопрос о RadioGroup

30.03.2010, 07:31. Показов 6707. Ответов 54
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему когда на форме onClose пишешь: Glavnoe.RadioGroup2.ItemIndex:=-1; выводится ошибка: Cannot change Visible in OnSow or OnHide?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2010, 07:31
Ответы с готовыми решениями:

вопрос по RadioGroup
Нужен совет по использованию RadioGroup. Есть форма, на которой RadioGroup и в нее помещены 8 кнопок RadioButton, мне нужно сделать так,...

Вопрос по RadioGroup и SaveDialog
Вообщем в радиогруп есть три итемса "1" "2" "3" когда я жму на кнопку должно выскакивать окно савдиалога и если выбран итемс "1"...

RadioGroup
Разработайте приложение из главной и одной немодальной подчиненной формы. На главной форме поместить компонент RadioGroup и задать в его...

54
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
07.04.2010, 07:28
Студворк — интернет-сервис помощи студентам
ADO поддерживает циклы?
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
07.04.2010, 09:14
Цитата Сообщение от AlenaIvanova Посмотреть сообщение
Mawrat, Цикл верно записан?
Это не цикл:
SQL
1
2
3
4
  CASE
    WHEN SumBall.SumBall >= ProhodnoyBall.Ball THEN TRUE
    ELSE FALSE
  END AS Zachislen
В SQL конструкция case - when - then - else - end это аналог if - then - else - end в Delphi.
Т. е., в Delphi:
Delphi
1
2
3
4
5
  if SumBall.SumBall >= ProhodnoyBall.Ball then begin
    Zachislen := true;
  end else begin
    Zachislen := false;
  end;
Соответствующая этому код конструкция в SQL:
SQL
1
2
3
4
5
6
7
8
9
SELECT
...
  CASE
    WHEN SumBall.SumBall >= ProhodnoyBall.Ball THEN
      TRUE
    ELSE
      FALSE
  END AS Zachislen
...
В подобных конструкцииях раздел else - только один. Разделов when может быть несколько. when в SQL подобен if или else if в Delphi.
Такая конструкция представляет собой в разделе select отдельное поле с именем Zachislen. Значение этого поля формируется согласно условию, заданному в конструкции case - end.
---
Разберём запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
SELECT
  Ab.CodFIOAbiturSvedeniya
  ,SumBall.SumBall
  ,Prb.Ball
  ,CASE
    WHEN SumBall.SumBall >= Prb.Ball THEN TRUE
    ELSE FALSE
  END AS Zachislen
FROM
  test_Abiturient Ab
  ,test_ProhodnoyBall Prb
  ,(
    SELECT
      Ab.CodFIOAbiturSvedeniya
      ,SUM(Oc.Ocenka) AS SumBall
    FROM
      test_Abiturient Ab
      ,test_Ocenki Oc
    WHERE
      Ab.CodFIOAbiturSvedeniya = Oc.CodAbitur
    GROUP BY
      Ab.CodFIOAbiturSvedeniya
  ) SumBall
WHERE
  Ab.CodSpecialnost = Prb.Spec
  AND Ab.CodFIOAbiturSvedeniya = SumBall.CodFIOAbiturSvedeniya
;
Начинаем разбор с вложенного подзапроса:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
  (
    SELECT
      Ab.CodFIOAbiturSvedeniya
      ,SUM(Oc.Ocenka) AS SumBall
    FROM
      test_Abiturient Ab
      ,test_Ocenki Oc
    WHERE
      Ab.CodFIOAbiturSvedeniya = Oc.CodAbitur
    GROUP BY
      Ab.CodFIOAbiturSvedeniya
  ) SumBall
Этот подзапрос делает следующее - берёт очередного абитуриента и вычисляет сумму балов, которую этот абитуриент набрал по всем предметам. Т. е. этот подзапрос возвращает набор данных такого вида:
SQL
1
2
3
Абитуриент_1       Сумма_балов_по_всем_предметам_1
Абитуриент_2       Сумма_балов_по_всем_предметам_2
Абитуриент_3       Сумма_балов_по_всем_предметам_3
Этот набор данных в вызвающем запросе имеет имя SumBall.
Теперь рассматриваем вызывающий запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
SELECT
  Ab.CodFIOAbiturSvedeniya
  ,SumBall.SumBall
  ,Prb.Ball
  ,CASE
    WHEN SumBall.SumBall >= Prb.Ball THEN TRUE
    ELSE FALSE
  END AS Zachislen
FROM
  test_Abiturient Ab
  ,test_ProhodnoyBall Prb
  ,SumBall
WHERE
  Ab.CodSpecialnost = Prb.Spec
  AND Ab.CodFIOAbiturSvedeniya = SumBall.CodFIOAbiturSvedeniya
;
Этот запрос возвращает набор данных вида:
SQL
1
2
3
Абитуриент_1   Сумма_балов_по_всем_предметам_1   Проходной_бал_на_данной_специальности   Прошёл/не прошёл
Абитуриент_2   Сумма_балов_по_всем_предметам_2   Проходной_бал_на_данной_специальности   Прошёл/не прошёл
Абитуриент_3   Сумма_балов_по_всем_предметам_3   Проходной_бал_на_данной_специальности   Прошёл/не прошёл
---
Здесь поле "Прошёл/не прошёл" содержит значения true/false - эти значения формируются той самой конструкцией case, которую мы выше рассматривали. Это поле выступает под именем Zachislen.
2
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
07.04.2010, 09:47  [ТС]
Я создала кнопку "Обработка", по нажатию на нее должен выполниться запрос на обновления таблицы. Так? Тогда я не понимаю почему запрос выдает синтаксическую ошибку. Запрос на выборку я не тестировала на своей программе. Я не поняла мне нужно создать дбгрид и связывать с этим запросом, чтобы в него выводилась информация прописанная в запросе? Или тестировать на дбгриде который связан с таблицей Svedeniya? У меня такая каша в голове
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
07.04.2010, 10:15
ДБгрид не обрабатывает данные. Он их только выводит.
Все работы с данными вам надо проводить в SQL-запросах
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
07.04.2010, 10:20
Цитата Сообщение от AlenaIvanova Посмотреть сообщение
...мне нужно создать дбгрид и связывать с этим запросом, чтобы в него выводилась информация прописанная в запросе? Или тестировать на дбгриде который связан с таблицей Svedeniya? У меня такая каша в голове
Материал с запросами - сложный. Поэтому не нужно расстраиваться, что что-то не получается.
В данном случае надо использовать TADOQuery.
Если надо увидеть данные, то в компонент TADOQuery надо поместить такой запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
SELECT
  Ab.CodFIOAbiturSvedeniya
  ,SumBall.SumBall
  ,Prb.Ball
  ,CASE
    WHEN SumBall.SumBall >= Prb.Ball THEN TRUE
    ELSE FALSE
  END AS Zachislen
FROM
  test_Abiturient Ab
  ,test_ProhodnoyBall Prb
  ,(
    SELECT
      Ab.CodFIOAbiturSvedeniya
      ,SUM(Oc.Ocenka) AS SumBall
    FROM
      test_Abiturient Ab
      ,test_Ocenki Oc
    WHERE
      Ab.CodFIOAbiturSvedeniya = Oc.CodAbitur
    GROUP BY
      Ab.CodFIOAbiturSvedeniya
  ) SumBall
WHERE
  Ab.CodSpecialnost = Prb.Spec
  AND Ab.CodFIOAbiturSvedeniya = SumBall.CodFIOAbiturSvedeniya
Этот запрос выполняется по команде:
TADOQuery.Active := True;
Соответственно, этот TADOQuery надо связать с элементом отображения данных - например, с TDBGrid.
---
Если надо обновлять данные в таблице Svedenia (обновить для каждого абитуриента поле Zachislen), то в TADOQuery следует поместить такой запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
UPDATE Svedeniya SET Zachislen =
(
SELECT
  CASE
    WHEN SumBall.SumBall >= ProhodnoyBall.Ball THEN TRUE
    ELSE FALSE
  END AS RESULT
FROM
  Abiturient
  ,ProhodnoyBall
  ,(
    SELECT
      Abiturient.CodFIOAbiturSvedeniya
      ,SUM(Ocenki.Ocenka) AS SumBall
    FROM
      Abiturient
      ,Ocenki
    WHERE
      Abiturient.CodFIOAbiturSvedeniya = Ocenki.CodAbitur
    GROUP BY
      Abiturient.CodFIOAbiturSvedeniya
 )  SumBall  
WHERE
  Abiturient.CodFIOAbiturSvedeniya = Svedeniya.FIOAbitur
  AND Abiturient.CodSpecialnost = ProhodnoyBall.Spec
  AND Abiturient.CodFIOAbiturSvedeniya = SumBall.CodFIOAbiturSvedeniya
)
Этот запрос выполняется по команде:
TADOQuery.ExecSql;
И данные этот запрос не возвращает. Поэтому этот запрос не должен быть связан с каким-либо элементом отображения данных - т. е. TDBGrid, например, не должен быть связан с ним.
---
Сами запросы надо отлаживать не в Delphi, а в какой-нибудь другой среде. Для Oracle - это TOAD, например - очень мощная среда. Для различных других БД, может быть использован SQL Explorer или другие специализированные среды для работы с БД. Хорошие средства есть от Quest Software - для Oracle, IBM DB2 и пр.
SQl Explorer поставляется вместе с Delphi и запускается так:
Пуск - Все программы - Borland Delhi7 - SQL Explorer.
Когда в SQL Explorer запрос заработает правильно, тогда переносим этот запрос в код Delphi проекта.
1
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 08:13  [ТС]
Хорошо сейчас попробую выполнить запрос на выборку.

Добавлено через 21 час 39 минут
Mawrat, Я так понимаю что надо что-то вроде этого писать
SQL
1
2
3
4
(  SELECT iff(SumBall.SumBall >= ProhodnoyBall.Ball, TRUE, FALSE)
FROM
  Abiturient
  ,ProhodnoyBall
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 08:37
Я вот читаю ваши посты и думаю - какую ж я ахинею городил то раньше... Так просто некоторые вещи прямо в SQL-запросе делаются.... А я по 3-4 последовательных запроса + куча кода....
0
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 08:52  [ТС]
Андрей Борисови, А вы знаете как написать запрос на обновления, о котором мы в последнее время ведем беседу?
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 08:58
без наличия базы - нет.. Я, обычно, формирую такие запросы сначала в Аксцессе и уже потом с нужными параметрами переношу в Дельфи.
0
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 09:01  [ТС]
Андрей Борисови, Давайте я вам аксессовсую базу скину
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 09:07
А давайте!
1
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 09:13  [ТС]
Спасибо за отзывчивость Вы условие знаете?
Вложения
Тип файла: 7z База.7z (24.0 Кб, 13 просмотров)
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 09:21
Напишите)) а то всю тему заново перечитывать лень
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
08.04.2010, 09:28
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
Я вот читаю ваши посты и думаю...
Так форум для того и создан, чтобы люди опытом обменивались.
Цитата Сообщение от Андрей Борисови Посмотреть сообщение
А давайте!
Андрей Борисович, может в самом деле посмотришь базу? Я в Access не работал.
Таблицы я посмотрел. Там немного архитектуру надо поменять - связь между всеми таблицами должна быть через поле первичного ключа - это поле во всех таблицах назыается Code. Кстати, надо ещё проверить оформлено ли это поле в таблицах как первичный ключ. В связи с этим избыточные данные надо удалить. - Например, ФИО абитуриентов должно присутствовать только в одной таблице - в Abiturient. Например, в таблице Svedenia надо удалить поле FIOAbitur и вместо него добавить: CodAbitur - которое будет содержать коды, соответствующие полю Code из таблицы Abiturient. Аналогично над действовать в отношении таблиц Specialnost, Predmet. Т. е. названия специальности и предметов - только в этих таблицах, в других - только связи по полям Specialnost.Code, Predmet.Code. И т. д. для всех таблиц.
---
Я вечером ещё подключусь к обсуждениям.
1
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 09:48  [ТС]
Андрей Борисови, Вот запрос:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
UPDATE Svedeniya SET Zachislen =
(
SELECT
  CASE
    WHEN SumBall.SumBall >= ProhodnoyBall.Ball THEN TRUE
    ELSE FALSE
  END AS RESULT
FROM
  Abiturient
  ,ProhodnoyBall
  ,(
    SELECT
      Abiturient.CodFIOAbiturSvedeniya
      ,SUM(Ocenki.Ocenka) AS SumBall
    FROM
      Abiturient
      ,Ocenki
    WHERE
      Abiturient.CodFIOAbiturSvedeniya = Ocenki.CodAbitur
    GROUP BY
      Abiturient.CodFIOAbiturSvedeniya
 )  SumBall  
WHERE
  Abiturient.CodFIOAbiturSvedeniya = Svedeniya.FIOAbitur
  AND Abiturient.CodSpecialnost = ProhodnoyBall.Spec
  AND Abiturient.CodFIOAbiturSvedeniya = SumBall.CodFIOAbiturSvedeniya
)
Мне нужно обновлять поле Zachislen таблицы Svedeniya, т.е. если SumBall.SumBall >= ProhodnoyBall.Ball то zachislen:=true
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 09:54
1.
Цитата Сообщение от Mawrat Посмотреть сообщение
Там немного архитектуру надо поменять
уже нельзя... Если что-то поменять - надо пол программы переписать (запросы - однозначно все слетят).
2. Аксцесс не поддерживает, походу, вложенные SELECTы... Это ведь эмулятор SQL, а не полноценный язык...
А что вы хотели - в Microsoft тоже работают лентяи))

Добавлено через 1 минуту
Цитата Сообщение от AlenaIvanova Посмотреть сообщение
Мне нужно обновлять поле Zachislen таблицы Svedeniya, т.е. если SumBall.SumBall >= ProhodnoyBall.Ball то zachislen:=true
Начнем с того, что сумма баллов у вас заносится?
1
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 09:59  [ТС]
В аксесовсую базу? Нет не заносится. Высчитывается запросом.
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 10:26
Тогда придется делать через 2 запроса и цикл.
Алгоритм:

Создаем запрос по незачисленным с выводом КОД человечка и его суммы баллов.
Цикл по количеству
запрос на специальность I-того человечка с выводом проходного балла.
сравнение - если у I-го человечка на сумма балов => проходного балла тогда запрос на обновление по КОД человечка ставим ТРУЕ в "Зачислен"
конец цикла
0
9 / 9 / 0
Регистрация: 24.02.2010
Сообщений: 175
08.04.2010, 10:44  [ТС]
Не понимаю, как это можно сделать
0
 Аватар для Андрей Борисови
714 / 402 / 33
Регистрация: 04.10.2009
Сообщений: 1,686
08.04.2010, 11:25
чуть позже поколдую..)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.04.2010, 11:25

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

RadioGroup
Доброе время суток!!! Подскажите, пожалуйста, такую вещь. Возможно ли изменение прямых углов в компоненте RadioGroup, а то в...

if radioGroup
Почему не компилит мой быдло код? if RadioGroup1.ItemIndex = 0 then memo1.Lines.add('1111') else memo1.lines.add('bugaga') else...

Radiogroup
Здравствуйте, имеется 2 radiogroup, в каждом по 2 строчки, как написать условие чтобы, при выборе первой строчки из radiogroup 1 и первой...

RadioGroup
Народ есть три кнопки и один RadioGroup. Как делать чтобы при нажатии на первую кнопку в RadioGroup было 1 ItemIndex ( 1варіант) , на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru