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

Sql + математика

01.04.2025, 12:13. Показов 2284. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет всем!
Подскажите, есть таблица, в ней поле "voltage" (заполнено) и "voltageRabochee" (пустое).
В поле "voltageRabochee" нужно вставить "среднее значение - voltage". Делаю так:
Delphi
1
2
3
4
5
sql.Text := 'UPDATE SKZ_Oscillogramm ' +
  'SET voltageRabochee = AVG(voltage) - voltage ' +
  'WHERE ukzNumber = :ukzN';
  Parameters.ParamByName('ukzN').Value := ukzNumber.Text;
  ExecSQL;
пишет "попытка выполнить запрос, который не включает указанное выражение 'AVG(voltage)/AVG(voltage)-Voltage' как часть статистической функции или группы.
Подскажите, в чем ошибка?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2025, 12:13
Ответы с готовыми решениями:

Математика в Delphi
Здравствуйте ! есть такая проблема: нужно создать программу которая решала бы уравнение на языке дэлфи. часть программы я написал, и...

Дискретная математика на Delphi
Уважаемые форумчане! Задали в институте написать программу, вот тема - "Программа создания правильных аргументов по заданному...

вычислительная математика EXCEL
здравствуйте))есть таблица Excel, теперь нужно записать решение в делфи, как это сделать, подскажите пжл...пример такой: интеграл от 2 до 1...

12
 Аватар для Beltar
830 / 444 / 39
Регистрация: 05.05.2022
Сообщений: 3,056
01.04.2025, 12:24
В том, что не ознакомился с правилами применения агрегатных функций.
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,406
Записей в блоге: 3
01.04.2025, 12:26
Цитата Сообщение от 301sem Посмотреть сообщение
в чем ошибка?
В использовании агрегатной функции внутри конструкции UPDATE .. SET. Это, если мне мой склероз не изменяет, только подзапросом делается. Хотя... Какая СУБД у Вас?
0
0 / 0 / 1
Регистрация: 21.01.2021
Сообщений: 224
01.04.2025, 12:32  [ТС]
Access
Delphi
1
2
3
sql.Text := 'UPDATE SKZ_Oscillogramm ' +
  'SET voltageRabochee = (SELECT AVG(voltage) FROM SKZ_Oscillogramm WHERE ukzNumber = :ukzN) - voltage ' +
  'WHERE ukzNumber = :ukzN';
Вот так еще пробовал, может извращение конечно. Пишет "В операции должен использоваться обновляемый запрос"
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,406
Записей в блоге: 3
01.04.2025, 12:47
2 параметра с одним именем? Это у людей могут встречаться полные тёзки, программа такой неоднозначности не потерпит.
Вы выполняли этот запрос в самой СУБД? Он отработал или такую же ошибку показал?

Добавлено через 2 минуты
Хотя зачем в таблице БД поле, которое вычисляется? Зачем его заполнять, обновлять, если его значение всегда можно получить при выборке?

Добавлено через 3 минуты
А вообще обсуждать SQL-запрос, не имея ни малейшего представления о структуре таблиц и не представляя конечного результата - то еще удовольствие.
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
01.04.2025, 13:31
Цитата Сообщение от 301sem Посмотреть сообщение
Вот так еще пробовал
это похоже на правду, только вопрос
а если вы добавите еще одну строку в эту таблицу с таким же ukzNumber
то рассчитанное значение во всех остальных испортится

именно поэтому как правильно написали выше, такие значения рассчитываются при запросе данных, а не хранятся
1
0 / 0 / 1
Регистрация: 21.01.2021
Сообщений: 224
01.04.2025, 13:53  [ТС]
вычисляю поле voltageRabochee чтобы потом в frxreport засунуть это поле

Добавлено через 1 минуту
Цитата Сообщение от D1973 Посмотреть сообщение
Вы выполняли этот запрос в самой СУБД? Он отработал или такую же ошибку показал?
просто вывел пустое поле voltageRabochee, даже просто запрос
SQL
1
UPDATE SKZ_Oscillogramm SET voltageRabochee = 1
Добавлено через 1 минуту
Цитата Сообщение от D1973 Посмотреть сообщение
А вообще обсуждать SQL-запрос, не имея ни малейшего представления о структуре таблиц и не представляя конечного результата - то еще удовольствие.
id счетчик
ukzNumber Короткий текст
voltage и voltageRabochee Числовой
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,406
Записей в блоге: 3
01.04.2025, 16:44
Лучший ответ Сообщение было отмечено 301sem как решение

Решение

Цитата Сообщение от 301sem Посмотреть сообщение
вычисляю поле voltageRabochee чтобы потом в frxreport засунуть это поле
SQL
1
SELECT Fld_1, Fld_2, AVG(Fld_3) AS QQQ FROM Your_Table
И вот теперь стройте свой отчет в frxreport на основании набора данных, полученных этим запросом.
Цитата Сообщение от 301sem Посмотреть сообщение
просто вывел пустое поле
то есть не отработал, получается... Ну так надо в самом Акцессе разбираться, что ему не нравится... У меня такой запрос прекрасно отработал обновив все записи в таблице.
1
0 / 0 / 1
Регистрация: 21.01.2021
Сообщений: 224
01.04.2025, 17:09  [ТС]
Обязательно попробую!
А здесь вот что не так?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
sql.Text := 'INSERT INTO UKZinfo (ukzNumber, VoltageAvg, VoltageMax, VoltageMin, CurrentAvg, ' +
      'CurrentMax, CurrentMin, PotentialAvg, PotentialMax, PotentialMin) ' +
      'SELECT ukzNumber, ' +
      'AVG(sutVoltage) AS VoltageAvg, ' +
      'MAX(sutVoltage) AS VoltageMax, ' +
      'MIN(sutVoltage) AS VoltageMin, ' +
      'AVG(sutCurrent) AS CurrentAvg, ' +
      'MAX(sutCurrent) AS CurrentMax, ' +
      'MIN(sutCurrent) AS CurrentMin, ' +
      'AVG(sutPotential) AS PotentialAvg, ' +
      'MAX(sutPotential) AS PotentialMax, ' +
      'MIN(sutPotential) AS PotentialMin ' +
      'FROM SKZ_sutochnye ' +
      'WHERE ukzNumber = :ukzN';
      Parameters.ParamByName('ukzN').Value := ukzNumber.Text;
    ExecSQL;
ругается именно если я в этот запрос добавляю ukzNumber в Insert into и в select. Без этого работает
0
Модератор
 Аватар для D1973
9921 / 6457 / 2457
Регистрация: 21.01.2014
Сообщений: 27,406
Записей в блоге: 3
01.04.2025, 18:21
Цитата Сообщение от 301sem Посмотреть сообщение
ругается именно если я в этот запрос добавляю ukzNumber в Insert into и в select.
Что говорит-то? На первый взгляд ничего криминального в запросе нет, если акцессовский диалект SQL-я понимает конструкцию INSERT INTO ... SELECT ...
0
 Аватар для krapotkin
6849 / 4676 / 1464
Регистрация: 14.04.2014
Сообщений: 20,670
Записей в блоге: 21
02.04.2025, 11:54
Цитата Сообщение от 301sem Посмотреть сообщение
ругается
децкий сат

оно не ругается, а показывает ошибочку, и текстик этой ошибочки обычно помогает решить проблемочку

поэтому взрослые дяди и тёти прикладывают текст ошибки и дают как можно больше контекста, чтобы другие могли разобраться
0
Эксперт Pascal/Delphi
 Аватар для droider
4888 / 2822 / 865
Регистрация: 04.10.2012
Сообщений: 10,264
29.07.2025, 12:59
Цитата Сообщение от 301sem Посмотреть сообщение
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
sql.Text := 'INSERT INTO UKZinfo (ukzNumber, VoltageAvg, VoltageMax, VoltageMin, CurrentAvg, ' +
 'CurrentMax, CurrentMin, PotentialAvg, PotentialMax, PotentialMin) ' +
 'SELECT ukzNumber, ' +
 'AVG(sutVoltage) AS VoltageAvg, ' +
 'MAX(sutVoltage) AS VoltageMax, ' +
 'MIN(sutVoltage) AS VoltageMin, ' +
 'AVG(sutCurrent) AS CurrentAvg, ' +
 'MAX(sutCurrent) AS CurrentMax, ' +
 'MIN(sutCurrent) AS CurrentMin, ' +
 'AVG(sutPotential) AS PotentialAvg, ' +
 'MAX(sutPotential) AS PotentialMax, ' +
 'MIN(sutPotential) AS PotentialMin ' +
 'FROM SKZ_sutochnye ' +...
301sem, заметка на будущее: многострочные запросы лучше записывать через sql.Add(). Не нужно их пихать в sql.Text.
0
 Аватар для Beltar
830 / 444 / 39
Регистрация: 05.05.2022
Сообщений: 3,056
29.07.2025, 15:00
На будущее я делаю вот так:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function OpenFDQuery(Q:TFDQuery; const SQL:String; Silent:Boolean=False):Boolean;
begin
try
Q.Close;
Q.SQL.Clear;
Q.SQL.Add(SQL);
Q.Open;
Result:=True;
except
Result:=False;
if not Silent then raise;
end;
 
end;
Просто кидаю собранную строку, одной командой и имею возможность как-то реагировать на ошибки, например, поставить Silent=True и вызывать в цикле, не боясь, что у меня начнут вылезать окна эксепшенов.

А в Delphi 12 появились многострочные строковые литералы. Это удобно:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TDM.OpenMachineParams(Filter: Integer);
var S:String;
begin
QMachineParams.Close;
S:='''
  Select MachineParameter.stdNr, MachineParameter.nameID, MachineParameter.descriptionID,
  T.text as Name, MachineParameter.refValue, MachineParameter.Min, MachineParameter.Max,
 T2.Text as MeasUnit, MachineParameter.tagID, Tag.TagName, T1.text as Description
From MachineParameter
Left Join Translation T on MachineParameter.nameID=T.textID
Left Join Translation T1 on MachineParameter.descriptionID=T1.textID
Left Join Translation T2 on MachineParameter.engUnitID=T2.textID
Left Join Tag on MachineParameter.tagID=Tag.tagID
Where (T.languageID=5) and (T1.languageID=5) and
  (T2.languageID=5) and (MachineParameter.hide=0)
''';
//Фильтр сюда
if Filter<>0 then
  S:=S+' and MachineParameter.mpID in '+
  '(Select mpID from MachineParameterClassMember Where parameterClassID='+
  Filter.ToString+') ';
S:=S+' Order BY MachineParameter.stdNr';
OpenFDQuery(QMachineParams,S);
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2025, 15:00
Помогаю со студенческими работами здесь

Вычислительная математика
Помогите решить задачку, есть готовая программа, нужно только подставить значения. Сам в делфи и паскале вообще 0! А завтра сдавать зачет....

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

дискретная математика
1)Задать множество А случайным образом из k элементов, каждый из элементов взять из диапазона (повторяющиеся элементы удалить). Задать...

Комплексная математика в Delphi 10.1 Berlin Update 2
На одном из этапов аналитического решения кубического уравнения необходимо вычислить выражение ...

Логическая математика
Добрый день. Я не до конца понимаю двоичную с/с, логическую математику, операторы or, xor и т.п. Вот хоть стреляйте, не врубаюсь... Итак,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru