Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/48: Рейтинг темы: голосов - 48, средняя оценка - 4.96
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54

Delphi: DBGrid - вычисление полей

19.04.2011, 19:01. Показов 9446. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Это опять я... (ну или всё ещё?)
В общем, например, в таблице есть 4 поля. Первое ID, а чётвёртое поле является произведением 2 и 3 поля.

Как реализовать хотябы такую элементарщину?

Вот пишу такой вот код в Query1, но жалуется на SELECT почему-то:

Code
1
2
3
4
5
6
7
8
SELECT     
GLAV.'ID', 
GLAV.'Pole1', 
GLAV.'Pole2',
Pole1*Pole2 AS 'Result'
 
FROM  
'GLAV.DB' GLAV
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.04.2011, 19:01
Ответы с готовыми решениями:

В чем разница компонентов Delphi 7 DBGrid и Delphi 10.3 TDBGrid?
Смотрю урок по Delphi 7, там использовался компонент DBGrid, а у меня 10,3 версия и там вместо DBGrid стоит TDBGrid. Это что, обновленная...

Очистка полей в DBGrid
Столкнулся с проблемой по нажатию кнопки необходимо очистить от значений ячейки нескольких полей, но есть проблема эти поля связаны с...

Редактирование полей в DBGrid
Доброе время суток, мне нужно организовать редактирование полей DBGrid в ,как это можно реализовать? К DBGrid подключена БД Access . ...

31
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
19.04.2011, 19:21
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Это опять я... (ну или всё ещё?)
В общем, например, в таблице есть 4 поля. Первое ID, а чётвёртое поле является произведением 2 и 3 поля.

Как реализовать хотябы такую элементарщину?

Вот пишу такой вот код в Query1, но жалуется на SELECT почему-то:

Code
1
2
3
4
5
6
7
8
SELECT     
GLAV.'ID', 
GLAV.'Pole1', 
GLAV.'Pole2',
Pole1*Pole2 AS 'Result'
 
FROM  
'GLAV.DB' GLAV
если оба поля - числовые (а у меня из вашего примера они символьные[40]), то должно бы работать.
В SQL сервере скажем он попытался бы сам конвертировать. Парадокс не станет.
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
19.04.2011, 19:38  [ТС]
если оба поля - числовые (а у меня из вашего примера они символьные[40]), то должно бы работать.
В SQL сервере скажем он попытался бы сам конвертировать. Парадокс не станет.
Да, я все поля перевела специально в тип Integer. Но он бессовестно жалуется на FROM (извиняюсь, не селект)
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
19.04.2011, 19:57
Lacrimossa,
Но он бессовестно жалуется на FROM (извиняюсь, не селект)
А жалуется как, говорит "ой-ой" или "ах-ах"
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
19.04.2011, 20:01  [ТС]
А жалуется как, говорит "ой-ой" или "ах-ах"
Пишет пишет "Invalid use of keyword." а когда нажимаешь Next, то пишет "Token: FROM 'GLAV.DB'"
0
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
19.04.2011, 20:21
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Пишет пишет "Invalid use of keyword." а когда нажимаешь Next, то пишет "Token: FROM 'GLAV.DB'"
у Result кавычки надо убрать.
Вот такой запрос у меня отработал без проблем:

SQL
1
SELECT ID, Pole1, Pole2, Pole1*Pole2 AS RESULT FROM GLAV

Не по теме:

А вообще слово Result не самое удачное имя для запроса - слишком похоже на зарегистрированное слово, а может даже и быть оным...

1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
19.04.2011, 20:36  [ТС]
у Result кавычки надо убрать.
Вот такой запрос у меня отработал без проблем:
Спасибо. Теперь у меня запускается, но в поле Резулт - ничё не вычисляется =___=

Не по теме:
А вообще слово Result не самое удачное имя для запроса - слишком похоже на зарегистрированное слово, а может даже и быть оным...
Да? Не знала... Спасибо, учту на будущее... Какая же я всё таки тёмная... =__= Даже столбцы не могу по-человечески назвать...

Добавлено через 9 минут
Перезапустила исходник, пишет ошибку "Field 'Result' can not be modified"
0
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
19.04.2011, 20:41
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Спасибо. Теперь у меня запускается, но в поле Резулт - ничё не вычисляется =___=
Странно, но у меня все работает. По ссылке посмотрите:
http://www.tgralex.com/Temp/4-... 2%20PM.jpg
структуру, данные, текст SQL и результат - все на одном экране.

Добавлено через 1 минуту
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Добавлено через 9 минут
Перезапустила исходник, пишет ошибку "Field 'Result' can not be modified"
все верно, вычисляемое поле нельзя менять - можно только поля от которых значение зависит.
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
19.04.2011, 20:48  [ТС]
все верно, вычисляемое поле нельзя менять - можно только поля от которых значение зависит.
Тоесть?

Я всё сделала, как у вас на скринштоте.

Но что это за таблица: ANSWER.DB и откуда она взялась и как её сделать?
0
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
19.04.2011, 20:51
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Тоесть?

Я всё сделала, как у вас на скринштоте.

Но что это за таблица: ANSWER.DB и откуда она взялась и как её сделать?
ANSWER.DB - это таблица-результат выполнения SQL запроса в query (in Paradox)
Я имел ввиду, что вычисляемое поле в программе изменять будет нельзя, так как query возвращает это поле как read-only
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
19.04.2011, 20:54  [ТС]
Я имел ввиду, что вычисляемое поле в программе изменять будет нельзя, так как query возвращает это поле как read-only
Так я не поняла, что мне делать то теперь? =__=
0
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
19.04.2011, 21:08
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Так я не поняла, что мне делать то теперь? =__=
А в чем собственно проблема?
  • у вас не возвращался результат или Result был пустым. Решилось?
  • Или Result уже возвращает верное произведение, и теперь хочется чтоб это (вычисляемое) поле было редактируемым? - если да, то вопрос зачем?
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
19.04.2011, 21:13  [ТС]
Ээээ... В общем я наверное смутно представляю сам процесс...

У меня же в ДБ-гриде не отображается это... Как сделать, чтобы я вот например ввожу в Поле1 и Поле 2 цифры через ДБГрид, а в поле Резулт автоматически бы сразу вычислился и отобразился результат... Или так нельзя? Ну или может по нажатию кнопки "Вычислить" например выводился бы результат в таблицу Грида...? Что-то подобное возможно?
0
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
19.04.2011, 21:53
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Ээээ... В общем я наверное смутно представляю сам процесс...

У меня же в ДБ-гриде не отображается это... Как сделать, чтобы я вот например ввожу в Поле1 и Поле 2 цифры через ДБГрид, а в поле Резулт автоматически бы сразу вычислился и отобразился результат... Или так нельзя? Ну или может по нажатию кнопки "Вычислить" например выводился бы результат в таблицу Грида...? Что-то подобное возможно?
Мне кажется вам нужно вычисляемое поле в Делфи, а не в query.
Здесь я объяснял как это сделать:
подсчет суммы выбранной строки БД Аксесс 03 в Делфи 7
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
20.04.2011, 17:15  [ТС]
Мне кажется вам нужно вычисляемое поле в Делфи, а не в query.
Здесь я объяснял как это сделать:
подсчет суммы выбранной строки БД Аксесс 03 в Делфи 7
Наверное вы правы Спасибо, я посмотрю сейчас

Добавлено через 2 часа 52 минуты
new_in_net, благодарю за помощь - это как раз то, что нужно - сидела и по-всякому мучила пример свой простенький, всё оказывается весьма просто и прозаично, спасибо вам
В своей работе пока не делала ещё, но думаю, обойдётся без эксцессов Но такие если будут проблемы - то отпишусь =_=

Добавлено через 16 часов 26 минут
Хммм... А не подскажете, как делать автоматическое копирование части данных из одной таблицы в другую?
Вот например, у меня есть 2 таблицы: первая с входными данными (ID, Наименование предприятия, Адрес, Поле1, Поле2), где Поле1 и Поле2 - данные для расчёта (тип Integer).
Вторая таблица с выходными данными, должна содержать поля (ID, Наименование предприятия, Адрес, Итог1, Итог2), где Итог1 и Итог2 - поля, зачисляющиеся на основе входных данных первой таблицы.
Как делать поля с вычислениями - я разобралась.
Но как делать так, чтобы часть содержимого (в нашем случае поля Наименование предприятия и Адрес) брались автоматически из первой таблицы? Нужно наверное, чтобы это было как-то автоматически: т.е. при создании записи в 1-й таблице параллельно создавалась, изменялась и сохранялась запись во 2-й. Ка-то вот так. Такое возможно? И если да, то КАК?
1
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
20.04.2011, 17:49
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Хммм... А не подскажете, как делать автоматическое копирование части данных из одной таблицы в другую?
Вот например, у меня есть 2 таблицы: первая с входными данными (ID, Наименование предприятия, Адрес, Поле1, Поле2), где Поле1 и Поле2 - данные для расчёта (тип Integer).
Вторая таблица с выходными данными, должна содержать поля (ID, Наименование предприятия, Адрес, Итог1, Итог2), где Итог1 и Итог2 - поля, зачисляющиеся на основе входных данных первой таблицы.
Как делать поля с вычислениями - я разобралась.
Но как делать так, чтобы часть содержимого (в нашем случае поля Наименование предприятия и Адрес) брались автоматически из первой таблицы? Нужно наверное, чтобы это было как-то автоматически: т.е. при создании записи в 1-й таблице параллельно создавалась, изменялась и сохранялась запись во 2-й. Ка-то вот так. Такое возможно? И если да, то КАК?
То что вы спрашиваете делается с помощью тригеров в нормальных базах данных. В парадоксе этого нет, и вам придется в Делфи реагировать у детальной TTable/TQuery на событие: AfterPost, AfterDelete, в котором вам придется искать соответствующую итоговую запись в итоговой таблице (а если нет то добавить новую запись) и отражать изменение...
Либо, если это возможно, то лучше всегда перерасчитывать эту вашу таблицу с итогами. Сделать ее виртуальной, вычисляемой.
Может все же пришло время перейти на что-то более серьезнее чем парадокс?
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
20.04.2011, 17:56  [ТС]
Может все же пришло время перейти на что-то более серьезнее чем парадокс?
У меня пол диплома уже написано на парадоксе... И я ж ничего не знаю больше =_= Времени учить уже некогда, тут бы программу дописать... А ещё пояснительная записка и слайды... Времени вообще нет, увы =(

Мне остались по сути эти вот расчёты с сохранением в итоговую таблицу и экспорт этой таблицы потом в MS Excel. Ну и так, по мелочи, типа там поиск всякий, да оформление сделать поприличнее.

Но всё по порядку.

Либо, если это возможно, то лучше всегда перерасчитывать эту вашу таблицу с итогами. Сделать ее виртуальной, вычисляемой.
Можно и так. Думаю, подойдёт. Как мне оное реализовать?

Добавлено через 13 секунд
Может все же пришло время перейти на что-то более серьезнее чем парадокс?
У меня пол диплома уже написано на парадоксе... И я ж ничего не знаю больше =_= Времени учить уже некогда, тут бы программу дописать... А ещё пояснительная записка и слайды... Времени вообще нет, увы =(

Мне остались по сути эти вот расчёты с сохранением в итоговую таблицу и экспорт этой таблицы потом в MS Excel. Ну и так, по мелочи, типа там поиск всякий, да оформление сделать поприличнее.

Но всё по порядку.

Либо, если это возможно, то лучше всегда перерасчитывать эту вашу таблицу с итогами. Сделать ее виртуальной, вычисляемой.
Можно и так. Думаю, подойдёт. Как мне оное реализовать?
0
283 / 262 / 32
Регистрация: 11.11.2009
Сообщений: 605
20.04.2011, 19:00
Цитата Сообщение от Lacrimossa Посмотреть сообщение
Мне остались по сути эти вот расчёты с сохранением в итоговую таблицу и экспорт этой таблицы потом в MS Excel. Ну и так, по мелочи, типа там поиск всякий, да оформление сделать поприличнее.

Но всё по порядку.



Можно и так. Думаю, подойдёт. Как мне оное реализовать?
Попробуйте так:
SQL
1
2
3
4
SELECT ID, [Наименование предприятия], [Адрес],
  SUM(Pole1) AS Итог1, SUM(Pole2) AS Итог2
FROM MyDetailTable
GROUP BY ID, [Наименование предприятия], [Адрес]
1
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
20.04.2011, 20:08  [ТС]
new_in_net, спасибо вам

Но только вот теперь вычисляемые поля оно мне не отображает.
Я сделала 2 новые таблицы.
В Query2 прописала следующий текст:

Code
1
2
3
4
SELECT ID, Name, Adres,
  Sum(Pole1) AS Itog1, Sum(Pole2) AS Itog2
FROM GLAVN
GROUP BY ID, Name, Adres
И прописала события для вычислений:

Code
1
2
3
4
5
6
7
8
procedure TForm1.Query2CalcFields(DataSet: TDataSet);
begin
  Query2.FieldByName('Itog1').AsInteger :=
    Query1.FieldByName('Pole1').AsInteger * Query1.FieldByName('Pole2').AsInteger;
 
  Query2.FieldByName('Itog2').AsInteger :=
    Query1.FieldByName('Pole1').AsInteger + Query1.FieldByName('Pole2').AsInteger;
end;
Но он почему-то во второй таблице для ВСЕХ записей в полях Itog1 и Itog2 ставит вычисленные результаты первой записи... Т.е. не вычисляет их для каждой. Почему так происходит?

И да, вторая таблица обновляется только после перезапуска программы... Можно ли как-то сделать её обновление, скажем, хотя бы по нажатию кнопки?
0
3 / 3 / 0
Регистрация: 27.11.2010
Сообщений: 54
20.04.2011, 20:13  [ТС]
На всякий случай прикрепляю этот свой маленький пример - для удобства всё на английском.
И скринштот - чтобы было понятнее, о чём речь.
Миниатюры
Delphi: DBGrid - вычисление полей  
Вложения
Тип файла: rar Sample.rar (331.0 Кб, 120 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2011, 20:13
Помогаю со студенческими работами здесь

Изменение полей DBGrid
Всем привет! Такой вопрос: я в DBGrid помещаю таблицу, в которой в одном столбце находится численные значения и нужно, чтобы выводилось не...

Автозаполнение из полей DBGrid
Здравствуйте! Мне нужно автозаполнить данные из полей DBGrid'а в текст акта для последующей распечатки. Куда, как и как удобнее и легче...

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

DBGrid умножение полей
Отобразил в DBGrid таблицу, в таблице есть вычисляемое поле Стоимость, Цена_ед_товара * Количество = Стоимость. Глупый вопрос, но...

Защита полей в dbgrid
Всем доброе утро! Сначало описание! у меня в таблице(dbgrid) есть логическое поле "Дежурит" (true или false) и поле типа...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru