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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2011, 18:55   #1
Never74
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 20
Вопрос SQL запрос между 2 датами

Приветствую всех, у меня сложная ситуация.

Задача: Сделать запрос с выполнением работ за какой-то определённый период времени (то есть по 2 дата...между 2 датами найти выполненые работы)...вот тока как сюда и условие про работы вписать даже не представляю....

Но данный запрос выдает ошибку и не работает
http://s017.radikal.ru/i425/1112/f4/99ad02838ba4.png

Код:
Data_Module_0.ADOQuery_Priem.Close;
Data_Module_0.ADOQuery_Priem.SQL.Clear;
Data_Module_0.ADOQuery_Priem.SQL.Add('SELECT * FROM Priem WHERE DatePay Between and '''+DateToStr(trunc(DateTimePicker1.Date))+''' and '''+DateToStr(trunc(DateTimePicker2.Date))+'''');
Data_Module_0.ADOQuery_Spr_Rabs.ExecSQL;
Data_Module_0.ADOQuery_Priem.Open;
Помоги пожалуйста решить данную проблему.
Заранее спасибо
Never74 вне форума Ответить с цитированием
Старый 17.12.2011, 19:17   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
'SELECT * FROM Priem WHERE DatePay Between and '''+DateToStr
Выделенное красным что делает?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.12.2011, 05:48   #3
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Параметры в запросах. Ваш вопрос обсасывается не меньше раза в неделю. На форуме есть поиск.
Цитата:
'SELECT * FROM Priem WHERE DatePay Between and '''+DateToStr
Так делать нельзя
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 18.12.2011, 08:33   #4
Never74
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 20
Вопрос

Осталась тока одна проблема. Как добавить условие для поиска ещё по какому-нибудь полю в таблице.

С датами по диапазону получилось вот так и работает:
Код:
//Функция DateToSQLStr 
function DateToSQLStr(Date : TDate) : String ;
   var
      d, m, y : word ;
begin
   DecodeDate(Date, y, m, d) ;
   Result := IntToStr(d)+'/'+IntToStr(m)+'/'+IntToStr(y) ;
end ;

//Запрос на показ диапазона между 2 датами
Data_Module_0.ADOQuery_Priem.Close;
Data_Module_0.ADOQuery_Priem.SQL.Clear;
Data_Module_0.ADOQuery_Priem.SQL.Text := 'SELECT * FROM Priem WHERE Priem.Data_Priem between #' + DateToSQLStr(DateTimePicker1.Date) + '# and #' + DateToSQLStr(DateTimePicker2.Date) +'#';
Data_Module_0.ADOQuery_Priem.ExecSQL;
Data_Module_0.ADOQuery_Priem.Open;
Мне нужно добавить вот это условие, но как я не понимаю...
Код:
    with Data_Module_0 do Begin
 ADOQuery_Spr_Uslygi.Close;
 ADOQuery_Spr_Uslygi.SQL.Clear;
 ADOQuery_Spr_Uslygi.SQL.Add('Select * from Uslugas where Usluga like'''+'%'+Edit_Search.text+'%'+'''');
 ADOQuery_Spr_Uslygi.Open;
 end;

Последний раз редактировалось Never74; 18.12.2011 в 08:37.
Never74 вне форума Ответить с цитированием
Старый 18.12.2011, 09:17   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
С датами по диапазону получилось вот так и работает
ну и плохо получилось... Хотя, конечно, воля Ваша, но я бы очень рекомендовал использовать ПАРАМЕТРИЧЕСКИЙ запрос (это запрос, где даты передаются как параметры)
да. и строчку с ExecSQL надо ОБЯЗАТЕЛЬНО УБРАТЬ! Это ошибка!

Цитата:
Мне нужно добавить вот это условие, но как я не понимаю...
да очень просто.
Скорее всего, Вам нужно все записи, где дата попадает в диапазон И услуга имеет подстроку, совпадающую с заданной в Edit_Search...

если изменять тот запрос, что уже есть у Вас, то это будет выглядеть примерно так:
Код:
Data_Module_0.ADOQuery_Priem.Close;
Data_Module_0.ADOQuery_Priem.SQL.Clear;
Data_Module_0.ADOQuery_Priem.SQL.Text := 'SELECT * FROM Priem WHERE Priem.Data_Priem between #' + DateToSQLStr(DateTimePicker1.Date) + '# and #' + DateToSQLStr(DateTimePicker2.Date) +'#';
if Trim(Edit_Search.text)<>'' then
    Data_Module_0.ADOQuery_Priem.SQL.Add(' and Usluga like '+QuotedStr('%'+Edit_Search.text+'%'));
Data_Module_0.ADOQuery_Priem.Open;
хотя, я бы всё таки даты передавал как параметры!

и подучите SQL - полезная штука, пригодится в жизни...

p.s. оп-с.. ничего не выйдет! Ведь у Вас выборка ИЗ РАЗНЫХ таблиц!
Нужно знать структуру таблиц и каким образом связаны таблицы Priem и Uslugas - иначе запрос выдаст ошибку. ведь в таблице Priem нет поля Usluga

Последний раз редактировалось Serge_Bliznykov; 18.12.2011 в 09:21.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.12.2011, 11:45   #6
Never74
Пользователь
 
Регистрация: 06.07.2011
Сообщений: 20
Вопрос

Serge_Bliznykov, огромное тебе спасибо! +1.

Данный код работает на ура
Код:
Data_Module_0.ADOQuery_Priem.Close;
Data_Module_0.ADOQuery_Priem.SQL.Clear;
Data_Module_0.ADOQuery_Priem.SQL.Text := 'SELECT * FROM Priem WHERE Priem.Data_Priem between #' + DateToSQLStr(DateTimePicker1.Date) + '# and #' + DateToSQLStr(DateTimePicker2.Date) +'#';
if Trim(Edit_Search.text)<>'' then
    Data_Module_0.ADOQuery_Priem.SQL.Add(' and Usluga like '+QuotedStr('%'+Edit_Search.text+'%'));
Data_Module_0.ADOQuery_Priem.Open;
Извини, забыл исправить код. ADOQuery_Spr_Uslygi это вообще у меня справочник, а само поле Usluga в ADOQuery_Priem имеется
Never74 вне форума Ответить с цитированием
Старый 18.12.2011, 13:52   #7
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Специально для ТС
Код:
DateToSQLStr(DateTimePicker1.Date)
В запросах так делать нельзя. Ибо пользователь меняет системные настройки даты и ваша программа нагибается.
Параметры о которых вам уже говорили.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выборка между датами!(between) Alex Jordan БД в Delphi 2 31.05.2011 19:37
интервал между датами andrenisimus БД в Delphi 8 28.10.2010 14:05
Разница между датами kykysya Общие вопросы Delphi 8 26.03.2009 18:22
Разница между датами deenka БД в Delphi 3 31.01.2008 13:21