Текущий архив: 2004.06.13;
Скачать: CL | DM;
ВнизТормозит АДО Найти похожие ветки
← →
Соловьев © (2004-05-25 10:53) [0]Использую связку мастер-детайл-субдетайл:
мастер TADODataSet
select * from city
Prepered = true
детайл TADODataSet
select * from city
Prepered = true
субдетайл TADOQuery
select * from distance where fk_city_x = :id_x and fk_city_y= :id_y
Prepered = true
Записей в мастере 15. Я бегусь по ним в цыкле while not Eof, в теле цыкла открываю детайл. А тут еще один цыкл - тут уже срабатывает запрос субдетайла. Результат запроса заношу в StringGrid - это я трою матрицу расстояний между городами. Весь процесс занимает порядка минуты. Неужели АДО такой тормознутый? OS - W2kSp4
← →
Соловьев © (2004-05-25 13:07) [1]Забыл, СУБД - Access 97
P.S. что с форумом :(
← →
Соловьев © (2004-05-25 13:52) [2]Еще, тачка - Celleron 700, 256 MB
Мож кто сталкивался?
← →
Rouse_ © (2004-05-25 14:07) [3]Курсор поставь серверный и
TADOTable(TADOQuery).TableDirect := True;
мне во всяком случае помогло.
Еще как вариант после выполнения Query передаю результат в таблицу и работаю уже через нее, намного быстрее
ADOTable.RecordSet := ADOQuery.RecordSet;
← →
sniknik © (2004-05-25 14:11) [4]посчитай сколько раз перезапросы происходят, и сколько времени на один тратится, удивление и пройдет.
мастер и детайл одна таблица? это правильно?
сделай индексы по полям fk_city_x, fk_city_y время уменьшится даже в том виде что сейчас (если конечно этих индексов счас нет).
зачем такие сложности, множественные прогоны, нельзя сделать в 1 запрос?
← →
Соловьев © (2004-05-25 14:23) [5]
> Курсор поставь серверный и
> TADOTable(TADOQuery).TableDirect := True;
делал - тот же результат :(
> мастер и детайл одна таблица? это правильно?
да надо постоить матрицу растояний где по Х и Y - названия городов, а ячейки - растояния между ними
> сделай индексы по полям fk_city_x, fk_city_y время уменьшится
> даже в том виде что сейчас (если конечно этих индексов счас
> нет).
сразу сделал
> зачем такие сложности, множественные прогоны, нельзя сделать
> в 1 запрос?
как?
← →
sniknik © (2004-05-25 14:41) [6]> как?
а я знаю? как оно там у тебя считается, и что в данных. в общем,... ну там делаеш связки (JOIN), подзапросы, агрегатныеми функциями... так чтобы в запросе только результат передавать (то что в стринг грид пишеш). тогда будет быстро.
а счас у тебя на открытие одной строки мастера куча перезапросов, и самого себя что опять вызывает перезапросы субдетайл... (не так?)
еще, почему
> СУБД - Access 97? а не 2000/XP? 97 устаревший и глючный формат.
и как связь идет? ADO это да понятно, но движок?
← →
Соловьев © (2004-05-25 15:12) [7]
> а я знаю? как оно там у тебя считается, и что в данных.
> в общем,... ну там делаеш связки (JOIN), подзапросы, агрегатныеми
> функциями... так чтобы в запросе только результат передавать
> (то что в стринг грид пишеш). тогда будет быстро.
2 таблицы
1-я
id-код города
name - имя города
2-я
fk_city_x - код города по х
fk_city_y - код города по y
distance - растояние
надо получить таблицу вида матрицы X на Y - где X=Y= количество городов
а в ячейках расстояние от X до Y
Вот и все - как можно это в один запрос впиндюрить?
На ФБ - хранимой бы процедурой, а тут?
> и как связь идет? ADO это да понятно, но движок?
Microsoft.Jet.OLEDB.4.0
почему Access97 -? Просто дома такой офис стоит... А там тачка послабее чтобы офис ХР ставить...
← →
Sandman25+1 (2004-05-25 15:20) [8]Можно попробовать
select X.name, Y.name, D.distance
from city X, city Y, dist D
where D.fk_city_x=X.id
and D.fk.city_y=Y.id
А потом пробежаться по датасету и присвоить соответствующие ячейки грида
← →
Соловьев © (2004-05-25 15:55) [9]
> [8] Sandman25+1 (25.05.04 15:20)
Да, так лучше :) Сенькс
Что-то у меня голова не варит...
← →
Sandman25+1 (2004-05-25 15:59) [10]Неправда, очень даже варит...
У любого человека иногда может случиться так, что сложное решение закроет собой простое.
Страницы: 1 вся ветка
Текущий архив: 2004.06.13;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.022 c