![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Table => Filter? [D7, dBase, FoxPro]
Jet © (2004-05-27 17:25:00)Нужно составить следующий фильтр для таблицы:
Имеется таблица .dbf (FoxPro) с полем Fam, Name и т.д.
Ее нужно отфильтровать по первым пяти буквам фамилии и трем первым
буквам имени, т.е. если есть записи:
1 Иванов Петр
2 Иванова Петр
3 Ивашкин Петр
4 Ивашкин Пятр
То считать одинаковыми записи 1 и 2:
(Ивано)в (Пет)р
(Ивано)ва (Пет)р
Но разными 1,3,4:
(Ивано)в (Пет)р
(Ивашк)ин (Пет)р
(Ивашк)ин (Пят)р
или 2,3,4
(Ивано)ва (Пет)р
(Ивашк)ин (Пет)р
(Ивашк)ин (Пят)р
На выходе должно быть:
1 Иванов Петр
3 Ивашкин Петр
4 Ивашкин Пятр
или
2 Иванов Петр
3 Ивашкин Петр
4 Ивашкин Пятр
Т.е. фактически вывести уникальные записи по первым 5 буквам фамилии и
первым 3 буквам имени. Помогите кто знает.
Vlad (2004-05-27 17:47:00) [21]
> Sandman25+1 (27.05.04 17:43) [7]
> Зачем это все надо?
Похоже на лабораторную работу :-)
> Jet © (27.05.04 17:25)
Если нужно именно фильтр, а не SQL, тогда Соловьев © (27.05.04 17:38) [6]
+
В Дельфи есть функция Copy, которая может вернуть тебе любой кусок строки.
Sandman25+1 (2004-05-27 17:43:00) [22]Перечитал первый пост. Что-то я не то отвечал...
Нужно что-то типа
select *Но скорость будет ужасная.
from t t1
where not exists
(select 1
from t t2
where substr(t1.name, 1, 3) = substr(t2.name, 1, 3)
and substr(t1.family, 1, 5) = substr(t2.family, 1, 5)
and t2.id > t1.id
)
Зачем это все надо?
Соловьев (2004-05-27 17:38:00) [23]
> Так первые буквы не зивестны, если не взять запись. А сразу
> нельзя отфильтровать не используя буквы. К примеру :
> AnsiLeftStr(Fam,5) <> AnsiLeftStr(Fam,5)
> Что-то типа такого.
в OnFilterRecord - фантазия безгранична :)
Соловьев (2004-05-27 17:37:00) [24]
> family like 'ИВАНО%' and name like 'ПЕТ%'
телепат:)
я и не знал что у него ФИО рассписано :)
Jet (2004-05-27 17:36:00) [25]Так первые буквы не зивестны, если не взять запись. А сразу нельзя отфильтровать не используя буквы. К примеру :
AnsiLeftStr(Fam,5) <> AnsiLeftStr(Fam,5)
Что-то типа такого.
Sandman25+1 (2004-05-27 17:33:00) [26]Или
family like 'ИВАНО%' and name like 'ПЕТ%'
Jet (2004-05-27 17:33:00) [27]А поподробнее по примеру можно пожалуйста?
Соловьев (2004-05-27 17:29:00) [28]событие OnFileterRecord:
Accept := <условие>;
пишешь вместо что в голову прийдет :)