|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Вывод родствеников |
|
Delphi - Вывод родствеников
|
Новый участник Сообщения: 19 |
Доброго времени суток. Есть база в access с именем члена семьи и данными о родителях.
Из этой базы как нужно вывести всех предков данного человека. Заранее спасибо всем. |
|
Отправлено: 09:01, 23-04-2013 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать student_po, это надо сделать средствами Access? Или средствами Delphi? Потому что средствами Access это проблематично. Средствами Delphi -- это задача на графы.
|
------- Отправлено: 10:26, 23-04-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата lxa85:
|
|
Отправлено: 11:41, 23-04-2013 | #3 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать Средствами Delphi
|
Отправлено: 12:18, 23-04-2013 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать student_po, так переведите с VBA на Delphi. Алгоритм один и тот же.
|
|
Отправлено: 13:10, 23-04-2013 | #5 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Iska, я с Access ом не работал. Поэтому я затруднился дать ответ. Была мысль написания единого SQL запроса, и она потонула в сомнениях (AFAIK SQL не поддерживает рекурсию). Поэтому возникла мысль запросить всю таблицу в Delphi, сформировать массива и работать с ним как с матрицей, описывающий граф гинеалогического дерева.
|
------- Отправлено: 14:41, 23-04-2013 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать lxa85, а мне сразу PROLOG вспомнился
![]() |
Отправлено: 15:11, 23-04-2013 | #7 |
Необычный Сообщения: 4466
|
Профиль | Сайт | Отправить PM | Цитировать Iska,
![]() |
Отправлено: 17:21, 23-04-2013 | #8 |
Новый участник Сообщения: 19
|
Профиль | Отправить PM | Цитировать procedure TForm1.genealogy(iddb:integer); var f,m:integer; begin Datam.ADOQuery3.Locate('id',iddb, []); if Datam.ADOQuery3.FieldByName('Отец').AsInteger<>0 then begin f:=(datam.ADOQuery3.FieldByName('Отец').AsInteger); Memo2.Lines.Add(inttostr(f)); Datam.ADOQuery3.Locate('id',f, []); genealogy(Datam.ADOQuery3.FieldByName('id').AsInteger); end; if Datam.ADOQuery3.FieldByName('Мать').AsInteger<>0 then begin m:=(datam.ADOQuery3.FieldByName('Мать').AsInteger); Memo2.Lines.Add(inttostr(m)); Datam.ADOQuery3.Locate('id',m, []); genealogy(Datam.ADOQuery3.FieldByName('id').AsInteger); end; end; |
Отправлено: 18:13, 23-04-2013 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать student_po, обратите внимание на разницу — я сначала выбираю запись, делаю вывод «ФИО», затем проверяю в записи свойства «Отец»/«Мать» и, если они не пустые — рекурсивно вызываю процедуру. В Вашем коде логика иная: если у деда нет «Отца» — самого деда в «Memo2» Вы не увидите.
|
Отправлено: 18:46, 23-04-2013 | #10 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Звук - Вывод звука | hErrosh | Прочее железо | 6 | 04-02-2011 15:57 | |
Win32 API - Вывод картинок | Lev | Программирование и базы данных | 11 | 12-02-2010 19:38 | |
Драйвер - Вывод изрбражения... помогите... | TheSaint | Microsoft Windows 7 | 3 | 16-01-2010 14:16 | |
Вывод на телевизор | dascon | Программное обеспечение Windows | 15 | 04-09-2004 06:55 | |
постраничный вывод | chem1 | Вебмастеру | 4 | 16-01-2004 22:46 |
|