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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2010, 01:07   #1
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию Подсчет суммы с помошью СКУЕЛ

есть поле даты и количества товара делаю запрос
Код:
SELECT SUM(kolicestvo*cenapszedz)
FROM istoriasw
WHERE dataprodaji LIKE '+Edit1.Text+'
почемуто не считает не могу понять почему помогите пожалуиста
запрос с помошью АДОКВЕРИ ошибку никакую не выдаает
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;
Lord777 вне форума Ответить с цитированием
Старый 15.05.2010, 02:52   #2
noname Incognito
Пользователь
 
Аватар для noname Incognito
 
Регистрация: 15.05.2010
Сообщений: 17
По умолчанию

Неправильный синтаксис фильтра. Если бы это был "чистый" SQL-запрос, выглядело бы всё примерно так:

.
.
WHERE dataprodaji LIKE '10%', соответсвенно использовались бы только те записи, дата продажи которых начиналь бы с десяти.

Конкретно в твоём случае программный код будет что-то наподобии:
-----------------------------------------------------------------------------
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT SUM(kolicestvo*cenapszedz) FROM istoriasw WHERE dataprodaji LIKE'+'''%'+Edit1.Text+'%''');
ADOQuery1.Open;
-------------------------------------------------------------------------------
noname Incognito вне форума Ответить с цитированием
Старый 15.05.2010, 07:38   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

в принципе, noname Incognito абсолютно прав.

Единственно, могу заметить, что, похоже, что поле dataprodaji имеет тип дата (datetime или date) (это судя по имени поля).
И лично я не уверен, что для полей типа Дате во всех СУБД применима операция нечёткого сравнения LIKE (вообще-то, эта операция предназначена для сравнения строковых величин...)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.05.2010, 12:18   #4
noname Incognito
Пользователь
 
Аватар для noname Incognito
 
Регистрация: 15.05.2010
Сообщений: 17
По умолчанию

...а есчё лучше использовать динамические SQL-запросы. Это и красивее и, возможно, избавит от тех проблемых о которых вы упомянули. Хотя лично я с подобным пока не стыкался.
noname Incognito вне форума Ответить с цитированием
Старый 15.05.2010, 17:27   #5
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию

я всегда говорил сто ето самыи лучши форум с самыми лучшими форумчанами!!! Огромное спасибо noname Incognito и Serge_Bliznykov за помосч и выделенное время!

Появился второи вопрос как сделат чтоб виборка била по дате с ХХ.ХХ.ХХХХ до ХХ.ХХ.ХХХХ времиа указивается в едитах не как не могу реализовать
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;

Последний раз редактировалось Lord777; 15.05.2010 в 17:37.
Lord777 вне форума Ответить с цитированием
Старый 15.05.2010, 17:45   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Код:
SELECT SUM(kolicestvo*cenapszedz)
FROM istoriasw
WHERE (dataprodaji >= :DateFrom) and (dataprodaji <= :DateTo)
:DateFrom и :DateTo - параметры запроса. Как с ними работать в ADOQuery, описано в куче статей и книг. Делфей нет, но будет что-то вроде:
Код:
ADOQuery1.ParamByName('DateFrom').Value := StrToDate(Edit1.Text);
ADOQuery1.ParamByName('DateTo').Value := StrToDate(Edit2.Text);
pu4koff вне форума Ответить с цитированием
Старый 15.05.2010, 18:33   #7
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию

спасибо начнем колдоват как что сразу напишу!
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;
Lord777 вне форума Ответить с цитированием
Старый 16.05.2010, 00:54   #8
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию

ребят проблема никак не могу сделать запрос
вот приблизително вышло такое но не работает
Код:
SELECT SUM(kolicestvo*cenapszedz)
FROM istoriasw
WHERE (dataprodaji >= :DateFrom.Value := StrToDate(Edit1.Text) and (dataprodaji <= :DateTo.Value := StrToDate(Edit1.Text)));
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;
Lord777 вне форума Ответить с цитированием
Старый 16.05.2010, 03:27   #9
noname Incognito
Пользователь
 
Аватар для noname Incognito
 
Регистрация: 15.05.2010
Сообщений: 17
По умолчанию

Lord777, динамические запросы так не оформляются.

В ADO'шке, в SQL-memo, пишеш "в лоб", то, что написал pu4koff:

SELECT SUM(kolicestvo*cenapszedz) FROM istoriasw
WHERE (dataprodaji >= :DateFrom) and (dataprodaji <= :DateTo)

В дереве объектов у ADOQuery появится подветка "Parameters" и входящие в неё подветки-параметры DateFrom и DateTo.

Обязательно! перед этим создай ConnectionString. В противном случае ADO'шка параметров просто не увидит.

Далее, например, по Button1Click, назначаеш этим параметрам необходимые значения:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQuery1.Close;
 ADOQuery1.Parameters.ParamValues['DateFrom']:=StrToDate(Edit1.Text);
 ADOQuery1.Parameters.ParamValues['DateTo']:=StrToDate(Edit2.Text);
 ADOQuery1.Open;
end;
А вообще, конечно, и самому читать что-то нужно
noname Incognito вне форума Ответить с цитированием
Старый 16.05.2010, 12:22   #10
Lord777
Пользователь
 
Регистрация: 28.04.2009
Сообщений: 46
По умолчанию

мдааааа тепер ясно почему он не понимал параметра :DateFrom :DateTo! огромное спасибо вам ребята!
Цитата:
А вообще, конечно, и самому читать что-то нужно
читал я толко вот наверно неправильно понел, но опять повтарюсь спасибо вам ребята за выделенное время и силы! я многому научился здесь и от вас!!!
Тема закрыта!
Поступай с человеком так как хотелбы чтоб поступали с тобой!!!
Код:
if помог:=True then репутация:='+1000' else зрятытак:=True;
Lord777 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет суммы. Firebird artemavd БД в Delphi 3 31.03.2010 15:29
Подсчет суммы выборки. Hagen83 Microsoft Office Excel 2 15.03.2010 14:06
Подсчет суммы Владимир1988 Помощь студентам 7 05.12.2009 23:02
Подсчет суммы в DBGrid girz БД в Delphi 3 16.05.2009 14:11
Подсчет суммы Kardi PHP 0 23.11.2008 16:46