![]() |
|
|
![]()
|
|
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
Хотел сделать пример по книге SQL, для сильно сомневающихся которая.
в Query на своей форме пишу:
запускаю приложение. В ответ ошибка - with писать нельзя, а без with - RECURSIVE тоже писать нельзя. А что можно помогите как мне организовать рекурсивный запрос в Дельфи. Вот такая таблица у мня FLIGHT: Sourse Destination _____________________ Portland Orange Country Portland Charlotte Portland Daytona Beach Orange Country Montgomery Charlotte Memphis Memphis Champaign Montgomery Memphis А после рекурсии надо получить: Sourse Destination _______________ Portland Orange Country Portland Charlotte Portland Daytona Beach Orange Country Montgomery Charlotte Memphis Memphis Champaign Montgomery Memphis Portland Montgomery Portland Memphis Orange Country Memphis Chlotte Champaign Мне нужно в Дельфи. Помогите?? Это сообщение отредактировал(а) Негодяй - 4.5.2005, 10:40 |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Что за SQL используется ? Ибо что-то не встречал я такого синтаксиса - WITH RECURSIVE
|
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
а как тогда без него в Дельфи мою задачу решать? |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Из твоего сообщения совершенно не понятно, что тебе надо получить. Таблица с одним полем - и при каком месте тут рекурсия ?
|
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
Таблица FLIGHT - маршруты куда из какого города можно долететь. Например: из Portland можно долететь в Orange Country, а из Orange Country в Montgomery. А в ответе нужно вывести сразу что из Portland мы можно попасть в Montgomery. Если написать только условие where source="Portland" - то ответа такого не получиться, что из Portland -> Montgomery. |
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Так тебе надо решать задачку на графах - маршруты. Вообщем-то такие задачи обычно решаются несколько иначе - строится матрица связности. Я сейчас просто не могу вспомнить - надо в книжке посмотреть. Идея в том, что при добавлени города сразу строится полный список тех городов, которые будут ему доступны. Правда это требует памяти.
Хотя конечно можно это и рекурсией решить, но это не через один SQL-запрос. Фактически надо делать функцию, на вход которой подается название города. По названию делаем запрос какие города доступны из этого города. И для каждого города из полученного списка опять же вызваем эту же функцию. Но это очень долгий процесс, если городов и связей много. |
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
не через один запрос, то есть придётся использовать 2 query. |
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
а всё таки мой запрос вообще нельзя в Дельфи никак использовать
|
|||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Нет, не 2. Идея рекурсии ниже.
Пишу просто идею, поэтому алгоритм будешь реализовывать сам. Правда я сделал два поля вместо одного. Потому как так удобнее. Source - откуда, Target - куда У тебя есть город начальный - CitySource и конечный CityTarget
По идее у тебя в Path должны накопиться строки, которые будут составлять маршрут. Он возможно не будет самым оптимальным. Но он будет (если он возможен). Если тебе надо оптимизировать это все - то надо такое спрашивать уже в форему Алгоритмы |
|||
|
||||
| Негодяй |
|
||||||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
у меня анолигичная таблица Flight (ReachableFrom - это временная таблица, создаваемая в самом запросом)
а может имелось ввиду тип TListBox
переменная неуказанная в функции, и на фигв она? |
||||||
|
|||||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Я так понял, что тебе надо задать город начальный и город конечный и получить маршрут из одного в другой.
Вот CitySource и CityTraget для этого и есть. Или тебе нужно получить все возможные маршруты из какого-то города ? Тогда алгоритм менятеся но правта идея остается. Я там кстати ошибку сделал - надо проверять, чтобы замкнутой цепочки не было. |
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
AntonSaburov
Огромное спасибо за попытки помочь, за идею, но знания в Дельфи у меня слабые, со списками поработаю and I'll come back |
|||
|
||||
| Негодяй |
|
|||
|
Порядочный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1513 Регистрация: 13.2.2005 Где: Kazakhstan, Almat y Репутация: нет Всего: 32 |
вот чего я хотел, но у меня туфта получилась, но так понял, что хоть что-то умею, надо будет через дерево вывести результат, и просьба не критиковать, а дать какие-нибудь идеи как через дерево это вывести:
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |