![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поле
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". Формат такой же, как в системе, разделитель точками... Уже руки опускаются даже... Что это за беда такая?