Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка в запросе при работе с датой 
:(
    Опции темы
FlyingHome
Дата 1.2.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Всем привет, нужна ваша помощь smile Имеется локальная БД (Paradox), способ доступа - BDE. БД состоит из единственной таблички. На форме есть компонент CheckListBox, в котором проставлены 12 месяцев. При нажатии на кнопку формируется динамический запрос в БД, который возвращает сотрудников, улетающих в отпуск в указанных месяцах. 
Код

dbQuery.SQL.Clear;
dbQuery.SQL.Text:='select * from mems where';
for i:=0 to CheckListBox1.Items.Count-1 do
if CheckListBox1.Checked[i] then
begin
dbQuery.SQL.Add('Date_flight between '+chr(39)+'01.'+inttostr(i+1)+'.2009'+chr(39)+' and '+chr(39)+'31.'+inttostr(i+1)+'.2009'+chr(39));
dbQuery.SQL.Add('OR');
end;
dbQuery.SQL.Delete(dbQuery.SQL.Count-1);
dbQuery.SQL.Add('order by FIO');
memo1.Text:=dbQuery.SQL.Text;
dbQuery.Open;

на основании чего формируется динамический SQL-запрос в зависимости от отмеченных меясцев, например:
Код

select * from mems where
Date_flight between '01.1.2009' and '31.1.2009'
OR
Date_flight between '01.2.2009' and '31.2.2009'
OR
Date_flight between '01.4.2009' and '31.4.2009'
OR
Date_flight between '01.6.2009' and '31.6.2009'
OR
Date_flight between '01.7.2009' and '31.7.2009'
OR
Date_flight between '01.8.2009' and '31.8.2009'
order by FIO

Суть в том, что этот запрос работает очень странно. Для некоторых месяцев работает корректно (например, для марта или июля), при других вызывает ошибку "Type mismatch in expression'. а на третьих вообще "Invalid keyword use  'order' " Некоторых дат в таблице пока не содержится (например, январь, февраль), но запрос на январь работает корректно, а на февраль - ошибка. Мистика smile
Пробовал реализовать запрос через CAST 
Код

select * from mems where
cast (date_flight as char(10)) containing '%.07.%'

говорит "Capability not supported". В общем, нужна ваша помощь smile
Если есть другие предложения по решению вышепоставленной задачи - буду рад выслушать.
PM MAIL   Вверх
Данкинг
Дата 1.2.2009, 15:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



И как, много выбралось сотрудников, улетающих 31-го февраля? smile  smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
FlyingHome
Дата 1.2.2009, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Цитата(Данкинг @ 1.2.2009,  15:37)
И как, много выбралось сотрудников, улетающих 31-го февраля? smile  smile

О таких мелочах пока не думал smile Мелкие штрихи будут исправляться после достижения общей работоспособности проекта smile
PM MAIL   Вверх
Данкинг
Дата 1.2.2009, 17:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(FlyingHome @  1.2.2009,  15:41 Найти цитируемый пост)
О таких мелочах пока не думал

Как мелочи, из-за этого и ошибки вылезать могут.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 1.2.2009, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(FlyingHome @  1.2.2009,  15:31 Найти цитируемый пост)
containing '%.07.%'

используй like

Добавлено через 2 минуты и 45 секунд
Цитата(FlyingHome @  1.2.2009,  15:31 Найти цитируемый пост)
Суть в том, что этот запрос работает очень странно. Для некоторых месяцев работает корректно (например, для марта или июля), при других вызывает ошибку "Type mismatch in expression'. а на третьих вообще "Invalid keyword use  'order' "

Вот и смотри, какой запрос ты отправляешь базе.

Добавлено через 7 минут и 51 секунду
Цитата(Данкинг @  1.2.2009,  15:37 Найти цитируемый пост)
И как, много выбралось сотрудников, улетающих 31-го февраля? smile  smile 


Я в шоке... он про календарь-то хоть знает smile ?
Даю подсказку... посмотри в календарь и ты будешь удивлён  smile , что в июне тоже не 31 день... да и в других месяцах ты напутал, наверняка


Придумай другой способ формирования запроса, можно, например, даты каждого чекбокса держать в свойстве hint.
PM MAIL   Вверх
FlyingHome
Дата 2.2.2009, 05:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 31.1.2009

Репутация: нет
Всего: нет



Всем спасибо, проблема действительно была в наименовании дат (мол, 31.02 не бывает), не думал, что все так серьезно smile
PM MAIL   Вверх
Akella
Дата 2.2.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



 smile
PM MAIL   Вверх
Данкинг
Дата 2.2.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(FlyingHome @ 2.2.2009,  05:24)
Всем спасибо, проблема действительно была в наименовании дат (мол, 31.02 не бывает), не думал, что все так серьезно smile

Вот тебя с утра пораньше озарило!  smile Отметь тему решённой. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Hang
Дата 2.2.2009, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 16.12.2007
Где: Вологда

Репутация: нет
Всего: 3



Код

between '01.1.2009' and '31.1.2009'
 
вроде between не берет границы периода. Здесь наверно надо 
Код

Date_flight>='01.1.2009' and Date_flight<='31.1.2009'


Это сообщение отредактировал(а) Hang - 2.2.2009, 12:11
PM ICQ   Вверх
Данкинг
Дата 2.2.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 35
Всего: 130



Цитата(Hang @  2.2.2009,  12:08 Найти цитируемый пост)
вроде between не берет границы периода.

Да ладно, а зачем тогда такая функция нужна. smile Конечно, не знаю, как на Парадоксе, на на Фоксе выбирается всё нормально, сейчас специально проверил.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Akella
Дата 2.2.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



можно и так и так
PM MAIL   Вверх
Hang
Дата 2.2.2009, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 16.12.2007
Где: Вологда

Репутация: нет
Всего: 3



Цитата(Данкинг @  2.2.2009,  12:29 Найти цитируемый пост)
Да ладно, а зачем тогда такая функция нужна. smile Конечно, не знаю, как на Парадоксе, на на Фоксе выбирается всё нормально, сейчас специально проверил.


Данкинг, согласен с тобой. Сам проверил на access'ой базе - все работает.

Сори ребята, у всех бывает!

Это сообщение отредактировал(а) Hang - 2.2.2009, 17:01
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.