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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2012, 15:49   #1
Kara1989
Пользователь
 
Регистрация: 04.05.2009
Сообщений: 50
По умолчанию не работает SQL запрос ((

Здравствуйте, уважаемые прогеры!
Наткнулся с одной проблемой, связанной с параметрическим запросом.
При фильтрации данных программа выдает такую ошибку:
"Несоответствие типов данных в выражении условия отбора". Думаю, что вся проблема связана с датами. Хотелось бы чтоб, фильтрация осуществлялась и при выборе 1 из 2 дат.
Помогите с решением данной проблемы, уже полдня голову ломаю над ней
Заранее спасибо за отклик!

p.s.: исходник проекта выложил
Вложения
Тип файла: rar БД.rar (340.0 Кб, 8 просмотров)
Kara1989 вне форума Ответить с цитированием
Старый 07.08.2012, 17:02   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

SQL запрос в вашем случае будет выглядеть следующим образом
Код:
SELECT * FROM Sotrudniki WHERE (((Fam Like :A) and (Imya Like :B) and (Otch Like :C) and (DRZh between :D and :E))) Order by Fam;
Однако обратите внимание что дата в аксесе должна задачаться следующим видом
2007/08/24 => Year/Month/Day

А вообще запросы перед вставкой в код проще и удобнее отлаживать в самом аксесе. Там наглядно будет видно где ошибка.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.08.2012, 07:18   #3
Kara1989
Пользователь
 
Регистрация: 04.05.2009
Сообщений: 50
По умолчанию

Код:
Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Clear;
Form1.ADOQuery1.SQL.Add('SELECT * FROM Sotrudniki WHERE (((Fam Like :A) and (Imya Like :B) and (Otch Like :C) and (DRZh >= :D) and (DRZh <= :E))) Order by Fam');
If Length(Form1.Edit1.Text) <> 0 then Form1.ADOQuery1.Parameters.ParamByName('A').Value:='%'+Form1.Edit1.Text+'%' else Form1.ADOQuery1.Parameters.ParamByName('A').Value:='%';
If Length(Form1.Edit2.Text) <> 0 then Form1.ADOQuery1.Parameters.ParamByName('B').Value:='%'+Form1.Edit2.Text+'%' else Form1.ADOQuery1.Parameters.ParamByName('B').Value:='%';
If Length(Form1.Edit3.Text) <> 0 then Form1.ADOQuery1.Parameters.ParamByName('C').Value:='%'+Form1.Edit3.Text+'%' else Form1.ADOQuery1.Parameters.ParamByName('C').Value:='%';
if Form1.DateTimePicker1.Format <> ' ' then Form1.ADOQuery1.Parameters.ParamByName('D').Value:=Form1.DateTimePicker1.Date else Form1.ADOQuery1.Parameters.ParamByName('D').Value:='%';
if Form1.DateTimePicker2.Format <> ' ' then Form1.ADOQuery1.Parameters.ParamByName('E').Value:=Form1.DateTimePicker2.Date else Form1.ADOQuery1.Parameters.ParamByName('E').Value:='%';
Form1.ADOQuery1.Open;
Запрос в данном случае,если выбрать обе даты, работает нормально, при выборе одной из дат или при пустом DateTime выходит подобная ошибка.
"Несоответствие типов данных в выражении условия отбора"
Хотелось бы чтоб, фильтрация осуществлялась и при выборе 1 из 2 дат.
Kara1989 вне форума Ответить с цитированием
Старый 10.08.2012, 08:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

огорчу Вас. Так не получится.
подстановочный знак '%' допустим исключительно в операторах LIKE со строками.
для даты (тем более для операции "больше-равно" / "меньше-равно") такое SQL не позволяет.

решение. либо формировать строку запрос "на лету" в зависимости от того, пустые даты выбраны или нет,
либо передавать в качестве параметра D дату, ЗАВЕДОМО меньшую, чем любая в таблице (например, 1.1.1900),
а в качестве параметра E - заведомо БОЛЬШУЮ, чем любая в таблице (например, 1.1.2345)


p.s. меня мучают смутные сомнения...
а разве в стандартном timedatepicker можно задать ПУСТУЮ дату?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.08.2012, 10:31   #5
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

держи
обрати внимание на изменения
P.S. в решении частично учтены подсказки WorldMaster и Serge_Bliznykov
Вложения
Тип файла: rar БД.rar (19.1 Кб, 9 просмотров)
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...

Последний раз редактировалось Yurk@; 10.08.2012 в 10:34.
Yurk@ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
SQL запрос не работает Ol'K@ БД в Delphi 8 03.09.2011 09:04
Не работает SQL запрос Всеслав БД в Delphi 8 27.05.2009 20:09
Не работает MS-SQL-запрос pkv БД в Delphi 7 01.11.2007 14:32
Не работает SQL запрос EVG44 БД в Delphi 4 21.10.2007 22:28
sql запрос работает неверно :( Vasya БД в Delphi 4 26.08.2007 14:59