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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.04.2010, 22:51   #1
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
Восклицание ADOQuery + SQL-выборка по дате!!!

Не мог понять в чём проблема!!!

Есть таблица из базы данных которая создана в Аксесе, из которой нужно получать даный по дате! Поле ДАТА храниться в формате ДД.ММ.РРРР
Вот код который я использую в Делфи:

Код:
procedure TAReview.Button5Click(Sender: TObject);
var
i :TDateTime;
begin
   i := strtodate(edit4.text);

  datamodule2.DataQuery.Active := false;
  datamodule2.DataQuery.SQL.Clear;
  datamodule2.DataQuery.SQL.Add('select *');
  datamodule2.DataQuery.SQL.Add('from аренда');
  datamodule2.DataQuery.SQL.Add('where дата = '' + i +''');
  datamodule2.DataQuery.Active := true;

end;
Врезультате введьоной в поле даты я получаю сообщение
Несоотвествие типов данных в условии отбора!!!

Пробывал вот просто в аксесе на sql зделать:
Код:
select *
from аренда
where дата = '23.03.2010'
Таже ошибка!!!
Я просто в не понятии что же такое!!! Помогите пожалуйста!!! Очень нужно!!! Заранее огромное спасибо!!!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""

Последний раз редактировалось Stilet; 19.04.2010 в 09:44.
$T@LKER вне форума Ответить с цитированием
Старый 17.04.2010, 23:54   #2
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

где то уже писан на форуме...
формат даты разный...
у вас 23.03.2010, а акцесс хочет видеть 23/03/2010
как решение попробуй
Код:
DateSeparator := '/';
могу ошибаться...
maLoy*508 вне форума Ответить с цитированием
Старый 18.04.2010, 00:28   #3
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Цитата:
Сообщение от maLoy*508 Посмотреть сообщение
где то уже писан на форуме...
формат даты разный...
у вас 23.03.2010, а акцесс хочет видеть 23/03/2010
как решение попробуй
Код:
DateSeparator := '/';
могу ошибаться...

Спасибо!!! Запрос заработал!!! Но в результате я ничего не получаю так как в таблицах базы в поле Дата сама дата храниться именно 23.03.2010 а не как хочет аксес!!! Даже нензаю что теперь делать!!! Заново вносить даные в бд!!!?? Этот процес у меня то автоматизирован но почему же аксес позволяет сохранять дату так как у меня но запросы не работают!!!???
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""
$T@LKER вне форума Ответить с цитированием
Старый 18.04.2010, 01:39   #4
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

у меня нормально работает, видно где то ошибка еще
maLoy*508 вне форума Ответить с цитированием
Старый 18.04.2010, 01:55   #5
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Как по мне то проблема в том что аксес при запросе требует дату формата 15/12/2010!!! В то время как у меня в таблицах в поле Дата которое имеет и формат естественно тоже Дата хранит значение даты как 15.12.2010!!!??? Что мне делать?! Изменить формат хранения даты в Аксесе с 15.12.2010 на 15/12/2010!? Или может я чего то не понимаю?!

Смотрите:

Делаю всё в Аксесе:

<I>поле Дата, тип данных - Дата/время, формат поля - Краткий формат даты.
</I>

У меня в таблице в даном поле дата записана как 15.12.2010

На SQL`е пишу

<I>
SELECT *
FROM аренда
WHERE дата=15.12.2010;</I>

Выдаёт ошибку несоотвествие типов данных в условии отбора!!!
Мне дали совет(не здесь)! Я изменил запрос:
<I>
SELECT *
FROM аренда
WHERE дата=23/03/2010;
</I>

Ошибки нет!!! Но врезультате я ничего неполучаю!!!
Так чего же я не понимаю!!!???
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""

Последний раз редактировалось $T@LKER; 18.04.2010 в 02:40.
$T@LKER вне форума Ответить с цитированием
Старый 18.04.2010, 03:41   #6
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

добавьте символы #
Код:
SELECT *
FROM аренда
WHERE дата=#23/03/2010#;
или же попробуй
Код:
SELECT *
FROM аренда
WHERE дата<#22/03/2010# and дата < #24/03/2010#
и последний вариант
Код:
SELECT *
FROM аренда
WHERE int(дата)=#23/03/2010#

Последний раз редактировалось maLoy*508; 18.04.2010 в 04:10.
maLoy*508 вне форума Ответить с цитированием
Старый 18.04.2010, 11:02   #7
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Код:
SELECT *
FROM аренда
WHERE дата=#23/03/2010#;
Этот помогло спасибо большое!
Теперь есть новая проблема! У меня в программе дата должна выбираться в DateTimePicker но там то в дате используються точки!!! А инспекторе обектов даного компонента я не нашол свойства которое бы за это отвечало!!! Есть ли выход из ситуации?!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""
$T@LKER вне форума Ответить с цитированием
Старый 18.04.2010, 12:10   #8
Hypermaster
Пользователь
 
Аватар для Hypermaster
 
Регистрация: 19.04.2008
Сообщений: 13
По умолчанию

Я сделал все что написано было maLoy*508, ноль RecordCount в выборке!
Может что то в аксесе? формат поля - краткий формат даты, маска 00.00.99;0;_ просто запарился 3 дня ковырюясь с бедой этой!

Пробовал 3 варианта, вот код:
Код:
   'SELECT Кабинет from Расписание WHERE int(ДеньНедели)=#12/04/2010#'; 
    MainADOQ.Open; 
    ShowMessage(inttostr(MainADOQ.RecordCount));

Последний раз редактировалось Stilet; 19.04.2010 в 09:47.
Hypermaster вне форума Ответить с цитированием
Старый 18.04.2010, 12:36   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Уж сколько раз твердили миру - не хотите иметь проблем с датами в запросах - используете параметризированные запросы (запросы с параметроми):
Код:
MainADOQ.Close;
MainADOQ.SQL.Text :=
'SELECT Кабинет from Расписание WHERE int(ДеньНедели)= :pDate1'; 
MainADOQ.Parameters.ParamByName('pDate1').Value:= DateTimePicker1.Date;
MainADOQ.Open;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2010, 12:50   #10
$T@LKER
Форумчанин
 
Аватар для $T@LKER
 
Регистрация: 28.03.2009
Сообщений: 393
По умолчанию

Код:
Уж сколько раз твердили миру - не хотите иметь проблем с датами в запросах - используете параметризированные запросы (запросы с параметроми):
Вы уже второй кто мне это говорит!!! Видать нужно послушать и научиться применять параметры!!! Спасибо за помощь!!! Буду пробывать!!! Не хотелось влазить в эти параметры но видать без них ни как!!!
""Сериалы и компьютерные игры это словно вторая жизнь, которою ты проживаешь, во главе главного героя или персонажа, параллельно своей!""
$T@LKER вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADOQuery SQL запрос по времени, не по дате... Highlander1981 БД в Delphi 1 01.04.2010 01:08
Выборка по дате (ADOQuery) Кас Алина Помощь студентам 6 02.03.2010 14:27
Выборка из списка по дате PIKA4Y Microsoft Office Excel 0 28.01.2010 17:06
выборка по дате vaga Microsoft Office Access 10 11.10.2009 04:21
ADOQuery.SQL skymaster Общие вопросы Delphi 1 15.06.2009 20:27