![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
две таблицы
Студент заочник © (2002-07-23 11:02:00)Спасите меня от препода по "Базам данных"!!!
Есть две таблицы Org(организации) и Manager(менеджеры).
Отношение M:1, связаны по ключевому полю id_manager.
Так вот, надо вывести для каждого менеджера, список его предприятий.
А цикл организовать не могу. Всякий гон получается. Блок-схему даже нарисовал.
По схеме должно работать, на практике не работает. ПОМОГИТЕ!!!
работаю без SQL
VAleksey (2002-07-23 13:59:00) [1]Согласен со всем кроме этого
> Этот ключ должен быть определен как первичный - Primary)
> в обеих таблах.
Val (2002-07-23 13:47:00) [2]>MsGuns © (23.07.02 13:31)
Зря вы так на студента..
Честно говоря, ничего обидного в своих постах не вижу. Человек не мог организовать цикл, словесный алгоритм я ему привел. Заметьте, алгоритм для студента первого семестра, изучающего паскаль(говорю с уверенностью, поскольку брат только в прошлом году поступил в институт и я видел их лабы - типизированные файлы(есть аналогия, не правда-ли?) изучают в первом семестре). Согласитесь, поиск данных вот в таком цикле при работе с БД- самый плохой вариант решения данного вопроса. Потому меня и удивил такой подход, причем при сознательном отрицании SQL-решения. Автор вопроса же видит в постах только то, что хочет и это его право.
MsGuns (2002-07-23 13:31:00) [3]>Val
Зря вы так на студента..
Надо ж понимать масштаб задач, а то послушаешь некоторых мастаков (и не очень), и получается, что для того, чтобы сделать простенькую прожку типа тел.справочника, надо обязательно ставить какого-нибудь монстра типа MsSQL..
> Студент - заочник
Все намного проще: берете 2 компонента TTable, один из них - на менеджеров (это будет мастер), второй - на организации (это детал). В в св-вах детала заполняете MasterField и MasterDataSet
по связующему ключу. (Этот ключ должен быть определен как первичный - Primary) в обеих таблах.
После этого кидаете на форму 2 TDBGrid, связывая их через DataSource с соотв. таблицами.
В рез-те при работе проги перемещение по верхней (мастер) таблице приводит к тому, что в нижней (детал) будет высвечиваться только те орг-ции, которые "принадлежат" текущему менеджеру.
Если надо именно ПЕЧАТАТЬ, то надо положить еще несколько компонент, в т.ч. некий DataSet, куда вы будете в цикле переписывать содержимое текущего детала
Успехов !!!
LordOfSilence (2002-07-23 13:22:00) [4]tblManager.First();
while not tblManager.EOF do begin
WrilteLn( "ManagerName" );
tblOrganization.First();
while not tblOrganization.EOF do begin
if tblOrganization.FieldByName( "id_manager" ).AsInteger =
tblManager.FieldByName( "id_manager" ).AsInteger then
WrilteLn( "OrganizationName" );
tblOrganization.Next();
end;
tblManager.Next();
end;
Алгоритм схематичный и совершенно "тупой".
Но ведь я же не знаю условия задачи -
есть ли у Вас индексы, разрешено ли Вам
применять фильрование и т.п.
Операторы WriteLn, естественно, использовать не надо,
они показаны только для того, чтобы Вы видели, что
здесь с данными можно что-то сделать. Уж не знаю -
добавить в TMemo или TListBox, например...
Val (2002-07-23 11:51:00) [5]а как вам еще помочь - программку написать?
Alexandr (2002-07-23 11:29:00) [6]ну разбирайся...
Если SQL не канает, ты бы написал, что канает?
Студент заочник (2002-07-23 11:28:00) [7]для ***. Спасибо конечно, но SQL не канает.
*** (2002-07-23 11:26:00) [8]select manager.managerid,orgid
from manager,org
where org.managerid=manager.managerid
Студент заочник (2002-07-23 11:25:00) [9]А помочь слабо? Ладно не надо... Сам разберусь.
Val (2002-07-23 11:12:00) [10]цикл while not eof по таблице менеджеров и внутренний такой же цикл по таблице предприятий с проверкой, на равенство id.
Интересный подход конечно.
Да вас от препода не только по БД спасать надо ;)
Alexandr (2002-07-23 11:07:00) [11]учиться надо было.