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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.10.2009, 20:03   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Проверка даты. Firebird

Всем привет! Возник вопрос о проверке вхождения даты в указанный интервал дат. Ситуация такая. Есть две даты: начальная и конечная и есть четверть. Например, I четверть, 01.09.2009-04.09.2009, а II четверть на 07.09.2009-13.09.2009. Из sDateEdit-a я выбираю дату. Если я выбираю даты с 01.09.2009 по 04.09.2009, то все нормально работает. Выбранная дата находится в заданном диапозоне. А вот если я выбираю такую например даты 05.09.2009, то появляется ошибка: "Could not convert variant of type (Null) into type (String)". Вопрос вот в чем: как сделать проверку на вхождение даты в диапозон дат и чтобы если выбранная дата не входит(не соответствует) указанному диапозону, то не появлялась бы ошибка, а вместо нее, например, выводилось сообщение типа "Выбранная дата не входит в указанный диапозон I четверти. Выбранная дата соответствует II четверти". Как??
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.10.2009, 11:24   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

А можно увидеть ка ты это делаеш?
потом эта ошибка вроде указывает что невозможно конвертировать "пусто" в строку. В общем мне кажется, что ты гдето используеш DateToStr() а в качестве параметра передаёш пустое значение

Последний раз редактировалось vovk; 18.10.2009 в 11:28.
vovk вне форума Ответить с цитированием
Старый 18.10.2009, 11:57   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Вот собственно говоря код:
Код:
procedure TForm1.sDateEdit1Change(Sender: TObject);
begin
 Form1.pFIBQuery1.SQL.Clear;
 Form1.pFIBQuery1.SQL.Text:='SELECT CHETVERT,DATASTART,DATAEND FROM CHETVERTY WHERE :Mydate BETWEEN DATASTART AND DATAEND';
 Form1.pFIBQuery1.ParamByName('Mydate').Value:=Form1.sDateEdit1.Date;
 Form1.pFIBQuery1.ExecQuery;

 Form1.sWebLabel5.Caption:=Form1.pFIBQuery1.FieldByName('CHETVERT').Value;
 Form1.sWebLabel7.Caption:=DateToStr(Form1.pFIBQuery1.FieldByName('DATASTART').AsDate) + ' - ' +
                           DateToStr(Form1.pFIBQuery1.FieldByName('DATAEND').AsDate);
 Form1.sWebLabel9.Caption:=DateToStr(Form1.sDateEdit1.Date);
end;
Происходит выборка названия четверти, даты начала, даты окончания. Проверяется какая четверть входит в указанный диапозон дат. Что касается моего вопроса так нужно сделать так, чтобы если я выбрал дату, которая не относится к первой четверти (см. пост №1) и не находится между начальным и конечным значением даты, то выводилось хотя бы сообщение. Воот.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.10.2009, 12:39   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

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

Последний раз редактировалось vovk; 18.10.2009 в 12:43.
vovk вне форума Ответить с цитированием
Старый 18.10.2009, 12:47   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Может стоит просто вначале проверить входит дата или нет в диапазон и выводить сообщение если нет, а потом только выборку делать?
Можно и так , Но как сделать?
Цитата:
Но в любом случае нужно приготовится что датасет может не содержать записей, и соответственно выводить сообщение.
Немного не понял. Каких именно записей может не содержать? Начальные и конечные диапозоны будут всегда.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.10.2009, 13:45   #6
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Начальные и конечные диапозоны будут всегда.
это да, но может не быть записей которые должны входить в этот диапазон.

Цитата:
Код:
 Form1.sWebLabel5.Caption:=Form1.pFIBQuery1.FieldByName('CHETVERT').Value;
 Form1.sWebLabel7.Caption:=DateToStr(Form1.pFIBQuery1.FieldByName('DATASTART').AsDate) + ' - ' +
                           DateToStr(Form1.pFIBQuery1.FieldByName('DATAEND').AsDate);
 Form1.sWebLabel9.Caption:=DateToStr(Form1.sDateEdit1.Date);
ведь тут мы чтото требуем из записей датасета (хотя pFIBQuery и не совсем потомок датасет но чтото очень близкое, по крайней мере записи содержит), а ведь он может быть пуст, то есть не содержать записей
vovk вне форума Ответить с цитированием
Старый 18.10.2009, 13:56   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Что ж делать то тогда?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.10.2009, 13:59   #8
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Можно после запроса проверить pFIBQuery на наличие записей, если их нет (записей в смысле), то одно действие , если есть то другое, банальное if then else
у TpFIBDataSet есть функция IsEmpty которая проверяет на наличие записей, у TpFIBQuery такого нет, но есть свойство RecordCount если меньше 1 то записей ку тобиш нет

Последний раз редактировалось vovk; 18.10.2009 в 14:05.
vovk вне форума Ответить с цитированием
Старый 18.10.2009, 14:10   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Код:
if Form1.pFIBQuery1.DataSource.isEmpty then
 //showmessage('пусто');
Как то так что??
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.10.2009, 19:32   #10
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Код:
if Form1.pFIBQuery1.DataSource.isEmpty then
 //showmessage('пусто');
Как то так что??
нет скорее
Код:
if pFIBQuery1.Recordcount < 1 then
ShowMessage('а нету записей')
else
......
......

Последний раз редактировалось vovk; 18.10.2009 в 19:36.
vovk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос в FireBird Gurt87 БД в Delphi 4 01.10.2009 19:40
ERWin 7.3 и FireBird 1.5 Шульц БД в Delphi 1 13.07.2009 12:38
Дерево в FireBird Cerber24 БД в Delphi 9 06.04.2009 20:55
FireBird Д'якон БД в Delphi 2 04.12.2008 11:15
FireBird 1.5.4 Nikola__ БД в Delphi 2 17.11.2008 14:42