Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
2-1245496785
KiLLiR
2009-06-20 15:19
2009.08.16
Документ Word не удаляется.


2-1245284214
<AIRDIGER>
2009-06-18 04:16
2009.08.16
web сторку к норамальному пути


15-1245044573
blurcode
2009-06-15 09:42
2009.08.16
Срубил меня остеохондроз, видимо.


15-1245230560
И. Павел
2009-06-17 13:22
2009.08.16
Завершение программы через Halt


2-1244520609
Чипырик
2009-06-09 08:10
2009.08.16
Слетает база и портится индекс