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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.11.2024, 17:39
Filen Filen вне форума
Прохожий
 
Регистрация: 23.05.2024
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию SQL запрос с диапазоном дат

Добрый вечер. Пытаюсь сделать запрос на выборку из таблицы , т.е. в заданном диапазоне дат нужно выбрать все записи с одинаковым id .
С диапазоном дат разобрался ..

Код:
procedure TForm19.Button1Click(Sender: TObject);
var
d1,d2:TDateTime;
idAA:integer;

begin
d1:=(DateEdit1.Date);
d2:=(DateEdit2.Date) ;
DataModule2.ADOQueryApteka.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi,idPrepar,NamPreparat FROM [AptekaProdaga] WHERE [DataProdagi] BETWEEN DateEdit1.Date and DateEdit2.Date ORDER BY NamPreparat ASC');
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit1.Date').Value := DateEdit1.Date;  /// Ïàðàìåòð D1 ïî óìîë÷àíèþ
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit2.Date').Value := DateEdit2.Date;   /// Ïàðàìåòð D2 ïî óìîë÷àíèþ
DataModule2.ADOQueryApteka.Active:=true;
но чтобы отобрать записи еще и с указанным id не соображу как ..

Код:
idAA:=92123134;
d1:=(DateEdit1.Date);
d2:=(DateEdit2.Date) ;
DataModule2.ADOQueryApteka.SQL.Clear;
DataModule2.ADOQueryApteka.Active:=False;
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi,idPrepar,NamPreparat FROM [AptekaProdaga] WHERE [DataProdagi] BETWEEN DateEdit1.Date and DateEdit2.Date, idAA ORDER BY NamPreparat ASC');
DataModule2.ADOQueryApteka.Parameters.ParamByName('idAA').Value :=idAA;
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit1.Date').Value :=DateEdit1.Date;  /// Параметр D1 по умолчанию
DataModule2.ADOQueryApteka.Parameters.ParamByName('DateEdit2.Date').Value := DateEdit2.Date;   /// Параметр D2 по умолчанию
DataModule2.ADOQueryApteka.Active:=true;
DataModule2.ADOQueryApteka.First;

понимаю что не так , как правильно help my
Ответить с цитированием
  #2  
Старый 07.11.2024, 23:55
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 179
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Код:
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi, idPrepar, NamPreparat FROM [AptekaProdaga]');
DataModule2.ADOQueryApteka.SQL.Add('WHERE [DataProdagi] ((BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id)));
DataModule2.ADOQueryApteka.SQL.Add('ORDER BY NamPreparat ASC');
где (отдельно прописать в обработчике)
Код:
var
d1, d2, id: String;
....
d1 := DateEdit1.Date;
d2 := DateEdit2.Date;
id := Edit1.Text; // к примеру
Поскольку текст SQL-запроса формируется динамически, то в данном примере параметры не используются, всё прописывается текстом.
Простыми словами, Вам в запросе должна быть строка "где дата продажи лежит в диапазоне..., и id равен такому-то".

Последний раз редактировалось Guaho, 08.11.2024 в 00:08.
Ответить с цитированием
  #3  
Старый 08.11.2024, 10:40
Filen Filen вне форума
Прохожий
 
Регистрация: 23.05.2024
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Guaho
Код:
DataModule2.ADOQueryApteka.SQL.Add('SELECT DataProdagi, idPrepar, NamPreparat FROM [AptekaProdaga]');
DataModule2.ADOQueryApteka.SQL.Add('WHERE [DataProdagi] ((BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id)));
DataModule2.ADOQueryApteka.SQL.Add('ORDER BY NamPreparat ASC');
где (отдельно прописать в обработчике)
Код:
var
d1, d2, id: String;
....
d1 := DateEdit1.Date;
d2 := DateEdit2.Date;
id := Edit1.Text; // к примеру
Поскольку текст SQL-запроса формируется динамически, то в данном примере параметры не используются, всё прописывается текстом.
Простыми словами, Вам в запросе должна быть строка "где дата продажи лежит в диапазоне..., и id равен такому-то".

т.е. я правильно понимаю в моем случае
Код:
var
d1,d2,id: String;
idAA:Integer;
......

idAA:=9212337; ///искомый id

d1 := DAteToStr(DateEdit1.Date);
d2 := DAteToStr(DateEdit2.Date);
id :=IntToStr(idAA);
??
в таком случае в строке
Код:
DataModule2.ADOQueryApteka.SQL.Add('WHERE [DataProdagi] ((BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id )));
ошибка 'END' expected but ')' found, так понимаю что то не то с типом данных ?

Последний раз редактировалось Filen, 08.11.2024 в 10:59.
Ответить с цитированием
  #4  
Старый 08.11.2024, 21:17
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Да там что-то не то с кавычками и скобками.
Если не ошибаюсь, то должно быть так:
Код:
DataModule2.ADOQueryApteka.SQL.Add('WHERE ([DataProdagi] BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id +')');
PS. Возможно, даты надо тоже "закавычить" в запросе.

а вообще, что бы было менще путаницы, я использую функцию Format:
Код:
DataModule2.ADOQueryApteka.SQL.Add(Format('WHERE ([DataProdagi] BETWEEN %s AND %s) AND (idAA = %s)',[d1,d2,id]));
Если даты надо кавычить, то так:
Код:
DataModule2.ADOQueryApteka.SQL.Add(Format('WHERE ([DataProdagi] BETWEEN ''%s'' AND ''%s'') AND (idAA = %s)',[d1,d2,id]));
Ответить с цитированием
  #5  
Старый 08.11.2024, 22:07
Filen Filen вне форума
Прохожий
 
Регистрация: 23.05.2024
Сообщения: 11
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Код:
1
	
DataModule2.ADOQueryApteka.SQL.Add('WHERE ([DataProdagi] BETWEEN ' + d1 + ' AND ' + d2 + ') AND (idAA = ' + id +')');
Код:
1
	
DataModule2.ADOQueryApteka.SQL.Add(Format('WHERE ([DataProdagi] BETWEEN %s AND %s) AND (idAA = %s)',[d1,d2,id]));
ошибка
Error.JPG
истина где то рядом ..

Последний раз редактировалось Filen, 08.11.2024 в 22:10.
Ответить с цитированием
  #6  
Старый 11.11.2024, 08:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,057
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А тут проблема скорее всего со значением даты.
Надо смотреть в каком формате наде ее передавать. Возможно, д.б. YYYY-MM-DD и в кавычках. Посмтотри документацию на твою БД (скорее всего это либо Access, либо MS SQL Server, судя по синтаксису в имени поля). Тогда при получении значения в переменные d1 и d2 дату надо соотв. отформатировать. Код не даю - смотри сначала в каком формате ее надо передавать.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Filen (11.11.2024)
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter