Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2009, 11:18   #1
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию SQL запрос по дате и времени

Всем привет!
Возникли сложности с построением SQL запроса... (База данных MS SQL)

Мне необходимо получить данные за период времени. Установил на форму 4 DateTimePicker-а, написал код:
Код:
*****
var
  dt1, dt2: String;
*****
  dt1:=DateToStr(DateTimePicker1.Date)+' '+TimeToStr(DateTimePicker2.Time);
  dt2:=DateToStr(DateTimePicker3.Date)+' '+TimeToStr(DateTimePicker4.Time);
Затем построение SQL запроса:
Код:
  ADOQuery1.Active:=False;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('SELECT MS.MIid, MS.MTime, dbo.V_GT_MV.DRA ');
  ADOQuery1.SQL.Add('FROM dbo.MS,dbo.V_GT_MV');
  ADOQuery1.SQL.Add('WHERE MS.MTime >='+dt1);
  ADOQuery1.SQL.Add('AND  MS.MTime <='+dt2);
  ADOQuery1.SQL.Add('AND MS.MIid=2017');
  ADOQuery1.SQL.Add('ORDER BY MTime DESC');
  ADOQuery1.Active:=True;
(Жирным выделил присвоение временного диапозона)
Выдается следующая ошибка:
Incorrect sintax near '.2009'
Само собой ошибка в формате даты. Но как исправить - не пойму... ((
Подскажите плиз - что я делаю не так?
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 18.08.2009, 12:46   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Для начала проверьте как у Вас в базе хранятся данные с датами. Обычно так 12.11.2009 будет как 11.12.2009 или как нибудь еще, в зависимости от СУБД.
А такой вариант Вас не устроит?
Код:
dt1:=DateTimeToStr(DateTimePicker1.DateTime);
psycho-coder вне форума Ответить с цитированием
Старый 18.08.2009, 13:04   #3
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Данные хранятся в формате 12.12.2009 12:00:00
Диапозон необходим с точностью до минут.

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
А такой вариант Вас не устроит?
Код:
dt1:=DateTimeToStr(DateTimePicker1.DateTime);
Устроит! Только я не могу заставить отображать DateTimePicker и дату и время... Пришлось разбивать на 2 DateTimePicker-а.
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 18.08.2009, 13:28   #4
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Вот:
Код:
DateTimePicker1.Format := 'MM.dd.yyyy HH:mm:ss';
psycho-coder вне форума Ответить с цитированием
Старый 18.08.2009, 13:29   #5
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Вот:
Код:
DateTimePicker1.Format := 'MM.dd.yyyy HH:mm:ss';
Спасибо!!! Помогло!

Вроде ошибку понял!
Не хватает одинарных кавычек перед и после переменными dt1\dt2.
Как ее прописать в Делфях не знаю.
Вставил в Label и использую его свойство Caption.
Если кто подскажет более коректный способ - буду благодарен!
Жить тоже вредно, от этого умирают!!!

Последний раз редактировалось Demien; 18.08.2009 в 13:37.
Demien вне форума Ответить с цитированием
Старый 18.08.2009, 14:00   #6
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Код:
  ADOQuery1.SQL.Add('WHERE MS.MTime >=''' + dt1 + '''');
  ADOQuery1.SQL.Add('AND  MS.MTime <=''' + dt2 + '''');
psycho-coder вне форума Ответить с цитированием
Старый 18.08.2009, 16:57   #7
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Еще раз спасибо!
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Старый 19.08.2009, 01:21   #8
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Сообщение от psycho-coder Посмотреть сообщение
Код:
  ADOQuery1.SQL.Add('WHERE MS.MTime >=''' + dt1 + '''');
  ADOQuery1.SQL.Add('AND  MS.MTime <=''' + dt2 + '''');
Привет. Вот объясните мне. Я никак не могу понять как правильно эти кавычки расставлять?
Всё время составляю статический запрос, ну за исключением работаю через параметры.
Arkuz вне форума Ответить с цитированием
Старый 19.08.2009, 01:25   #9
Talemir
Пользователь
 
Регистрация: 12.08.2009
Сообщений: 62
По умолчанию

Я вот делал таким образом используя компонет TQuery, выпбока по периоду С и ПО:
procedure TForm1.Button1Click(Sender: TObject);
var
Present:TDatetime;
DTS,DTPO:TDatetime;
begin

Present:=Now;//Now-Функция преобразования даты и времени

//Присваиваивание переменной єлемент С
DTS:=IncDay(Present);
DTS:=DateTimePicker1.DateTime;

//Присваиваивание переменной єлемент ПО
DTPO:=IncDay(Present);
DTPO:=DateTimePicker2.DateTime;

//SQL Запрос выборки по периоду дат С AND ПО
DM2.Query1.Close;
DM2.Query1.SQL.Clear;
DM2.Query1.SQL.add('Select*From Phone Where Data BETWEEN '''+FormatDateTime('dd/mm/yyyy',DTS)+''' AND '''+FormatDateTime('dd/mm/yyyy',DTPO)+'''ORDER BY Data');
DM2.Query1.Open;
end;
Talemir вне форума Ответить с цитированием
Старый 19.08.2009, 09:59   #10
Demien
Форумчанин
 
Аватар для Demien
 
Регистрация: 01.08.2007
Сообщений: 222
По умолчанию

Цитата:
Сообщение от Talemir Посмотреть сообщение
...+FormatDateTime('dd/mm/yyyy',DTS)+''' AND '''+FormatDateTime('dd/mm/yyyy',DTPO)+...
Вся соль в том что при запросе к базе MS SQL используется формат даты 'mm.dd.yyyy'. Долго у себя искал ошибку - разобрался! Хотя так и не понял почему в базе дата пишется 'dd.mm.yyyy', а в запросе прходится использовать 'mm.dd.....'.
Жить тоже вредно, от этого умирают!!!
Demien вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос по дате ННС Помощь студентам 4 20.04.2009 19:30
SQL запрос по дате ННС Помощь студентам 0 04.04.2009 20:03
Запрос по дате календаря ННС Помощь студентам 2 30.03.2009 16:46
SQL Запрос по дате SERG1980 БД в Delphi 4 16.03.2009 14:04
Отслеживание изменений(по времени и дате) Ксеноцид Общие вопросы Delphi 6 01.04.2008 10:59