Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.11.2017, 18:17   #1
asees
 
Регистрация: 28.11.2017
Сообщений: 9
По умолчанию Delphi sql avg

Приветствую! В бд access лежит таблица с полем mark, по которому нужно посчитать среднее значение
Вот код:
ADOQuery1.Active := false;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select avg(Mark) as sr from Certificate');
ADOQuery1.Active := true;
Хотелось бы записать данное среднее значение в edit , не мог бы кто-нибудь подсказать, как? Ошибок вроде не выдает, но есть сомнения, что среднее значение вообще не считает...
Заранее спасибо, сильно не пинайте
asees вне форума Ответить с цитированием
Старый 28.11.2017, 21:25   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Edit1.Text := ADOQuery1.FieldByName('sr').AsString
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 30.11.2017, 09:30   #3
asees
 
Регистрация: 28.11.2017
Сообщений: 9
По умолчанию

Не работает... Нет у adoquery свойства fieldbyname
asees вне форума Ответить с цитированием
Старый 30.11.2017, 09:38   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Есть
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.11.2017, 10:59   #5
asees
 
Регистрация: 28.11.2017
Сообщений: 9
По умолчанию

Если присваивать значение из sr в переменную или edit ,то там Почему то нет fieldbyname
asees вне форума Ответить с цитированием
Старый 30.11.2017, 11:10   #6
asees
 
Регистрация: 28.11.2017
Сообщений: 9
По умолчанию

Вот полный код:
With Form1 do
Begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add ('Select avg (Mark) as sr from Certificate');
Edit1.Text := ADOQuery1.FieldByName ('sr').AsString;
ADOQuery1.ExecSQL;
End;

Где то косяк видимо
asees вне форума Ответить с цитированием
Старый 30.11.2017, 11:20   #7
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Полным кодом это трудно назвать. Конкретный пример:

Цитата:
Сообщение от asees Посмотреть сообщение
With Form1 do
Откуда происходит обращение к Form1? Если из её собственной функции - то тут этот with Form1 лишний. Если из другой формы - проверьте, доступна ли Form1? Подключена ли к этой форме?

А вообще - программа хотя бы запускается? Если нет - что говорит компилятор?

Правильно будет работать, если вместо ExecSQL (который вообще-то применяется для запуска команд - INSERT, DELETE, UPDATE - но никак не для селектов) использовать Open. И вызывать его нужно раньше, чем обращаетесь к полю:

Код:
With Form1 do
Begin
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add ('Select avg (Mark) as sr from Certificate');
  ADOQuery1.Open;
  Edit1.Text := ADOQuery1.FieldByName ('sr').AsString;
End;
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 30.11.2017 в 11:22.
Sciv вне форума Ответить с цитированием
Старый 30.11.2017, 12:03   #8
asees
 
Регистрация: 28.11.2017
Сообщений: 9
По умолчанию

Программа запускается, выдает ошибку is not a valid integer value , учел ваши поправки на счет open, но итог тот же. При выборе в adoquery1 fieldbyname его просто нет в открывающейся подсказке.
asees вне форума Ответить с цитированием
Старый 30.11.2017, 12:11   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от asees Посмотреть сообщение
Программа запускается, выдает ошибку is not a valid integer value
эта ошибка не имеет ничего общего к обсуждаемой здесь проблеме.
для того, чтобы в этом убедиться, закомментируйте строчку с
Цитата:
Код:
Edit1.Text := ADOQuery1.FieldByName ('sr').AsString;
и уже откройте для себя отладчик (поставьте точку останова, посмотрите, что там происходит, пройдитесь пошагово, найдите проблемную строчку с StrToInt() и т.д.).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.11.2017, 12:13   #10
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от asees Посмотреть сообщение
При выборе в adoquery1 fieldbyname его просто нет в открывающейся подсказке.
И не будет.
Для этого случая используйте вот это:
Код:
Edit1.Text:=ADOQuery1.Fields[0].AsString;
kropotkina-alice вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вирус в NodeJS, AVG 2014 vinniepooh Безопасность, Шифрование 7 24.07.2016 20:40
не работают avg,sum,min,max в delphi!!!!!!!!! Pilyla БД в Delphi 9 11.01.2015 20:07
AVG Среднее значение nastena_r_v БД в Delphi 4 16.11.2012 15:45
Вычисление AVG Karla7 Microsoft Office Excel 10 27.08.2011 00:58
Помогите пожалуйста удалить AVG. nataffka Помощь студентам 1 01.02.2009 08:44