![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создание таблиц [D5, IB5.x]
Лора © (2004-02-19 08:59:00)Здравствуйте! Подскажите, есть ли возможность в Делфи создать программно рабочую область. То есть как, например в фокспро можно написать:
nnn=1
select naim2 from nsi
where naim1=a into cursor t&nnn,
где t&nnn- это название рабочей области, а nnn-это счетчик
Zacho (2004-02-19 12:04:00) [21]Ну и кто мешает например, просто выбрать всю таблицу а потом бегать по датасету как заблагорассудится ? В дельфи для работы с данными из БД существует такая вещь как набор данных (DataSet). Почитай что-нибудь про это.
Лора (2004-02-19 11:53:00) [22]Ну не получилось у меня хранимой процедурой. А вот через создание рабочих областей в фокспро практически получилось. Просто большая часть программы уже реализована на делфи и эту часть тоже нужно бы на делфи сделать. Тока пока не пойму как.
Таблица, которая используется для этого одна-это справочник участков станций, наименовае входа, наименование выхода и расстояние:
naim1 naim2 Rast
Джамбул Луговая 500
Луговая Чу 300
Луговая Рыбачье 310
Чу А-А 1 250
Чу Кияхты 100
А-А 1 А-А 2 100
А-А 1 актогай 600
Актогай Семипалатинск 500
Мне необходимо От Джамбула нарисовать маршрут до Семипалатинска: Джамбул-Луговая-Чу-А-А1-Актогай-Семипалатинск.
и т.д.
Zacho (2004-02-19 11:41:00) [23]Не вчитывался в условие задачи, но могу сказать, что в IB есть хранимые процедуры, а в языке ХП и триггеров есть такая конструкция - FOR SELECT .. INTO .. DO ..
Хотя вполне возможно, что это можно сделать и одним запросом, без ХП.
Приведи структуру таблиц, пример данных и желаемый результат.
Лора (2004-02-19 11:37:00) [24]Извините, я уходила по делам.
Мне нужно найти маршрут. Есть станция отпарвления и станция назначения, необходима найти те станции, через которые пройдет поезд. Есть участки в справочнике: входная станция и выходная. Но те станции, которые находятся мехду пунктом отправления и назначения, могут иметь ответвления в другую сторону. То есть таким образом выглядит:
станция отправления Джамбул станция назначения Семипалатинск
маршрут выглядит: Джамбул-Луговая-Чу-Моинты-Актогай-Семипалатинск.
Но если я выбираю из справочника станцию отправления Джамбул, то их будет несколько, станций назначения от Джамбул тоже будет несколько, поэтому мне я и делаю select несколько раз пок ане найду Семипалатинск, но я же не знаю сколкьо раз мне его придется делать в цикле, поэтому и не могу создавать столько таблиц через create. Просто знаю, что в фокспро есть такая возможность создать как бы виртуальную таблицу, а потом при закрытии программы она изчезает, то есть ее не надо удалять, просто закрыть и она изчезтнет.
Есть ли такое в делфи?
Desdechado (2004-02-19 10:46:00) [25]если речь идет о выборке из БД, которая как-то на клиенте проименована, то это и есть объект TQuery, который содержит результаты выборки
Danilka (2004-02-19 09:49:00) [26]а чем простой запрос не катит? результат его выполнения отдается клиенту и не хранится на сервере, скока его не проси об этом.
Соловьев (2004-02-19 09:46:00) [27]2 Лора
создай таблицу а потом и удали ее. Как? Drop table
Johnmen (2004-02-19 09:42:00) [28]Зачем это ? Что будешь делать с этим ?
Лора (2004-02-19 09:39:00) [29]Нет, не создание таблицы конкретно в базе данных, а как бы область наподобие таблицы, которую потом можно закрыть и она не остается в базе. То есть она создается на то время пока программа работает.
Zacho (2004-02-19 09:31:00) [30]Объясни, что такое "рабочая область" Ни в Дельфи, ни в IB такого понятия нет.
А создать таблицы - конечно можно, выполнить запрос CREATE TABLE .. , подробнее читай Data Definition Guide,
Лора (2004-01-23 13:46:00) [31]Здравствуйте!
По вчерашней проблеме написала процедурку, но она затыкается на разветвлении:
здесь выбираю все станции по станции Джамбул, то есть выбираются такие варианты: Джамбул-Каратау, Джамбул-Луговая, Джамбул-Чимкент. Если по первой ветке не нашлось ничего, то переходит на следующую запись (Джамбул-Луговая) и ищет по ней и т.д.
Но после луговой идет разветвление на 2 станции и он их не просматривает, берет только первую и если она тупиковая, то он переходит на запись Джамбул-Чимкент, хотя нужно пройтись по обоим вариантам.
procedure TForm1.Button5Click(Sender: TObject);
begin
stan1:=edit1.text;
stan2:=edit2.text;
form1.qq1.close;
form1.qq1.SQL.clear;
form1.qq1.SQL.add('select * from stanzii');
form1.qq1.SQL.add('where naim1=:vh');
form1.qq1.params[0].value:=stan1;
form1.qq1.open;
while not (form1.qq1.eof) do begin
if form1.qq1['naim2']<>stan2 then begin
aa:=stan2;
stan1:=form1.qq1['naim2'];
poisk (stan1, stan2);
form1.qq1.next;
strok:='';
end;
end;
end;
procedure poisk (stan1, stan2:string);
begin
strok:=strok+stan1;
form1.qq2.close;
form1.qq2.SQL.clear;
form1.qq2.SQL.add('select * from stanzii');
form1.qq2.SQL.add('where naim1=:vh');
form1.qq2.params[0].value:=stan1;
form1.qq2.open;
while not (form1.qq2.eof) do begin
if form1.qq2['naim2']<>stan2 then begin
aa:=stan2;
poisk (form1.qq2['naim2'],aa);
form1.qq2.next;
end;
end;
end;
Подскажите, что неправильно? Первый раз пишу рекурсию, может и напутала что-то
Danilka (2004-01-23 13:35:00) [32][27] SPIRIT © (19.02.04 15:23)
да, вероятно так будет быстрее: либо сделать udf которая забирает таблицу к себе и ее шерстит по этому алгоритму, либо на клиенте, загрузить полностью таблицу и обработать ее на клиенте по этому алгоритму.
Но все равно, правило: среднее время поиска наименьшего пути пропорционально квадрату количества станций останется.