Форум: "Начинающим";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];
Внизсвязать списки Найти похожие ветки
← →
Nameziz (2009-04-24 12:08) [0]Помогите связать между собой два списка как один ко многим (одной записи списка A может соответствовать несколько записей списка B), никак не могу разобраться, для меня как начинающего не совсем ясен принцип как такое сделать. Использовать СУБД не разрешено.
TRecA = record
IdA: Integer;
IdB: Integer;
end;
PRecA = ^TRecA;
TRecB = record
IdB: Integer;
Name: string[255];
end;
PRecB = ^TRecB;
TlistA = class(TList)
private
function Get(Index: Integer): TRecA;
public
function Add(AIdA, AIdB: Integer): Integer;
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
{ properties }
property Items[Index: Integer] : TRecA read Get; default;
end;
TListB = class(TList)
private
function Get(Index: Integer): TRecB;
public
function Add(AIdB: Integer; AName: string): Integer;
procedure Notify(Ptr: Pointer; Action: TlistNotification); override;
{ properties }
property Item[Index: Integer]: TRecB read Get; default;
end;
← →
Сергей М. © (2009-04-24 12:15) [1]
> Использовать СУБД не разрешено
Кем, Кораном ?)
> не совсем ясен принцип
Каждый эл-т подчиненного списка (B) обязан иметь поле-ссылку на эл-т ведущего списка (A)
А у тебя с ног на голову это поставлено :
TRecA = record //элемент ведущего списка
IdA: Integer;
IdB: Integer; //<- почему-то ссылается на непонятно какой элемент подчиненного
end;
← →
Юрий Зотов © (2009-04-24 13:20) [2]Проще говоря, раз "одной записи списка A может соответствовать несколько записей списка B", то делать надо наоборот:
TRecA = record
IdA: Integer;
end;
TRecB = record
IdB: Integer;
IdA: Integer; // Вот оно!
end;
← →
Nameziz (2009-04-24 13:38) [3]Спасибо за советы, переделал... Посмотрите теперь все правильно? Связь между списками организовал через свойство.
type
TRecA = record
IdA: Integer;
NameA: string[255];
end;
PRecA = ^TRecA;
TRecB = record
ParentId: Integer; // IdA
NameB: string[255];
end;
PRecB = ^TRecB;
TlistB = class;
TlistA = class(TList)
private
function Get(Index: Integer): TRecA;
public
function Add(AIdA: Integer; ANameA: string): Integer;
procedure Notify(Ptr: Pointer; Action: TListNotification); override;
{ properties }
property Items[Index: Integer] : TRecA read Get; default;
end;
TListB = class(TList)
private
FListA: TListA;
function Get(Index: Integer): TRecB;
public
function Add(AParentId: Integer; ANameB: string): Integer;
procedure Notify(Ptr: Pointer; Action: TlistNotification); override;
function NameAFromNameB(Name: string): string;
{ properties }
property ListASource: TlistA read FlistA write FlistA;
property Items[Index: Integer]: TRecB read Get; default;
end;
← →
MBo © (2009-04-24 13:38) [4]А какая цель преследуется? От этого может зависеть решение.
← →
Nameziz (2009-04-24 13:44) [5]Задача такая: имеется таблица отделов и таблица сотрудников. К каждому отделу относится от одного до нескольких сотрудников. Таблицы нужно представить ввиде списков, субд использовать не разрешили.
← →
sniknik © (2009-04-24 14:02) [6]> субд использовать не разрешили.
бред конечно, но это твои "тараканы". но почему не использовать компоненты обработки данных, от них, но без субд? мастер-детайл делается и на оторванных от баз рекордсетах, чисто локально.
← →
Сергей М. © (2009-04-24 14:08) [7]
> субд использовать не разрешили
Это что, лаба ? Курсовая ?
← →
Nameziz (2009-04-24 14:13) [8]
> Это что, лаба ? Курсовая ?
лаба
← →
Юрий Зотов © (2009-04-24 14:27) [9]Можно сделать проще и "красивее": подразделение САМО включает в себя список своих сотрудников.
Что-то вроде этого:
type
TEmployee = class; // Опережающее объявление.
TDepartment = class (TObjectList) // Список объектов TEmployee
private
FName: string; // Наименование подразделения
FNumber: cardinal; // Номер подразделения
... // Еще что-то
FParent: TDepartment; // Дает возможность иметь дочерние подразделения
public
...
end;
TEmployee = class
private
FFirstName: string; // Имя
FLastName: string; // Фамилия
FPatronymic: string; // Отчество
FBurnDate: TDate; // Дата рождения
FSex: boolean; // Пол
... // Еще что-то
FDepartment: TDepartment; // Отдел, в котором работает сотрудник
public
...
end;
TDepartments = class(TObjectList); // Список подразделений
← →
Сергей М. © (2009-04-24 14:34) [10]
> Nameziz (24.04.09 14:13) [8]
А можно полюбопытствовать о теме преподаваемого предмета, по которому требуется выполнить эту лабу, и о дословном тексте задания на лабу ?
← →
Nameziz (2009-04-24 14:39) [11]предмет Структуры и организация данных в ЭВМ
← →
Сергей М. © (2009-04-24 14:40) [12]А задание ?
← →
Юрий Зотов © (2009-04-24 14:42) [13]> Nameziz (24.04.09 14:39) [11]
> предмет Структуры и организация данных в ЭВМ
Тогда делайте через структуры и указатели, как и планировали.
← →
Сергей М. © (2009-04-24 14:48) [14]Подозреваю, что для сдачи лабы достаточно шлепнуть на форму TreeView
← →
Nameziz (2009-04-24 14:51) [15]
> Тогда делайте через структуры и указатели, как и планировали.
Значит вариант который я приводил правильный?
> А задание ?
Полного текста задания на руках сейчас нет.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.06.14;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c