Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 15.01.2008, 13:01
Comp-1984 Comp-1984 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 22
Репутация: 10
По умолчанию Помогите

Помогите организовать SQL запрос для вывода отчета по движению товаров за период. Вот как я пытался но ничего не вышло:
SELECT ОрдерКод, ОрдерНомер, ОрдерСклад, ОрдерМОЛ, ОрдерДата, ОперацияКод FROM [Справочник Ордеров] WHERE (ОрдерДата>="'+Edit1.Text+'") and (ОрдерДата<="'+Edit2.Text+'")'
Ответить с цитированием
  #2  
Старый 15.01.2008, 14:37
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

А ошибку-то какую выдает? В каком формате дата в Edit1 и Edit2?
Кстати проверку того, что дата попадает в заданный интервал, можно писать так: WHERE ОрдерДата BETWEEN Дата1 AND Дата2
Ответить с цитированием
  #3  
Старый 15.01.2008, 14:49
Comp-1984 Comp-1984 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 22
Репутация: 10
По умолчанию

Формат. Например. 15.10.2007
Изображения
Тип файла: gif Ошибка.GIF (10.0 Кбайт, 5 просмотров)
Ответить с цитированием
  #4  
Старый 15.01.2008, 14:51
Comp-1984 Comp-1984 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 22
Репутация: 10
По умолчанию

Мне необходимо вывести все ордера за данный период!
Ответить с цитированием
  #5  
Старый 15.01.2008, 15:02
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Дату укажите в формате ГГГГ.ММ.ДД.
Вообще, проще всего такие коллизии решать с помощью параметров:
Код:
var
  Q: TQuery;
begin
  Q := TQuery.Create(nil);
  try
    Q.SQL.Add('SELECT ОрдерКод, ОрдерНомер, ОрдерСклад, ОрдерМОЛ, ОрдерДата, ОперацияКод FROM [Справочник Ордеров]');
    Q.SQL.Add('WHERE ОрдерДата BETWEEN :DStart AND :DEnd');
    Q.ParamByName('DStart').AsDateTime := StrToDate(Edit1.Text);
    Q.ParamByName('DEnd').AsDateTime   := StrToDate(Edit2.Text);
    Q.Open;
    { Тут делаем чего хотели с данными запроса }
  finally
    Q.Free;
  end;
end;
Ответить с цитированием
  #6  
Старый 17.01.2008, 00:19
Comp-1984 Comp-1984 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 22
Репутация: 10
По умолчанию ADOQuery

А если прописать через ADOQuery! Я вот как пробовал но полученные значения почему то не выводятся!?
Код:
var
tmpStr : string;
begin
ADOQuery1.Active := False;
ADOQuery1.SQL.Clear;
 tmpStr := 'SELECT ОрдерКод, ОрдерСклад, ОрдерМОЛ, ОрдерДата, ОперацияКод  FROM [Справочник Ордеров] WHERE ОрдерДата BETWEEN :("'+Edit1.Text+'") and :("'+Edit2.Text+'")';
ADOQuery1.SQL.Add(tmpStr);
ADOQuery1.Active := True;
end;
Может где ошибка? Помогите разобратся!

Модератор
Не забываем использовать теги.
Ответить с цитированием
  #7  
Старый 17.01.2008, 04:41
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ошибка видимо в ДНК. Rosenkrantz тебе указал на, то что даты следует передавать в запрос параметрами.
Ответить с цитированием
  #8  
Старый 17.01.2008, 12:24
Comp-1984 Comp-1984 вне форума
Прохожий
 
Регистрация: 06.10.2007
Сообщения: 22
Репутация: 10
По умолчанию

В том то и дело как переадать запрос параметрами через ADOQuery я и не пойму!
Ответить с цитированием
  #9  
Старый 17.01.2008, 13:55
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Вот так не надо:
Код:
...BETWEEN :("'+Edit1.Text+'") and :("'+Edit2.Text+'")';

Надо вот так:
Код:
...BETWEEN :DStart and :DEnd';
ADOQuery1.SQL.Add(tmpStr);
ADOQuery1.ParamByName('DStart').AsDateTime := StrToDate(Edit1.Text);
ADOQuery1.ParamByName('DEnd').AsDateTime   := StrToDate(Edit2.Text);
...
DStart и DEnd - названия параметров, вы можете назвать их и по-другому, конечно.

Почитайте все-таки что-нибудь о T-SQL и о реализации запросов в VCL. Я просто предвижу многие трудности, с которыми вы столкнетесь, если этого не сделаете. Можно вот сюда глянуть:
Пример приложения с использованием ADO
T-SQL
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 00:22.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025