Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поле


Страницы:   1 2

Shved ©   (2002-12-02 13:12:00) 

Имеется таблица. Формирую SQL, чтобы произошла выборка интервала времени, в таком виде:

FirstDay:=Edit1.Text;
SecondDay:=Edit2.Text;
Form1.Query.Close;
Form1.Query.SQL.Clear;
Form1.Query.SQL.Add("select *");
Form1.Query.SQL.Add("FROM "BDAuto.DB" Bdauto");
Form1.Query.SQL.Add("WHERE "DAY" BETWEEN "+FirstDay+" and "+SecondDay);
Form1.Query.Open;
Form1.DBGrid1.DataSource:=Form1.DataSource2;


FirstDay и SecondDay в виде ДД.ММ.ГГ (текст), но при запуске программы вылезает ошибка "Invalid use of keyword "02"" (это год).
Что я не так делаю?
И вообще, в Delphi можно поставить полю атрибут D или @. Оба имеют формат даты, но чем они различаются (только временем?) и почемуо в примерах Delphi используется только формат "@"?
Вобщем, какой формат посоветуете. господа профессионалы и какой формат запроса должен быть?


Max Zyuzin   (2002-12-03 17:47:00) [1]

ЭЭЭэ а что не получилось :) ??


Shved   (2002-12-03 17:21:00) [2]

To Max Zyuzin
Пробовал. Не получилось :)

To ShuraGrp
Надо попробовать. Завтра скажу чего получилось.


ShuraGrp   (2002-12-03 16:12:00) [3]

Form1.Query.SQL.Add("WHERE "DAY" BETWEEN cast("""+:FirstDay+""" as Date) and cast("""+:SecondDay+""" as Date)");
или
WHERE "DAY" BETWEEN cast(:FirstDay as Date) and cast(:SecondDay as Date)


Max Zyuzin   (2002-12-03 15:51:00) [4]

>Shved © (03.12.02 15:40)
Ты пробовал тот пример что я написал вчера???
Caption := DateToStr(Now);


Shved   (2002-12-03 15:40:00) [5]

Вобщем, бросил я этой ерундой маяться и использовал DateTimePicker. Однако, вопрос все-таки остается актуальным, раз он такой резонанс вызвал. Так что, все-таки интересно как сделать все "по-правильному".


Mirolex   (2002-12-03 15:03:00) [6]

Для Paradox это известестная фигня при работе с датами.
Для начала, возьми любую программу, которая может выполнять SQL запросы (SQL Explorer из Delphi или Access хотя бы) и напиши этот запрос руками. И поиграй с форматами дат. Когда запрос заработает, тогда и думай как и какие параметры подставлять.

У меня сейчас нет времени, беге на работу, но можешь прислать мне email, а я посмотрю в исходниках (у меня точно есть такие запросы в старых программах).


DN   (2002-12-03 11:20:00) [7]

Можно попробовать и без SQL:
(поле в базе в формате DATA, для ввода используется MaskEdit)
...
if MaskEdit1.Enabled = True then
begin
if MaskEdit1.Text<>" . . " then
begin
Table1.IndexFieldNames:="DateNPA";
Table1.FindKey([StrToDate(MaskEdit1.Text)]);
end
else
if MaskEdit1.Text =" . . " then
ShowMessage("Отсутствуют данные для поиска.");
end;
...


Что-то вроде этого.


LSW   (2002-12-03 08:57:00) [8]

Попробуй сделать рестуктуризацию таблицы и поле DAY измени на поле, к примеру DAY_1 и попробуй все выше сказанное.


Max Zyuzin   (2002-12-02 22:08:00) [9]

Тады одназначно попробуй DateTimePicker, он уже возвращяет значение типа TDateTime и не надо заморачивать голову... как преобразовать строку в дату...


Shved   (2002-12-02 22:06:00) [10]

Ось там Win98. Но надо будет делать с учетом переноса в сеть, а в сети почти все компы под Win2000, так что все равно надо учесть.
Проверить сейчас не могу, т.к. все на работе, так что только завтра. А за код заранее спасибо.


Max Zyuzin   (2002-12-02 21:58:00) [11]

>Shved © (02.12.02 20:24)
А ОС какая? Случаем не Win2k англ.?
Попробуй ради эксперимента сделать такую хрень...
Caption := DateToStr(Now);
И посмотри что получится... это у тебя и будет формат данных в системе... что что мне говорит, что будет что нить вроде 02/12/2002
С такой шуткой я уже сталкивался. Не смотря на то, что у тебя в панели управления написано что фомат через точки... Лечилось это установкой региональных сеттингов сначала в англ., а потом назад в русский.
А куска кода с собой нету :( только завтра... если не забуду :)


Shved   (2002-12-02 20:24:00) [12]

База Paradox. Delphi 5.
А ни у кого нет готового куска кода с выборкой по дате на Paradox? Буду очень признателен.


Max Zyuzin   (2002-12-02 19:25:00) [13]

>Shved © (02.12.02 19:17)
Так... давай определимся какая у нас СУБД... Ibase или Paradox?
А если у тебя автоматчески переводится, может попробовать вводить дату в таком же формате? Хотя лучше пользоваться DateTimePicker-ом


Max Zyuzin   (2002-12-02 19:22:00) [14]

>Anatoly Podgoretsky © (02.12.02 18:42)
Хотя, с другой стороны - какая разница какой формат даты у IB??
Я ведь работу с датай заканчиваю на клиенте, где ее из текста преобразую в дату, а она уже везде одинаковая....

Совет Shved © - забудь про ввод даты в Edit и пользуйся DateTimePicker-ом... тогда все будет проще..., и НАМНОГО удобнее для пользователя....
Query.ParamByName("FirstDay").AsDateTime := DateTimePicker1.DateTime;


Shved   (2002-12-02 19:17:00) [15]

Текст запроса я привел выше. FirstDay и SecondDay читаются из Edit1 и Edit2 соответственно. Запрос отправляется в TQuery, который привязан к DGrid.

Я вот еще посмотрел в SQL-editor"e автоматически изменяется строка запроса типа "02.12.02" на "12/02/2002". Отсюда, может быть формат даты и нужно писать какк-то так? Но опять же, ошибка...
Что вам еще нужно знать для точного ответа на мой вопрос?


Anatoly Podgoretsky   (2002-12-02 18:42:00) [16]

Может быть, не знаю, но настройки то клиентского компьютера тут явно не причем, другое дело с параметрами.


Max Zyuzin   (2002-12-02 18:37:00) [17]

Anatoly Podgoretsky © (02.12.02 18:25)
Ну вроде как в IB по умолчанию стоит DD.MM.YYYY ??


Anatoly Podgoretsky   (2002-12-02 18:25:00) [18]

Max Zyuzin © (02.12.02 14:34)
Если для ИБ то это не так, ему будет наплевать на формат системы, для Парадокса другое дело


Max Zyuzin   (2002-12-02 16:19:00) [19]

Давайте по порядку... пожалуйста привели полность текст запроса, которй хочешь выполнить... и типы полей.
А пробовал ли ты это дело выполнить просто в IBExpert?


Shved   (2002-12-02 15:16:00) [20]

Ошибка в выполнении SQL (перескакивает на следующую процедуру). Пишет "Type mismatch in expression". Я так понимаю, что он не хочет переводить данные из Edit1 и Edit2 в формат даты. Я ввожу примерно так: "03.12.02" и "05.12.02". Формат такой же, как в системе, разделитель точками... Уже руки опускаются даже... Что это за беда такая?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо