Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Вниз

Поле   Найти похожие ветки 

 
Shved   (2002-12-02 13:12) [0]

Имеется таблица. Формирую 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-02 13:20) [1]

Значения надо взять в кавычки... в твоем случае это выглядит так...
Form1.Query.SQL.Add("WHERE "DAY" BETWEEN """+FirstDay+""" and """+SecondDay+""");
Это все одинарные кавычки... но ИМХО лучше сделать так...

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");
try
Query.ParamByName("FirstDay").AsDate := StrToDate(FirstDay);
Query.ParamByName("SecondDay").AsDate := StrToDate(SecondDay);
except
/// Хреновая дата....
end;
Form1.Query.Open;




 
ЮЮ   (2002-12-02 13:21) [2]

Если пихать дату непосредственно в запрос, то, ао синтаксису, она должна быть обрамлена кавычками. А чтобы не зависеть от формата даты, лучше использовать в запросе параметры


 
Shved   (2002-12-02 14:15) [3]

Спасибо. А по поводу форматов "D" и "@" что скажете? Что лучше и почему?


 
Shved   (2002-12-02 14:32) [4]

А тот код, что вы предложили - не работает. Пишет, что неправильный формат даты. Какой формат должен быть, если атрибут поля "D", а формат записей в поле DD.MM.YY?


 
Max Zyuzin   (2002-12-02 14:34) [5]

Ну вообще то, формат должен быть такой как в системе...


 
Shved   (2002-12-02 14:40) [6]

Все равно не помогает. Присваивал переменным FirstDay и SecondDay разные значения: DD.MM.YY, DD.MM.YYYY, DD.MM. Ошибка всегда одна и та же. В системе стоит формат DD.MM.YY.
Может быть, есть другой способ выборки по дате? Если у кого есть - киньте кусок кода, пожалуйста. Ну а если нет, то хоть подсоветуйте...


 
Max Zyuzin   (2002-12-02 14:48) [7]

А где именно выдает ошибку???
Query.ParamByName("FirstDay").AsDate := StrToDate(FirstDay);
Здесь?


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

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


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

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


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

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


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

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


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

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


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

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

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


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

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

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


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

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


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

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


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

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


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

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


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

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


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

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


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

Можно попробовать и без 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;
...


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


 
Mirolex   (2002-12-03 15:03) [22]

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

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


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

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


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

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


 
ShuraGrp   (2002-12-03 16:12) [25]

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)


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

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

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


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

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



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2002.12.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.01 c
1-74705
DVM
2002-12-13 17:47
2002.12.23
PopupMenu для элементов управления созданных в RunTime


4-75059
EthernalWonderer
2002-11-08 18:08
2002.12.23
Активность пользователя


14-74908
Феликс
2002-11-30 21:49
2002.12.23
Альтернатива Mediaplayer?


14-74889
Masa
2002-12-03 21:20
2002.12.23
Подскажите где взять Fast Report последний или пароль к архиву.


8-74845
Юрий К
2002-09-06 02:01
2002.12.23
Воспроизведение аудио файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский