|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Проблема с выборкой по дате!
Господа вразумите меня неразумного!!! надо сделать выборку по полю содержашему дату рождения в формате dd.dd.dddd надо найти и показать тех кому на данный момент времени исполнилось к примеру 18 лет. Как это сделать???
|
#2
|
|||
|
|||
можно в запросе дописать where или используй фильтр
|
#3
|
|||
|
|||
В запросе пишешь условие с параметром, например:
Код:
SELECT... WHERE DOB >= :date18 В программе для этого запроса ставишь заполнение этого параметра: Код:
Query1.ParamByName('date18').AsDateTime := IncYear(Date,-18); |
#4
|
|||
|
|||
а если у него динамеческое число?) а не статическое )
|
#5
|
|||
|
|||
А что есть IncYear(у меня делфи на неё ругаеться)??? это переменная или нечто другое если переменная то какого типа она должна быть??? Date???
|
#6
|
|||
|
|||
а как в фильтре вставить дату? у меня есть дата в виде Date1:TDate и как ее в Filter записать? (поле DateNext) типа Filter:=' DateNext<' + vartostr(Date1) ; но это почему-то не работает
как дату загнать в фильтр? спасибо |
#7
|
|||
|
|||
Цитата:
подключи модуль DateUtils (кажется так, глянь по справке). |
#8
|
|||
|
|||
Цитата:
Закавычить не пытался? Хотя там может потребоваться вставлять ее в ANSI SQL формате, т.е. DD-MMM-YYYY (типа: 19-JAN-2009). |
#9
|
||||
|
||||
Использовать фильт - моветон. Юзайте событие OnFilterRecord
Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#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
|
|||
|
|||
Ну так поменяй местами строки 3 и 4. Параметр указан в запросе, а ты сначала пытаешься ему значение присвоить, а потом уже создать.
|
#12
|
|||
|
|||
Цитата:
теперь образовалась другая проблема. если использовать: Код:
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
|
|||
|
|||
можно ведь проследить только 18
if n = 18 then ...<вывод> где n возраст, который надо точно получить по дате.. |