Страницы: 1 2 вся ветка
Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Вниз

Как сделать ледующую фильтрацию. 


vopros   (2002-03-29 10:59) [0]

Надо показать тех работников у которых сегодня день рождение.



Alexandr   (2002-03-29 11:01) [1]

ответ:
используй SQL



vopros   (2002-03-29 11:17) [2]

Через SQL я знаю. Надо через Ttable. Мне в чужую прогу только фльтрацию вставит. А изменять ее существенно не хочется.



Anatoly Podgoretsky   (2002-03-29 11:39) [3]

OnFilter



Alexandr   (2002-03-29 11:41) [4]

в OnfilterRecord
Accept:=FieldByname("data").asDate=Date



IPisk   (2002-03-29 11:42) [5]

Используй OnFilterRecord
Сравнивай поле даты рождения с Date и Accept:=true
else Accept:=false;

и еще Filtered:=true; для этой таблицы



vopros   (2002-03-29 11:52) [6]

Alexandr © (29.03.02 11:41)
И с какой датой сравнивать?
Сегодня 29.03.2002 а дни рождения
29.03.1950....и так далее. Есть "29.03." нужен символ типа * который заменяет все значения.

А на SQL
Select *
from table
where date_born Like "29.03.%"
Тоже не фига не показывает.Вчем проблема?



Val   (2002-03-29 11:59) [7]

используйте decodedate для выделения дня и месяца и в фильтре проверяйте на соответствие



Fareader   (2002-03-29 12:00) [8]

А так

Accept:=(FieldByname("data").asDate>=strtodate("29.03.1900"))and(FieldByname("data").asDate<=date)

Или у вас кто постарше есть :)



vopros   (2002-03-29 12:05) [9]

>Val
Decodedate и использую...выделил на какое соответсвие проверять...все года что ли в фильтре через OR прогонять?ТУПО.
>Fareader © (29.03.02 12:00)
Что в этом коде он даст всех работников...но проверю на всякий случай...
А по поводу SQL почему Like "%" показвает все записи делаю..
"29.03.%" не хрена нет хотя точно есть.



vopros   (2002-03-29 12:08) [10]

Кстати делаю Like "29%"-показывает всех людей у которых 29 дни рождения....а как точку ставлю "29.%" ни хрена не показывает.



gek   (2002-03-29 12:15) [11]

Tbl_t.Indexname:="indx_date";
Tbl_t.SetRange([DateEdit1.Date],[DateEdit2.Date]);

Единственное, что обязан быть индекс



Val   (2002-03-29 12:22) [12]

>vopros © (29.03.02 12:05)
Естественно тупо. поскольку год вам, уважаемый, не нужен совершенно(если юбилеи определять не собрались :)), поскольку день рождения определяется по дню и месяцу
, следовательно, вам их и нужно сравнивать, выбирая из каждой записи и сравнивая с днем и месяцем текущей даты...



vopros   (2002-03-29 12:46) [13]

Люди Вы задачу поняли?
gek (29.03.02 12:15)Опять же выдаст всех у кого дни рождения
с [DateEdit1.Date] по [DateEdit2.Date]).
>Val © (29.03.02 12:22)
Вы читаете мои уточнения? Что сравнивать я заню как сравнивать. Я это и говорил что день и месяц (сегодня) я вытащил..как дальше обработать.
Хоть через SQl фильтр. Помогите. плиз.






VAleksey   (2002-03-29 13:33) [14]

с [DateEdit1.Date] по [DateEdit2.Date]).
не выдаст если DateEdit1.Date = DateEdit2.Date



vopros   (2002-03-29 13:39) [15]

Вы что издеваетесь?
VAleksey (29.03.02 13:33)
с [DateEdit1.Date] по [DateEdit2.Date]).
не выдаст если DateEdit1.Date = DateEdit2.Date
Если не секрет что он выдаст?



Val   (2002-03-29 13:52) [16]

>vopros © (29.03.02 13:39)
вы все-таки что собрались использовать -фйильтр или SQL-запрос?



vopros   (2002-03-29 13:55) [17]

>Val © (29.03.02 13:52)
Хоть что. Хоть фильтр хоть SQL.
Пока ничего не работает.Буду благодарен если подскажете.



Val   (2002-03-29 14:03) [18]

при использовании SQL это совсем просто-в 6 IB есть функции выделения месяца и т.п. из даты, помнится.



vopros   (2002-03-29 14:12) [19]

Val © (29.03.02 14:03)
Проблема не в выделении.
Прблема в том что есть таблица Table1...в ней поля типа TIMESTAMP
Делаю запрос:
SELECT *
FROM TABLE1
WHERE DATE_BORN LIKE "23%"
рЕЗУЛЬТАТ-ПОКАЗЫВАЕТ ЗАПИСИ ВЕРНО ВСЕХ У КОГО 23 ЧИСЛА ДЕНЬ РОЖДЕНИЯ.
Делаю:
SELECT *
FROM TABLE1
WHERE DATE_BORN LIKE "23.%"
Ничего не показывает.
Как рещить проблему?



Wonder   (2002-03-29 14:16) [20]

В timestamp нет никаких точек...



Val   (2002-03-29 14:17) [21]

Вы разве не видите, что ваш пример как раз и говорит о том, что вы неверно выделяете нужные вам значения из даты, поскольку ничего не возвращается.



vopros   (2002-03-29 14:24) [22]

>Val © (29.03.02 14:17)
Причем тут выделения? Ты вообще с SQL знаком?
Я виже перед собой таблицу:
Иванов Петя 29.03.1914
Сидоров Дрон 25.02.1976
Пишу в SQL-builder
SELECT *
FROM TABLE1
WHERE DATE_BORN LIKE "29%"
Все нормально.
Пишу
SELECT *
FROM TABLE1
WHERE DATE_BORN LIKE "29.%"
Ничего не нормально.

>Wonder © (29.03.02 14:16)
Что посоветуешь?



asafr   (2002-03-29 14:27) [23]

Эх! Был бы не IB, а MSSQL, то легко
select * from Table11
where DatePart(Day,Date_)=DatePart(day,getdate())
And DatePart(Month,Date_)=DatePart(month,getdate())

Посмотри Help IB, неужели там нет функций для работы с датами?



Lusha   (2002-03-29 14:27) [24]

>Vopros
Символ "/" вместо точки



Val   (2002-03-29 14:31) [25]

>vopros © (29.03.02 14:24)
Причем тут выделения? Ты вообще с SQL знаком?
:)) чуточку..
Уважаемый, вы видели как IB хранит дату? То что вы видите в таблице-это лишь ее отображение в таком формате.



vopros   (2002-03-29 14:36) [26]

>Lusha © (29.03.02 14:27)
Тоже такая идея была.Пробовал не помогает. Щас буду в helpe
рыться.



roottim   (2002-03-29 14:36) [27]

а чем "вопросу" непонравилось предложение по OnfilterRecord, предложенное ранее...

var
Year, Month, Day :Word;
Year1, Month1, Day1 :Word;
begin
DecodeDate(Date, Year1, Month1, Day1);
DecodeDate(ds.FieldByName("birthday").asDateTime, Year1, Month1, Day1);
if (Month1 = Month) and (Day1 = Day) then Accept:=True
else Accept:=False;
end;



Val   (2002-03-29 14:40) [28]

>roottim (29.03.02 14:36)
вероятно, отсутствием кода



Lusha   (2002-03-29 14:47) [29]

>vopros
Должно помочь...
Попробуйте сначала выполнить запрос вида
SELECT CAST(DATE_BORN AS VARCHAR(24)) FROM TABLE1

Сразу поймете что и почему. И в документацию лезть не надо. Незачем... :)

Удачи



vopros   (2002-03-29 14:50) [30]

>roottim (29.03.02 14:36)
Спасибо получилось.
Ты имел в виду...это предложение?Оно тебе кажеться актуальным?
>Alexandr © (29.03.02 11:41)
>в OnfilterRecord
>Accept:=FieldByname("data").asDate=Date

>Val © (29.03.02 14:40)
>roottim (29.03.02 14:36)
>вероятно, отсутствием кода
Ты в форумах не заблудился?
Прочитай все свои ответы...если они хоть где-то что-то как-то конкретизируют...Кроме базара пустого ничего всебе не несут.



vopros   (2002-03-29 14:51) [31]

Lusha © (29.03.02 14:47)
И это я тоже пробовал но дата начинает показываться в таком формате:
20-NOV-1976...и я не стал с этим заморачивться...



vopros   (2002-03-29 14:53) [32]

И вероятно поэтому Like и не работал...но ведь можно же как-то?



Lusha   (2002-03-29 15:00) [33]

Я бы сказал, именно поэтому LIKE и не работал... :)



iva   (2002-03-29 15:03) [34]

select * from karta_ where cast(datr as varchar(10)) like "28-FEB%"



Val   (2002-03-29 15:03) [35]

>vopros © (29.03.02 14:50)
Честно, сегодня утром влом спорить...пусть ты прав :)



Lusha   (2002-03-29 15:04) [36]

Конечно можно, если в IB есть функции или директивы форматирования. А вообще вариант с обработчиком на OnFilter мне кажется более симпатичным... :)



Anatoly Podgoretsky   (2002-03-29 15:04) [37]

vopros © (29.03.02 11:17)
"Через SQL я знаю."

Можно не поверить.
Так все таки TTable или SQL



iva   (2002-03-29 15:04) [38]

select * from karta_ where cast(datr as varchar(10)) like "28-FEB%"



vopros   (2002-03-29 15:06) [39]

Всем спасибо: Помогли.
>Val © (29.03.02 15:03):))
Повесилились.



USAtyj   (2002-03-29 15:06) [40]

По поводу вида 20-NOV-1976.
Смотри настройки конкретной сессии - наверняка должно быть что-то вроде формата даты. Вот для сессии и устанавливаешь формат: DD.MM.YYYY и тогда 20-NOV-1976 будет представляться в виде 20.11.1976.



vopros   (2002-03-29 15:21) [41]

>Anatoly Podgoretsky © (29.03.02 15:04)
В принципе проблема решена.
Когда говорил что: "Через SQL я знаю." Такого типа задачи решались легко а вот с датой в Intеrbase заморочки вышли.

>Так все таки TTable или SQL
Не устал? Зачем задавать лишние вопросы...?Как знаешь так и ответь.
Такое ощущение лишь бы ляпнуть что...Предидущие ответы читать Не пробывали?



Anatoly Podgoretsky   (2002-03-29 15:32) [42]

vopros © (29.03.02 15:21)
А я так и ответил, вот большое спасибо за разъяснение.
Но все равно в недоумение Table или SQL, так как несколькими события ты противоречишь написанному ранее.
А ответов тебе надовали столько, что зватит решений на долгие годы.



vopros   (2002-03-29 15:35) [43]

>Anatoly Podgoretsky © (29.03.02 15:32)
Да я уже пытался докричать что я все понял!:)))




Страницы: 1 2 вся ветка
Форум: "Базы";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.22;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.79 MB
Время: 0.045 c
1-69793           $hiC0                 2002-04-10 13:49  2002.04.22  
Снова PrintDialog возможно PrintersetupDialog :)


1-69933           inko                  2002-04-09 18:17  2002.04.22  
Удаление файла после перезагрузки Windows.


3-69723           Hermit                2002-04-01 12:18  2002.04.22  
DBGrid и режим редактирования


14-70001          Sergo                 2002-03-13 12:47  2002.04.22  
Помощь от Фэ


4-70076           Ewgenij               2002-02-18 00:15  2002.04.22  
Как обработать появление окна при его создании?