![]() |
|
#1
|
|||
|
|||
![]() Помогите организовать SQL запрос для вывода отчета по движению товаров за период. Вот как я пытался но ничего не вышло:
SELECT ОрдерКод, ОрдерНомер, ОрдерСклад, ОрдерМОЛ, ОрдерДата, ОперацияКод FROM [Справочник Ордеров] WHERE (ОрдерДата>="'+Edit1.Text+'") and (ОрдерДата<="'+Edit2.Text+'")' |
#2
|
|||
|
|||
![]() А ошибку-то какую выдает? В каком формате дата в Edit1 и Edit2?
Кстати проверку того, что дата попадает в заданный интервал, можно писать так: WHERE ОрдерДата BETWEEN Дата1 AND Дата2 |
#3
|
|||
|
|||
![]() Формат. Например. 15.10.2007
|
#4
|
|||
|
|||
![]() Мне необходимо вывести все ордера за данный период!
|
#5
|
|||
|
|||
![]() Дату укажите в формате ГГГГ.ММ.ДД.
Вообще, проще всего такие коллизии решать с помощью параметров: Код:
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
|
|||
|
|||
![]() А если прописать через 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
|
||||
|
||||
![]() Ошибка видимо в ДНК. Rosenkrantz тебе указал на, то что даты следует передавать в запрос параметрами.
|
#8
|
|||
|
|||
![]() В том то и дело как переадать запрос параметрами через ADOQuery я и не пойму!
|
#9
|
|||
|
|||
![]() Вот так не надо:
Код:
...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); ... Почитайте все-таки что-нибудь о T-SQL и о реализации запросов в VCL. Я просто предвижу многие трудности, с которыми вы столкнетесь, если этого не сделаете. Можно вот сюда глянуть: Пример приложения с использованием ADO T-SQL |