Текущий архив: 2007.06.10;
Скачать: CL | DM;
ВнизПоиск в подчиненной таблице Найти похожие ветки
← →
Sp1r1t (2007-03-19 04:19) [0]У меня есть 2 связанных между собой таблицы. Например Таблица Master: Group (Key,GroupName)
Slave: Students(Key,GroupNumber,LastName,FirstName).
Мне необходимо найти студента по Фамилии(LastName), находящегося в определенной группе(GroupName).
Подскажите порядок поиска нужной фамилии.
Связь таблиц Students.GroupNumber -> Group.Key
Насчет правильности связи и индексов не беспокойтесь - проверил многократно.
Мой вариант:
Group.IndexFieldNames:="GroupName";
Group.SetKey;
Group.FieldByName("GroupName").AsString:="название_группы";
Group.GotoKey;
//до этого момента все впорядке
Students.IndexFieldNames:="GroupNumber";
Students.FindKey("Петров");
//далее эти 2 оператора (выше) почемуто игнорируются
Label3.Caption:=Students.FieldByName("LastName").AsString;
//выводится первая строка таблицы Students
Почему операторы игнорируются / что я не тек сделал.
Очень буду благодарен кто напишет правильный порядок поиска записи в зависимой таблице Students.
← →
Sp1r1t (2007-03-19 04:27) [1]Просьба ограничиться использованием методов SetKey,FindKey,GotoKey.
← →
Виталий Панасенко © (2007-03-19 09:00) [2]
>1. Students.IndexFieldNames:="GroupNumber";
>2. Students.FindKey("Петров");
1.Делаем активным индекс по № группы
2.А ищем - по фамилии.
Прочитай в справке, как работает FindKey(по активному индексу). Используй Locate
← →
Клара (2007-03-19 09:00) [3]
> Students.IndexFieldNames:="GroupNumber";
Сортировку подчиненной таблицы надо производить через связуемое поле.
← →
Клара (2007-03-19 09:49) [4]Попробуй так:
Table2.IndexFieldNames:= "Id_GR;Fam";
Table2.FindKey([Edit2.Text, Edit3.text]);
У меня работает только тематика другая.
← →
Mike Kouzmine © (2007-03-19 17:31) [5]Делаешь в студентах индекс по groupnumber, lastname. делаешь текущим, определяешься с номером группы и фамилией и делаешь студентам setrange(groupnumber, lastname, groupnumber, lastname) и получаешь всех lastname, которые в группе groupnumber.
← →
zdm © (2007-03-19 21:59) [6]IMHO, Ttable-надо удалить из стандартных компонент Delphi;))
связать запросом гораздо в конечном итоги и проще и лучще и "независемей".
> Sp1r1t
а если оператор ввёл не "Иванов" а "иВаНов"?
и еще от СУБД будет зависеть, "Регист введённых значений", следовательно запросом всё-равно, там есть LIKE и он может быть как
select * from qqq where fio LIKE : LowAnsiCase(Edit1.Text) or fio LIKE : UpperAnsiCase(Edit1.Text), это sql.add , ну и со скобочками там разобраться
← →
zdm © (2007-03-19 22:00) [7]ой, блин, AnsiLowerCase AnsiUpperCase
← →
MsGuns © (2007-03-19 22:16) [8]SQL лучший друг, товарищ и брат ;)
← →
Sergey13 © (2007-03-20 08:23) [9]> [0] Sp1r1t (19.03.07 04:19)
Я тебе один умный вещь скажу, толко ты не обижайся. (с) Мимино
Твоя задача, ИМХО, или вовсе не имеет смысла либо решается чисто автоматически через интерфейс пользователя.
Откуда ты берешь "название_группы"? Из головы? Или из списка групп (который у тебя все-таки перед глазами судя по коду)? Если из списка, то ты уже можешь спозиционироваться (а скорее всего уже сделал это) на запись нужной группы. Раз спозиционировался, то М-Д связь уже отсеяла (должна по крайней мере или может это сделать) студентов этой группы и в списке студентов осталось 20-25 человек максимум. В этом списке проще визуально найти Петрова (которых кстати может быть и не один) чем печатать фамилию в каком нибудь эдите (ну не в коде же ты эту фамилию пропишешь, я надеюсь).
Для поиска (да и вообще) лучше все таки прислушаться к [8] MsGuns © (19.03.07 22:16)
ЗЫ: Только скорее всего это очередная лаба (судя по [2]) которую не может решить очередной студент-прогульщик и ему все советы по барабану.
← →
zdm © (2007-03-20 08:28) [10]
> Sergey13 © (20.03.07 08:23) [9]
мы упускаем [2]
> Просьба ограничиться использованием методов SetKey,FindKey,
> GotoKey.
Хотя автору видимо уже перехотелось писать (или думать) ;)
← →
Sergey13 © (2007-03-20 08:30) [11]> [10] zdm © (20.03.07 08:28)
Я как раз не упустил это в своем ЗЫ, только спутал нумерацию - [1] конечно же. 8-)))))))))))))))))))))
← →
Mike Kouzmine © (2007-03-20 18:04) [12]zdm © (20.03.07 08:28) [10]
Sergey13 © (20.03.07 08:30) [11]
MsGuns © (19.03.07 22:16) [8]
Нет. Для парадокса sql нелюбимый пасынок.
Ttable - это брат.
← →
MsGuns © (2007-03-20 19:43) [13]>Mike Kouzmine © (20.03.07 18:04) [12]
>Нет. Для парадокса sql нелюбимый пасынок.
>Ttable - это брат.
Заблуждение, причем очень опасное.
← →
Mike Kouzmine © (2007-03-20 20:42) [14]MsGuns © (20.03.07 19:43) [13] ну ну, не буду настаивать. Я ведь только хамить умею, в другом ничего не понимаю. Но если интересно, возьми файлик тестовый создай со строковыми полями 2 или 3, сделай любые индексы, какие считаешь нужными, и заполни его случайной информацией, и поищи sqlем, и с использованием ttable с его setrange. И честно для себя реши.
← →
Mike Kouzmine © (2007-03-20 20:45) [15]И количество записей хотя бы тысячь сто.
← →
MsGuns © (2007-03-20 23:33) [16]>Mike Kouzmine ©
На единственной локальной таблице с индексами парадокс отработает быстрее. А что делать, если поиск в нескольких таблицах по произвольным полям, да еще в совместно используемых несколькими юзерами (в т.ч. и на запись) ?
За скорость парадокса приходится платить надежностью, достоверностью и немасштабируемостью.
← →
Mike Kouzmine © (2007-03-21 00:25) [17]MsGuns © (20.03.07 23:33) [16] Для того, чтобы делать выборки из нескольких таблиц не sqlем надо лишь пощепетильней подойти к проектированию. Для большинства решений проходит. Для особо сложных случаев используются вьюшками. Разбивают сложный запрос на несколько более простых, если уж это не проходит, то тормоза.
Страницы: 1 вся ветка
Текущий архив: 2007.06.10;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.045 c