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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2013, 20:42   #1
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию ado запросы

давно не писал
потому заранее прошу прошение за глупые вопросы )
и так к сути
есть база на MS ACCESS
там пару таблиц и запросов
есть прожка на delphi 7 (да вот такой я древний )
в прожке есть ADO запрос он там нужен потому что динамический (выводит данные с 2 согласуюшихся таблиц соответствующие определенным параметрам)
так вот
нужно сделать итоговое суммирование по определенным полям
пытался использовать SUM ругается - МОЛ НЕ МОГУ ТАКА КАК НЕ ВСЕ ПОЛЯ ПОДХОДЯТ
создал 2 рапрос - которвй только сумму и выводит
да его сделать динамичным
то есть я изменяю тело запроса в теле проги
так вот как что бы он сумму выводил только по тому запросу который щас на экране

вот так все сложно ) помогите
munhauz вне форума Ответить с цитированием
Старый 06.01.2013, 21:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
по тому запросу который щас на экране
На чьем экране?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2013, 21:37   #3
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

Код:
procedure sql_order;
begin
databegin:=form1.DateTimePicker1.Date;
dataend:=form1.DateTimePicker2.Date;
dm.ADOQ_order.Active:=false;
with dm.ADOQ_order do
  begin
    Close;
    sql.Clear;
    sql.Add('SELECT orders.*, client_fiz.*, [orders.summa]*[proc]/100 AS cena_proc, [in_money]-[orders.summa]-([orders.summa]*[proc]/100) AS ostatok, [coast]-([coast]*20/100)-[in_money] AS dobor, [coast]*20/100 AS proc_coast, orders.data');
    sql.Add('FROM client_fiz INNER JOIN orders ON client_fiz.id = orders.id_client');
    {Âûâîä íà ïåðèîä âðåìåíè}
    if form1.RadioButton2.Checked=true then
      begin
        sql.Add('WHERE (((orders.data) >= #'+SQL_Date_String(databegin)+'#))');
        sql.Add('AND (((orders.data) < #'+SQL_Date_String(dataend)+'#));');
      end
    else
      begin
        sql.Add(';')
      end;


    Open;
  end;
dm.ADOQ_order.Active:=true;
end;
нужна сумма по 5 полям в том чмсле и по вычисляемым



________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.01.2013 в 02:10.
munhauz вне форума Ответить с цитированием
Старый 10.01.2013, 00:33   #4
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

народ, ну помогите же!
админы исправлюсь и учту
munhauz вне форума Ответить с цитированием
Старый 10.01.2013, 01:29   #5
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

а если сделать что-то вроде:
Код:
SELECT SUM(ostatok), <и т.д.> 
FROM SELECT orders.*, client_fiz.*, [orders.summa]*[proc]/100 AS cena_proc, [in_money]-[orders.summa]-([orders.summa]*[proc]/100) AS ostatok, [coast]-([coast]*20/100)-[in_money] AS dobor, [coast]*20/100 AS proc_coast, orders.data
FROM client_fiz INNER JOIN orders ON client_fiz.id = orders.id_client
а вообще было бы неплохо уточнить:
1. какая СУБД
2. какие компоненты
3. куда нужно вывести эту сумму
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 10.01.2013, 08:33   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Yurk@
а вообще было бы неплохо уточнить:
1. какая СУБД
2. какие компоненты
3. куда нужно вывести эту сумму
1.
Цитата:
есть база на MS ACCESS
2.
Цитата:
есть прожка на delphi 7 (да вот такой я древний )
в прожке есть ADO запрос
т.е. 99.9% что речь идёт о TADOQuery

3.
вот это хороший вопрос!


munhauz,
а ещё я бы посмотрел в такую сторону: насколько я вижу, запрос в программе всегда имеет один и тот же набор полей (ведь поля в Orders и client_fiz не изменяются!). Вот для них сумму и находите, я бы по просто сделал select sum(), sum()... from ( select ... from )

p.s. ещё пара вариантов решения проблемы:
a) можно воспользоваться компонентами Гридов, которые поддерживают футеры с вычислениями (например, EhLib)
b) пройтись на клиенте (в прожке на Delphi) в цикле по записям, найти сумму полей.

p.p.s. вопрос, куда выводить все эти суммы всё равно остаётся...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2013, 11:24   #7
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Serge, согласен, не дочитал.
Цитата:
можно воспользоваться компонентами Гридов, которые поддерживают футеры с вычислениями (например, EhLib)
вот как-раз я на это и намекнул вопросом №3
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 10.01.2013, 13:19   #8
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

3. выводить поля на форме - к примеру Edit или DBedit, ну или DBText

ну а так то - наверно я понял все)) спасибо
попробую, отпишусь.
А перебирать поля и суммировать (я так понял через цикл) это немного затратно по времени )
а вот про то что грид подсчитать могет - этого не знал
может кто ссылку кинет где прочесть про сие чудо можно

всем спасибо
munhauz вне форума Ответить с цитированием
Старый 10.01.2013, 15:22   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а вот про то что грид подсчитать могет - этого не знал
может кто ссылку кинет где прочесть про сие чудо можно
неверно формулируете. Вот после того, как Вы выберете себе подходящий компонент грида, вот про него документацию и почитаете.
Я бы Вам рекомендовал начать с того, чтобы сходить на сайт EhLiba, скачать компоненты, поставить, потестировать, ОБЯЗАТЕЛЬНО посмотреть демку (раньше она была в наличии!). Если EhLib устроит, вот тогда дальше с ним и разбираться.

Цитата:
выводить поля на форме - к примеру Edit
а почем именно Edit - Вы их редактировать собрались? Впрочем, можно и Edit и Label и даже маленький dbGrid на одну строчку приклеить.. Лишь бы Вас, как разработчика это устраивало и пользователей программы удовлетворяло


Цитата:
А перебирать поля и суммировать (я так понял через цикл) это немного затратно по времени )
Тут всё зависит от деталей. Если у Вас в выборке 200 полей и записей выбралось 100 тысяч, тогда, да, это достаточно затратно (несколько секунд займёт), а если количество записей приемлимое, то и вычисления будут мгновенными!
Боюсь Вас огорчить, но я предполагаю, что в гридах с footer именно такой способ и будет использоваться, только сам цикл подсчёта будет скрыт от Вас!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.01.2013, 15:43   #10
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
Боюсь Вас огорчить, но я предполагаю, что в гридах с footer именно такой способ и будет использоваться, только сам цикл подсчёта будет скрыт от Вас!
и не зря, так оно и будет
http://programmersforum.ru/showthread.php?t=209246
(пост №5)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запросы к бд. Predator199 PHP 10 26.08.2012 17:04
Запросы к БД 10minute SQL, базы данных 0 26.01.2012 22:54
ADO и гетерогенные запросы. santaIsAbsent БД в Delphi 7 08.09.2010 15:30
ADO. Поиск по БД. Запросы. Спасайте, курсовая. Arizonec Помощь студентам 4 29.12.2009 15:31