Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Поиск в подчиненной таблице   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.044 c
2-1179488279
RokyB
2007-05-18 15:37
2007.06.10
Привязка компонентов к размере формы


3-1174465155
Iuliy
2007-03-21 11:19
2007.06.10
Выуживание ошибки Оракла через BDE


15-1178961202
Пол
2007-05-12 13:13
2007.06.10
распределение нагрузки.


6-1164175406
psa247
2006-11-22 09:03
2007.06.10
IpConfig /release


15-1179145377
Desdechado
2007-05-14 16:22
2007.06.10
"Что в имени тебе моем?" или Парные имена мужчин и женщин





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский