Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 18.01.2009, 19:45
Studend Studend вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 10
Репутация: 10
Вопрос Проблема с выборкой по дате!

Господа вразумите меня неразумного!!! надо сделать выборку по полю содержашему дату рождения в формате dd.dd.dddd надо найти и показать тех кому на данный момент времени исполнилось к примеру 18 лет. Как это сделать???
Ответить с цитированием
  #2  
Старый 18.01.2009, 23:05
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

можно в запросе дописать where или используй фильтр
Ответить с цитированием
  #3  
Старый 19.01.2009, 00:58
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В запросе пишешь условие с параметром, например:

Код:
SELECT...
WHERE DOB >= :date18

В программе для этого запроса ставишь заполнение этого параметра:

Код:
  Query1.ParamByName('date18').AsDateTime := IncYear(Date,-18);
Ответить с цитированием
  #4  
Старый 19.01.2009, 01:20
жекаизжека жекаизжека вне форума
Начинающий
 
Регистрация: 10.09.2008
Сообщения: 193
Репутация: 10
По умолчанию

а если у него динамеческое число?) а не статическое )
Ответить с цитированием
  #5  
Старый 19.01.2009, 06:31
Studend Studend вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 10
Репутация: 10
По умолчанию

А что есть IncYear(у меня делфи на неё ругаеться)??? это переменная или нечто другое если переменная то какого типа она должна быть??? Date???
Ответить с цитированием
  #6  
Старый 19.01.2009, 17:26
MishaLukash MishaLukash вне форума
Прохожий
 
Регистрация: 26.10.2006
Сообщения: 10
Репутация: 10
По умолчанию

а как в фильтре вставить дату? у меня есть дата в виде Date1:TDate и как ее в Filter записать? (поле DateNext) типа Filter:=' DateNext<' + vartostr(Date1) ; но это почему-то не работает
как дату загнать в фильтр?
спасибо
Ответить с цитированием
  #7  
Старый 19.01.2009, 17:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Studend
А что есть IncYear(у меня делфи на неё ругаеться)??? это переменная или нечто другое если переменная то какого типа она должна быть??? Date???

подключи модуль DateUtils (кажется так, глянь по справке).
Ответить с цитированием
  #8  
Старый 19.01.2009, 17:44
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от MishaLukash
а как в фильтре вставить дату? у меня есть дата в виде Date1:TDate и как ее в Filter записать? (поле DateNext) типа Filter:=' DateNext<' + vartostr(Date1) ; но это почему-то не работает
как дату загнать в фильтр?
спасибо

Закавычить не пытался?
Хотя там может потребоваться вставлять ее в ANSI SQL формате, т.е. DD-MMM-YYYY (типа: 19-JAN-2009).
Ответить с цитированием
  #9  
Старый 19.01.2009, 18:16
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Использовать фильт - моветон. Юзайте событие OnFilterRecord
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #10  
Старый 19.01.2009, 18:44
Studend Studend вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 10
Репутация: 10
По умолчанию

код:
Код:
begin

 Query1.Close;
 Query1.SQL.Clear;
 Query1.ParamByName('date18').AsDateTime := IncYear(Date,-18);
 Query1.SQL.Add('Select * from stud.db WHERE Datro >= :date18');
 Query1.Open;
 Query1.FieldByName('FIO').DisplayLabel:='ФИО';
 Query1.FieldByName('Datro').DisplayLabel:='Дата рождения';
 Query1.FieldByName('Nac').DisplayLabel:='Национальность';
 Query1.FieldByName('Socpol').DisplayLabel:='Социальное положение';
 Query1.FieldByName('PaspN').DisplayLabel:='№ паспорта';
 Query1.FieldByName('Kemvy').DisplayLabel:='Кем выдан';
 Query1.FieldByName('AdrVgor').DisplayLabel:='Адрес в городе';
 Query1.FieldByName('Mespr').DisplayLabel:='Место проживания';
 Query1.FieldByName('Fioma').DisplayLabel:='ФИО метери';
 Query1.FieldByName('fiopa').DisplayLabel:='ФИО отца';
 Query1.FieldByName('Mrma').DisplayLabel:='Место работы матери';
 Query1.FieldByName('Mrpa').DisplayLabel:='Место работы отца';
 Query1.FieldByName('Tel').DisplayLabel:='Телефон';
 Query1.FieldByName('Kurs').DisplayLabel:='Курс';
 Query1.FieldByName('Pr').DisplayLabel:='Присутствие';
 Query1.FieldByName('Prichpr').DisplayLabel:='Причина присутствия';
 Query1.FieldByName('Prots').DisplayLabel:='Причина отсутствия';
 end;

при попытке его использовать выдаёт такую ошибку: "Project Project 1 .exe raised exception class EDatabaseError with message Query 1:Parameter date18 not Found. Process stopped. Use Step or Run to continue.
"
где я туплю??
Ответить с цитированием
  #11  
Старый 19.01.2009, 18:55
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну так поменяй местами строки 3 и 4. Параметр указан в запросе, а ты сначала пытаешься ему значение присвоить, а потом уже создать.
Ответить с цитированием
  #12  
Старый 19.01.2009, 19:06
Studend Studend вне форума
Прохожий
 
Регистрация: 16.01.2009
Сообщения: 10
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну так поменяй местами строки 3 и 4. Параметр указан в запросе, а ты сначала пытаешься ему значение присвоить, а потом уже создать.
блин реально ступил(

теперь образовалась другая проблема.
если использовать:
Код:
 Query1.SQL.Add('Select * from stud.db WHERE Datro <= :date18');
 Query1.ParamByName('date18').AsDateTime := IncYear(Date,-18);

он выводит всех и кому есть 18 и кому уже 19 и более как сделать чтобы он вывел только тех кому восемнадцать не более и не менее???

Последний раз редактировалось Studend, 20.01.2009 в 10:37.
Ответить с цитированием
  #13  
Старый 20.01.2009, 16:41
ApplicatiOn ApplicatiOn вне форума
Активный
 
Регистрация: 28.02.2008
Сообщения: 388
Репутация: -10
По умолчанию

можно ведь проследить только 18

if n = 18 then
...<вывод>

где n возраст, который надо точно получить по дате..
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter