Текущий архив: 2009.08.16;
Скачать: CL | DM;
Вниз
Диаграмма Найти похожие ветки
← →
RamzesIII © (2008-11-05 23:23) [0]есть ситуация:надо построить диаграмму продаж по месяцам...месяц выбирается из MonthComboBox,год вводится в YearEdit.
при нажатии на кнопку выполняется процедура:
procedure TFormVvodMes.BitBtn1Click(Sender: TObject);
var MaxDay: integer;
begin
formDiagProd.Query1.Filtered:=false;
FormDiagProd.Query1.Active:=false;
FormDiagProd.Query1.SQL.Clear;
FormDiagProd.Query1.SQL.Add("SELECT Diski.Nazvanie, SUM( Prodazha.Kolichectvo ),chek.data");
FormDiagProd.Query1.SQL.Add("FROM "prodazha.DB" Prodazha INNER JOIN "diski.DB" Diski ON (Prodazha.Shtrih_kod = Diski.Shtrih_kod) INNER JOIN "chek.db" Chek ON (Prodazha.Kod_cheka = Chek.Kod_cheka)");
FormDiagProd.Query1.SQL.Add("GROUP BY Diski.Nazvanie, chek.data");
FormDiagProd.Query1.Active:=true;
MaxDay:=0;
case (MonthComboBox.ItemIndex) of
0,2,4,6,7,9,11: MaxDay := 31;
3,5,8,10: MaxDay := 30;
else MaxDay := 28;
end;
FormDiagProd.Query1.Filter :=
Format(" Data>=""" + "01.%.02d.%d" + """ and Data<="""+"%.02d.%.02d.%d"+"""",
[ MonthComboBox.ItemIndex+1, StrToInt(YearEdit.Text), MaxDay,
MonthComboBox.ItemIndex+1, StrToInt(YearEdit.Text) ] ) ;
FormDiagProd.Query1.Filtered:=true;
YearEdit.Clear;
FormVvodMes.Close;
FormDiagProd.QuickRep1.Preview;
end;
Но эть одна проблема:диаграмма строится только если за месяц сохранилась только 1 запись в таблице "Chek"юююесли же за месяц имеется более одного чека,то выдает ошибку...
Что можно сделать,чтобы диаграмма все таки строилась???
← →
Loginov Dmitry © (2008-11-05 23:40) [1]> Но эть одна проблема:диаграмма строится только если за месяц
> сохранилась только 1 запись в таблице "Chek"юююесли же за
> месяц имеется более одного чека,то выдает ошибку...
Кто выдает ошибку? В каком месте кода? Каков текст ошибки?
Сам SQL-код вроде правильный. Только не ясно:
1) какой смысл отSUM( Prodazha.Kolichectvo )
иGROUP BY
?
2) зачем городитьFROM "prodazha.DB" Prodazha
когда можно простоFROM Prodazha
?
← →
GRAND © (2008-11-05 23:53) [2]
> 1) какой смысл от SUM( Prodazha.Kolichectvo ) и GROUP BY?
GROUP BY необходим, если в запросе выбираются еще и обычные поля кроме агрегированных.
← →
RamzesIII © (2008-11-06 00:01) [3]
> Кто выдает ошибку? В каком месте кода? Каков текст ошибки?
> Сам SQL-код вроде правильный. Только не ясно:1) какой смысл
> от SUM( Prodazha.Kolichectvo ) и GROUP BY?2) зачем городить
> FROM "prodazha.DB" Prodazha когда можно просто FROM Prodazha?
>
текст ошибки:
Project D:\CD\cd.exe fauled with message: "access violation at 0x7d61f085:write of address 0x00030fc8". Process Stopped.Use Step or Run to continue
так как диаграмма должна строиться по месяцам,то нужны даты продвж,которые фиксируются в таблице Chek. А SUM( Prodazha.Kolichectvo ) нужен чтобы посчитать какой диск в каком количестве продан
← →
RamzesIII © (2008-11-06 00:06) [4]все работает,если за месяц есть только одна запись в таблице Chek, тоесть продажа была совершена единожды,но если продаж было несколько и за месяц в таблице Chek имеются несколько записей,то Project D:\CD\cd.exe fauled with message: "access violation at 0x7d61f085:write of address 0x00030fc8". Process Stopped.Use Step or Run to continue
← →
Германн © (2008-11-06 03:50) [5]
> Что можно сделать,чтобы диаграмма все таки строилась???
>
Какая диаграмма? Где в в приведённом коде строится хоть какая-то диаграмма!?
Фараоны вместе с верблюдами идут на север. (Ну или отдельно от верблюдов) Это уж их личное дело.
!!!
Если уж не читаешь книжки-учебники, то хотя б освой работу с отладчиком!
← →
RamzesIII © (2008-11-06 07:15) [6]на форме FormDiagProd имеется компонент QuickRep1...Диаграмма рисуется на TQRChart1юИсходными данными для диаграммы является компонент Query1. Просмотр отчета происходит при нажатии на кпопку(код приведен выше в первом сообщении)
← →
RamzesIII © (2008-11-06 07:17) [7]а есь возможность после
FormDiagProd.Query1.Filter :=
Format(" Data>=""" + "01.%.02d.%d" + """ and Data<="""+"%.02d.%.02d.%d"+"""",
[ MonthComboBox.ItemIndex+1, StrToInt(YearEdit.Text), MaxDay,
MonthComboBox.ItemIndex+1, StrToInt(YearEdit.Text) ] ) ;
во второй Query(Query) вписать запрос,который бы брал данные из Query1 в качестве исходных?
← →
Loginov Dmitry © (2008-11-06 08:00) [8]> GROUP BY необходим, если в запросе выбираются еще и обычные
> поля кроме агрегированных.
Да понятно :)
Только я не об этом!
Есть запрос:SELECT Diski.Nazvanie, SUM( Prodazha.Kolichectvo ),chek.data
FROM "prodazha.DB" Prodazha
INNER JOIN "diski.DB" Diski ON (Prodazha.Shtrih_kod = Diski.Shtrih_kod)
INNER JOIN "chek.db" Chek ON (Prodazha.Kod_cheka = Chek.Kod_cheka)
GROUP BY Diski.Nazvanie, chek.data
мы просим, чтобы запрос выдавал наименование проданного товараDiski.Nazvanie
.
> А SUM( Prodazha.Kolichectvo ) нужен чтобы посчитать какой
> диск в каком количестве продан
chek.data - это что? Это "дата" или "дата/время"?
Если это "дата", то я бы так сформулировал:SUM( Prodazha.Kolichectvo ) нужен чтобы посчитать какой диск в каком количестве продан за каждый день
Если chek.data - это "дата/время", тогда указанный запрос ничем не будет отличаться от:SELECT Diski.Nazvanie, Prodazha.Kolichectvo,chek.data
FROM "prodazha.DB" Prodazha
INNER JOIN "diski.DB" Diski ON (Prodazha.Shtrih_kod = Diski.Shtrih_kod)
INNER JOIN "chek.db" Chek ON (Prodazha.Kod_cheka = Chek.Kod_cheka)
> а есь возможность во второй Query(Query) вписать запрос,
> который бы брал данные из Query1 в качестве исходных?
Что еще за второй Query(Query)?
← →
RamzesIII © (2008-11-06 09:18) [9]chek.data это только дата. вротой Query нужен чтобы отобрать из отфильтрованного первого Query поля Nazvanie и SUM(Kolichectvo ),без даты,чтобы сформировать диаграмму
ps Я можно ли в данной задаче испльзовать конструкцию select(from select)??? использую при этом в строке Where выражение Chek.Data=Format(" Data>=""" + "01.%.02d.%d" + """ and Data<="""+"%.02d.%.02d.%d"+"""",
[ MonthComboBox.ItemIndex+1, StrToInt(YearEdit.Text), MaxDay,
MonthComboBox.ItemIndex+1, StrToInt(YearEdit.Text) ] ) ;
← →
GRAND © (2008-11-06 09:53) [10]
> chek.data это только дата. вротой Query нужен чтобы отобрать
> из отфильтрованного первого Query поля Nazvanie и SUM(Kolichectvo
> ),без даты,чтобы сформировать диаграмму
Тогда непонятно, зачем нужен первый Query. Вот такой запрос:SELECT Diski.Nazvanie, SUM( Prodazha.Kolichectvo )
FROM "prodazha.DB" Prodazha
INNER JOIN "diski.DB" Diski ON (Prodazha.Shtrih_kod = Diski.Shtrih_kod)
GROUP BY Diski.Nazvanie
может и сам по себе прекрасно работать. Если диаграмму нужно формировать без даты, то тогда вообще больше ничего не нужно.
← →
RamzesIII © (2008-11-06 10:02) [11]первый query с полем Chek.Data необходим,чтобы отфильтровать данные по выбранному месяцу
← →
GRAND © (2008-11-06 10:11) [12]
> первый query с полем Chek.Data необходим,чтобы отфильтровать
> данные по выбранному месяцу
>SELECT Diski.Nazvanie, SUM( Prodazha.Kolichectvo )
FROM "prodazha.DB" Prodazha
INNER JOIN "diski.DB" Diski ON (Prodazha.Shtrih_kod = Diski.Shtrih_kod)
INNER JOIN "chek.db" Chek ON (Prodazha.Kod_cheka = Chek.Kod_cheka)
WHERE Chek.data BETWEEN :Date1 AND :Date2
GROUP BY Diski.Nazvanie
Остается только вместо наворотов со строкой фильтра передать в запрос параметрами первый день месяца и последний.
Страницы: 1 вся ветка
Текущий архив: 2009.08.16;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.021 c