Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.51 MB
Время: 0.023 c
2-1179648772
Leon25
2007-05-20 12:12
2007.06.10
TDriveComboBox


2-1179660366
Герасим
2007-05-20 15:26
2007.06.10
Рабочий стол


2-1179744686
alex810
2007-05-21 14:51
2007.06.10
Копирование файлов


2-1179588480
Flerom
2007-05-19 19:28
2007.06.10
Finddialog


2-1179422955
Евгений Р.
2007-05-17 21:29
2007.06.10
Сенсорный монитор