Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как сравнить с датой


Автор: Zero 12.4.2005, 17:28
Мне нужен только пример.
Пусть есть таблица в которой один атрибут, с типом дата/время.
Скажите как создать запрос чтобы, по определённой дате вывести строку с этой датой, а то когда я пишу так:
Код

SELECT Дата
FROM Таблица1
WHERE Дата=#04/04/2006 10:47:53#;

то ни хрена не правильно выводится. smile Уже целый час мучаюсь непонятно с чем, что казалось можно сделать бы за 1-ну минуту.
Точнее сказать ничего не выводится, а дата в точности совпадает с той которая у меня в таблице.
Добавлено @ 17:31
Работаю в MS Access. Интересно кого в эту фирму только не понабрали. smile

Автор: SPrograMMer 12.4.2005, 17:44
Zero, дату заключай в апострофы.
Да и отдельно от веремени, хотя с Access`ом я не работал, может и вместе усё моно. smile

Автор: Zero 13.4.2005, 07:35
Цитата(SPrograMMer @ 12.4.2005, 17:44)
хотя с Access`ом я не работал

Вот именно. smile
Добавлено @ 07:35
Короче апострофу однозначно не подходят.

Автор: DimW 13.4.2005, 07:58
Zero- как я тебя понимаю... ты наткнулся на тот камень на который я наткнулся года 1,5 назад...

как можно избежать таких проблем в будушем:

тип датавремя в БД (Access) можно представить как тип Real- 02540,215 где челая часть это дата, а дробная время.

в своей таблице, для даты создаешь поле типа int, а записывать будешь так:

Table1.insert;
Table1.FieldByName('My_Date').AsInteger:=Trunc(Real(Date));
Table1.Post;

а извлекать так:

var
st:string;
------------------
st:=DateToStr(Date(Table1.FieldByName('My_Date').AsFloat));

согласись как будет удобно писать такой запрос:

SELECT Дата
FROM Таблица1
WHERE Дата=10254;

Ну а записать вместо даты(int) время(Real), думаю тебе не составит труда. smile



Автор: Dimich 13.4.2005, 10:01
Интересно, а если выполнить так:
Код
SELECT Дата
FROM Таблица1
WHERE Дата>#04/04/2006 10:47:52#
  AND Дата<#04/04/2006 10:47:54#;

Он выберет чего нибудь?

З.Ы. Просьба не считать это методом решения, просто мне интересно знать.

Автор: Zero 13.4.2005, 14:11
Цитата(Dimich @ 13.4.2005, 10:01)
просто мне интересно знать

Не вывел, ни чего. smile (а что сам не попробывал?) smile
DimW я конечно тоже люблю изобретать велосипеды, точнее часто приходится это делать, но как таковую проблему я решил другим способом, за место даты я сравнивал с одновременно 2-мя другими полями, и результат вроде тот же. А этот вопрос у меня просто остался не завершённым, и я хотел бы узнать обьяснения от того кто понимает причину по которой происходит такая штука. И как непосредственно нужно сравнивать с датой.
А на счёт замены типа дата время полями (int, real) мне кажется это не лучший способ, ИМХО проще будет текстовый тип использовать, ом и понятнее будет.
И кстати, как это ты интересно представляешь вот такое число 02540,215 в виде даты? Я когда читал про типы, то помню там было написано, что он представляется вещественным числом, а потом каким-то алгоритмом переводится во время, тока там алгоритм перевода (в Фаронове) не был приведён. smile А ты знаешь каким образом это делается? smile

Автор: DDX 13.4.2005, 14:33
Zero
вот сейчас в акцессе попробовал:
Код

SELECT table1.field1, table1.field2, table1.field3 
FROM table1 WHERE (((table1.field2)=#4/13/2005 15:39:25#));


ищет вообще без проблем, тип поля field2 - DateTime, ищет на ура
З.ы. ты уверен, что ищешь дату за 2006 год? (ну, так, уточнил)

это ищет в самом access, щас попробую в дельфях


WinXP SP 2, Access 2003, D6

Автор: Zero 13.4.2005, 14:59
smile smile smile Да, точно... Я понял в чём вся хрень то было, Access день и месяц местами то переставляет.
Теперь всё нормально. smile smile
Спасибо DDX, всё тут я понял. smile
Цитата(DDX @ 13.4.2005, 14:33)
З.ы. ты уверен, что ищешь дату за 2006 год? (ну, так, уточнил)
А это было без разници, это я в качестве примера от балды вводил, у меня там в таблице и за 3000-ый год даты присудствуют. smile

Автор: DimW 13.4.2005, 15:16
Цитата
Я когда читал про типы, то помню там было написано, что он представляется вещественным числом, а потом каким-то алгоритмом переводится во время, тока там алгоритм перевода (в Фаронове) не был приведён.  А ты знаешь каким образом это делается? 


Туда и обратно:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
f:real;
begin
f:=Real(now);
Label1.Caption:= FloatToStr(Real(now));
Label2.Caption:= DateTimeToStr(TDateTime(f));
end;


Цитата
ИМХО проще будет текстовый тип использовать, ом и понятнее будет.


ды както некрасиво с текстовым полем делать операции типа BETWEEN, <=, >=, <, >!!!!

Автор: DDX 13.4.2005, 15:54
Цитата(Zero @ 13.4.2005, 14:59)
Access день и месяц местами то переставляет


Цитата(Zero @ 12.4.2005, 17:28)
WHERE Дата=#04/04/2006 10:47:53#;


у тебя и там, и там 4 smile

Автор: Zero 13.4.2005, 20:34
Цитата(DDX @ 13.4.2005, 15:54)
у тебя и там, и там 4

Блин, да хрен её знает... У меня всегда так бывает, что когда сам что-нибудь делаю то не работает, а когда кто-нибудь, что-нибудь покажет, то заработает. smile
А прикинь какая фигня DDX, только что попробывал свой код который вначале был воткнуть, и теперь всё работает, а да этого когда писал не работало... smile И хрен его знает почему. smile

Автор: offline 14.4.2005, 00:35
Я однажды тоже с датами парился. ввожу даьу в Access все работает, а ввожу ее через запрос в Delphi так итог такой, что этой даты нет. Пришлось выкручиваться следуюшим образом, может пригодиться.
В запросе поле даты менял на строковую переменную (WHERE Str([Date])='01.12.3000'), а затем уже подсовыват данные не как дата, а как обыкновенная строка и все работало отлично smile

Автор: Guest 14.4.2005, 11:33
Zero
бывает..

Автор: DDX 14.4.2005, 18:08
Zero
бывает

Автор: Medved 15.4.2005, 00:52
Для передачи значений в SQL запрос рекомендуется использовать параметры, Они для этого и существуют.

Автор: Петрович 15.4.2005, 02:35
Цитата(Pegas @ 15.4.2005, 01:52)
Для передачи значений в SQL запрос рекомендуется использовать параметры, Они для этого и существуют.

Во во. И нечего мозги себе засорять знаниями о том как в какой БД дата записывается smile.
В общем, почитайте это http://vingrad.ru/DELPHI-DLP-001424 и это: http://forum.vingrad.ru/index.php?showtopic=36288&st=0&#entry272402

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)