Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQL запрос с групировкой и условием выбора 
V
    Опции темы
Skodina
Дата 20.5.2010, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 29.5.2009
Где: Москва

Репутация: нет
Всего: нет



добрый день.
у меня есть база данных написаная в Access состоящая из нескольких таблиц(Продажи, Товар, Магазины, Секции)
пользователь выбирает магазин, товар и период за который были проведены продажи
нужно вывести отчет по продажам за период по определенному магазину и определенному товару
я написала вот такой код

Код

procedure TForm14.Button2Click(Sender: TObject);
var
a, b, c, d :string;

begin
a:=DataModule3.ADOQuery2.FieldByName('код_магазина').AsString;
b:=DataModule3.ADOQuery4.FieldByName('код_товара').AsString;
c:=DataModule3.ADOQuery11.FieldByName('дата_продажи').AsString;
b:=DataModule3.ADOQuery12.FieldByName('дата_продажи').AsString;
DataModule3.ADOQuery13.Active:=False;
DataModule3.ADOQuery13.SQL.Clear;
DataModule3.ADOQuery13.SQL.ADD('SELECT Продажи.код_магазина, Магазины.название_магазина, Продажи.код_товара, Товар.наименование_товара, Товар.единица_измерения, Продажи.дата_продажи, Продажи.цена, Продажи.количество_проданного, Продажи.сумма_проданного');
DataModule3.ADOQuery13.SQL.ADD('FROM Товар INNER JOIN (Магазины INNER JOIN Продажи ON Магазины.код_магазина = Продажи.код_магазина) ON Товар.код_товара = Продажи.код_товара');
DataModule3.ADOQuery13.SQL.ADD('GROUP BY Продажи.код_магазина, Магазины.название_магазина, Продажи.код_товара, Товар.наименование_товара, Товар.единица_измерения, Продажи.дата_продажи, Продажи.цена, Продажи.количество_проданного, Продажи.сумма_проданного');
DataModule3.ADOQuery13.SQL.ADD('HAVING (((Продажи.код_магазина)=' + QuotedStr(a) + ' And (Продажи.код_магазина)=' + QuotedStr(a) + ') AND ((Продажи.код_товара)=' + b + ') AND ((Продажи.дата_продажи)>=#' + c + '# And (Продажи.дата_продажи)<=#' + d +'#));');
DataModule3.ADOQuery13.Active:=True;

end;


выдает такую ошибку
user posted image

что не так делаю?
PM MAIL   Вверх
Rodman
Дата 20.5.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



дочитай до конца запрос в ошибке... там даты нет. а значит сравнивать не с чем!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Skodina
  Дата 21.5.2010, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 29.5.2009
Где: Москва

Репутация: нет
Всего: нет



Исправила, теперь стоит другая проблема smile 
дата у меня передается с точками(пример: 01.04.2010) почему-то программа на это ругается :( если я пишу вот так 01/04/2010, то 
все нормально работает, но у меня дата в базе данных именно с точкой :( как можно запрограммировать чтобы не менять 1000 дат в базе данных?
PM MAIL   Вверх
morpheyushka
Дата 21.5.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: нет
Всего: 8



Цитата(Skodina @  21.5.2010,  09:56 Найти цитируемый пост)
Исправила, теперь стоит другая проблема smile 
дата у меня передается с точками(пример: 01.04.2010) почему-то программа на это ругается :( если я пишу вот так 01/04/2010, то 
все нормально работает, но у меня дата в базе данных именно с точкой :( как можно запрограммировать чтобы не менять 1000 дат в базе данных? 

Передавай через параметры. например так
Код

with ADOQuery do begin
  Close;
  SQL.Clear;
  SQL.Add('select * from table where DatePlace = :DatePlc');
  Parameters.ParamByName('DatePlc').Value := Now();
  Open;
end;


PS а в обще не хорошо называть имена таблиц и поля латиницей.

Это сообщение отредактировал(а) morpheyushka - 21.5.2010, 12:58


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Skodina
Дата 21.5.2010, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 29.5.2009
Где: Москва

Репутация: нет
Всего: нет



morpheyushka если честно, то не поняла как  smile 

а можно по подробнее объяснить? smile 
PM MAIL   Вверх
morpheyushka
Дата 21.5.2010, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зеленый человек
**


Профиль
Группа: Участник
Сообщений: 563
Регистрация: 26.2.2008
Где: Киев

Репутация: нет
Всего: 8



Цитата(Skodina @  21.5.2010,  14:19 Найти цитируемый пост)
morpheyushka если честно, то не поняла как  smile 

а можно по подробнее объяснить?

так не совпадает формат времени:
Код

procedure TForm16.Button1Click(Sender: TObject);
var
  S: String;
begin
  S := FormatDateTime('dd.mm.yyyy', Now);
  with ADOQuery1 do begin
    Close;
    SQL.Clear;
    SQL.Add('select * from table where DatePlace = ' + S);
    Open;
  end;
end;


Но если записать так, то все будет нормально:
Код

procedure TForm16.Button1Click(Sender: TObject);
begin
  with ADOQuery1 do begin
    Close;
    SQL.Clear;
    SQL.Add('select * from table where DatePlace = :DatePlc');
    Parameters.ParamByName('DatePlc').Value := Now();
    Open;
  end;
end;

тут DatePlace - переменная в БД типа DateTime, DatePlc - параметр, который я потом задаю тут - ADOQuery1.Parameters.ParamByName('DatePlc').Value := Now();
параметр можно обозвать как угодно. Параметр в запросе пишется как :ParamName, в нашем случае - :DatePlc


Не знаю как в Access, но в MS SQL если я не знаю формата и нужно передать дату в виде строки, то я формирую строку в таком формате - в MS SQL работает. Формат должен быть такой: YYYYMMDD без точек и всего остального

Это сообщение отредактировал(а) morpheyushka - 21.5.2010, 15:47


--------------------
user posted image
Спасибо делается вот так!!!
PM MAIL WWW   Вверх
Skodina
  Дата 21.5.2010, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 29.5.2009
Где: Москва

Репутация: нет
Всего: нет



что-то я совсем не поняла ничего
PM MAIL   Вверх
Данкинг
Дата 21.5.2010, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Skodina @  21.5.2010,  18:41 Найти цитируемый пост)
что-то я совсем не поняла ничего 

Нужное значение содержится в переменной, например :DatePlc (именно так, с двоеточием перед переменной). Значение же этому параметру передаётся так:
Код

AdoQuery1.Parameters.ParamByName('DatePlc').Value := Now();



--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Skodina
Дата 21.5.2010, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 29.5.2009
Где: Москва

Репутация: нет
Всего: нет



все, спасибо, разобралась smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0505 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.