Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Создание таблиц [D5, IB5.x]


Страницы:   1 2

Лора ©   (2004-02-19 08:59:00) 

Здравствуйте! Подскажите, есть ли возможность в Делфи создать программно рабочую область. То есть как, например в фокспро можно написать:
nnn=1
select naim2 from nsi
where naim1=a into cursor t&nnn,
где t&nnn- это название рабочей области, а nnn-это счетчик


kaif   (2004-02-22 14:18:00) [1]

Рабочая область в FoxPro это то же самое, что двунаправленный курсор компонента DataSet. То есть просто резултьтат выборки, по которому можно ходить туда-сюда. Поставь на форму несколько компонентов DataSet (нпример TIBQuery) и выбери в них одну и ту же таблицу. Это и будет аналог нескольких "рабочих областей" в FoxPro. Однако с привычками FoxPro нужно расстаться, если работаешь с IB. Лучше написать хранимую процедуру (CREATE STORED PROCEDURE), которая будет делать это все на сервере, а не гонять таблицу на клиент и потом ее там обходить всякими
with table do while not eof begin next end
Так как твоя таблица с поездами, как я сильно подозреваю, может оказаться очень даже не маленькой... Особенно через пару лет работы такой базы.


Danilka   (2004-02-21 09:04:00) [2]

Глобальные переменные, на мой взгляд, не самый лучший вариант, как правило - источник ошибок. И в твоем случае именно так. qq2 - общий объект для всех, а теперь смотри: у тебя первый poisk запускается, очишает запрос в qq2 и запускает его. Затем, запускает сам себя - процедуру poisk, которая тот-же объект qq2 очищает, заполняет и запускает заново..
Тебе надо qq2 объявить внутри процедуры poisk, создавать внутри нее.
А еще лучше, поищи в поисковиках инфу про алгоритм написаный тут: [27] SPIRIT ©   (19.02.04 15:23)
Думаю, его реализация будет правильнее/быстрее, чем эта процедура.


VLAD-MAL   (2004-02-19 15:28:00) [3]

TClientDataSet, раз уж все запоминать хочешь...

Создаешь таблицу произвольной структуры (в памяти, естественно), потом делаешь в ней, что придется.

А вообще - то тут задачка из серии лиейного прогриммирования, если "в лоб" решать - ресурсов сожрет - только держись...


SPIRIT   (2004-02-19 15:23:00) [4]

Зачем вы ломаете голову . Жил на свете замечательный дяденька , который написал алгоритм названный в его четь - алгоритм ДЕЙКСТРЫ я писал курсовую на 4 курсе, тока вместо станций были перекрестки в городе и там надо было найти оптимальный путь по заданным критериям. Как я вижу критерий у тебя один - расстояние.
так вот. пиши в каком - нибудь там яндексе "алгоритм Дейкстры"
данные из базы забиваешь в матрицу вида :

......пункт 1 | punkt2 | pinkt 3 **********
pinkt1------- | 200    | 10000
----------------------------------------
punkt2  200   |--------| 10000
---------------------------------------
punkt3 450    | 10000  |---------

10000 - это несуществующее расстояние которое в алгоритме не будет восприниматься в серьез т.к. очень велико.

если ты не блондинка думаю сможешь разобраться


Лора   (2004-02-19 15:07:00) [5]

[25]Danilka
да нет, понятно, что тупик :)
все-все, поняла, начала описывать ситуацию и поняла :))


Danilka   (2004-02-19 14:50:00) [6]

цитирую сам себя: :))
I>
> если-же она пройдясь по циклу ничего не обнаружила, то возвращает
> null.


если тебе вернулся Null то значит тупик.
на самом деле, задача сложнее.
например, есть несколько вариантов пути, один проходит через 10 городов, а другой - через 1, вперед может найтись самый неудачный.
Еще одна проблема - с ростом количества станций, среднее время поиска будет расти в геом. прогрессии. Вообще, есть так называемая "задача комивояджра" - найти самый короткий путь, через наименьшее кол-во городов, если не ошибаюсь, что если кто-то найдет ее решение при котором время поиска будет расти не в геом. прогрессии от кол-ва станций, того ждет мильен долларов. :))


Лора   (2004-02-19 14:39:00) [7]

[21] Danilka
А если выбрал станцию, передал ее параметром для вызова функции, выбрал данные и по всем направлениям тупик, то есть null, тогда куда возврат и что в качестве параметра?


Лора   (2004-02-19 14:29:00) [8]

Ну, в принципе может и обычный алгоритм, но я с таким еще не сталкивалась. Попробую сейчас


Zacho   (2004-02-19 14:06:00) [9]


> Лора   (19.02.04 13:47) [18]

Да в динамическом массиве например. Или еще где, простор для фантазии тут есть. Или вообще не "запоминать". Зачем ?
В случа с ХП - просто каждую очередную запись маршрута просто возвращать suspend'ом.
А view в данном случае мало поможет.


Danilka   (2004-02-19 14:04:00) [10]

[19] Никто   (19.02.04 13:52)
причем здесь вьюхи?

[18] Лора   (19.02.04 13:47)
> Тока проблему-то не решит.. Все арвно надо где-то запоминать
> маршрут которым шла, опять-таки где?

Решит.
Просто подумай внимательно.

Примерно так: функции передается 2 параметра:
1. текущая стания отправления
2. конечная станция.
функция делает запрос по станциям, которые напрямую доступны от текущей стании отправления. далее в цикле их сравнивает с конечной станции, если равно, то прерывает цикл и возвращает текущую станцию отправления. Если не равно, то запускает саму себя передавая в качестве первого параметра текощей станцуии из выборки, если получает в ответ null, то берет следующую станцию из выборки, если ответ отличается от null, значит что-то нашлось, выходит из цикла и возвращает этот полученый результат, добавляя к нему 1 переданый ей параметр.
если-же она пройдясь по циклу ничего не обнаружила, то возвращает null.

вот и все. вобщем-то обычный алгоритм.


Лора   (2004-02-19 13:55:00) [11]

А для view есть возможность не задавть конкретное имя? Проставлять например Tab+n, где n-это счетчик.


Никто   (2004-02-19 13:52:00) [12]

В SQL есть возможность создавать представление:
CREATE VIEW [ВиртуальнаяТаблица] AS
SELECT...


Основное отличие от простого запроса - запрос внутри представления уже предкомпиллирован, поэтому выполняется быстрее.
При этом работа с результирующими данными ведется как с обычной таблицей, т.е. представление может использоваться как обычная таблица:
SELECT * FROM [ВиртуальнаяТаблица] WHERE...

Удаление представления:
DROP VIEW [ВиртуальнаяТаблица]


Лора   (2004-02-19 13:47:00) [13]

Мда.. Тока проблему-то не решит.. Все арвно надо где-то запоминать маршрут которым шла, опять-таки где?


Danilka   (2004-02-19 13:41:00) [14]

[16] Лора   (19.02.04 13:37)
функция (процедура) которая вызывает саму себя.


Лора   (2004-02-19 13:37:00) [15]

Что за рекурсия?


Danilka   (2004-02-19 12:51:00) [16]

[12] Лора   (19.02.04 12:21)
см: [11] Johnmen ©   (19.02.04 12:20)

без рекурсии, хоть на клиенте в дельфях, хоть на сервере в ХП (предпочтительнее) тяжело обойтись.


aga123   (2004-02-19 12:49:00) [17]

Прошу прощения, поправлюсь: RequestLive = false хотел сказать


aga123   (2004-02-19 12:47:00) [18]

Если боишься что очистится поставь RequestLive e Query только чтение, хотя оно и само по умолчанию будет таковым.


Лора   (2004-02-19 12:21:00) [19]

Бегать туда-сюда никто не мешает, просто бегать-то нужно с умом, я должна же помнить какой-то пункт на который мне вернуться в случае, если эта ветка тупиковая. А разве DataSet не связывается с Query или Table, если я их потом почищу для второго раза DataSet не очистится тоже?


Johnmen   (2004-02-19 12:20:00) [20]

Однозначно нужна рекурсивная ХП.
Подробности, как всегда на ibase.ru


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо