![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
access медленно работает? [D5, access]
Донской © (2006-01-23 15:44:00)День добрый! Ух, давно я здесь не появлялся....
Вот код
k:=0;
w:=gettickcount;
first;
while not eof do
begin
k:=k+1;
edit;
SetCurrImpulsesRNumTotalImp.asinteger:=k;
post;
next;
end;
showmessage(floattostr((gettickcount-w)/1000));
Обращение идет к TADODataSet. Количество записей - 107.
Почему сообщение показывает, что цикл выполнялся больше 30 секунд?
Провел наблюдение.
В таблице есть поля blob. Особенные тормоза наблюдаются с теми записями, где эти поля заполнены.
msguns (2006-01-24 14:04:00) [1]Товарисч принципиально не желает разобраться в принципах ADO, вместо этого просто "чикает" компоненты и по максимуму программирует в дизайне (небось по Фаронову учился).
А потом удивляется откуда "тормоза". Пусть у Фаронова и спрашивает.
Плохиш (2006-01-24 11:22:00) [2]
> но хотелось бы всетаки адекватного описания от автора, а
> не "показания" телепатора.
Какие-то несбыточные мечты :-(
PS. хочу хоть в этот раз про "мечты" ошибится ;-)
sniknik (2006-01-24 11:17:00) [3]> Да ладно, уже давно телепатор подсказал, что CommandType = cmdTable ;-) Отсюда и все проблемы со скоростью.
это недостаточное условие... мой телепатор подсказывает что кроме того и ключа в таблице нет. но хотелось бы всетаки адекватного описания от автора, а не "показания" телепатора.
Плохиш (2006-01-24 10:58:00) [4]
> Anatoly Podgoretsky © (24.01.06 09:20) [23]
> До сих пор текст запроса тайна.
Да ладно, уже давно телепатор подсказал, что CommandType = cmdTable;-) Отсюда и все проблемы со скоростью.
Anatoly Podgoretsky (2006-01-24 09:20:00) [5]Донской (23.01.06 17:14) [12]
Ты ждешь невозможного, тебя спрашивают, а ты не отвечаешь, бросаешь какие то оторваные куски кода, а все остальное тайне. До сих пор текст запроса тайна.
Видимо тебя больше процесс потрепаться интересует, чем результат.
Slym (2006-01-24 06:37:00) [6]findfield('RNumTotalImp') - вынеси из цикла
Донской (2006-01-23 17:31:00) [7]> sniknik ©
я понял твою идею, спасибо.
sniknik (2006-01-23 17:30:00) [8]> от этого скорость не меняется, проверено.
а от чего меняется? и если ты знаеш зачем спрашивать? просто поменяй это.
а использование connectionstring неверно в принципе.
Донской (2006-01-23 17:30:00) [9]> Johnmen ©
да, верно...
то есть я открываю таблицу а она сразу в память заносится целиком?
и там уже колбасится?
Johnmen (2006-01-23 17:29:00) [10]>"add all fields")
А надо не all, а только нужные, без блобов.
>Я открываю доступ к таблице выполнив метод tadodatset.Open.
Что приводит к выполнению запроса SELECT * FROM ...
Донской (2006-01-23 17:25:00) [11]> sniknik ©
от этого скорость не меняется, проверено.
Донской (2006-01-23 17:24:00) [12]> Johnmen ©
Я открываю доступ к таблице выполнив метод
tadodatset.Open.
Оттуда и взялось это "чего".
sniknik (2006-01-23 17:22:00) [13]> В его свойствах есть такое "connectionstring"
не используй, вместо него есть connection
Johnmen (2006-01-23 17:20:00) [14]>Так вот в том коде я перехожу к первой записи,
Можно полюбопытствовать, к первой записи чего?
И откуда это "чего" взялось?
Sergey13 (2006-01-23 17:19:00) [15]2[12] Донской (23.01.06 17:14)
> мне важно понять почему так долго.
не похоже. Тебе в [1] еще ответили.
Донской (2006-01-23 17:14:00) [16]Да :) верно try finally.
Не придирайтесь к коду :) мне важно понять почему так долго.
Донской (2006-01-23 17:12:00) [17]все по порядку.
Есть форма TDataModule на которой есть tadodataset.
В его свойствах есть такое "connectionstring"
посредством этого свойства я подключился к базе microsoft access (файл с расширением .mdb)
также tadodataset позволяет на этапе разработки задать поля таблицы (два раза щелкнуть по компоненту на форме, вылезет окно, в котором есть выпадающее меню с пунктом "add all fields")
Так вот если компонент tadodataset называется DataSEt, например, а поле в файле базы называется num к примеру, то в delphi оно получит имя DataSetNum. Оттуда и это зубодробительное SetCurrImpulsesRNumTotalImp.
Оно, это поле, определено как INT.
Никто блобы не тягает. Вам достаточно обратиться к полю по имени, например DataSetNum.asinteger или DataSetNum.value, и вы получите доступ к его значению безо всяких запросов.
Только нужно не забыть переключить tdataset в режим edit или insert, в зависимости от того, что выделаете - правите или вставляете запись.
Так вот в том коде я перехожу к первой записи, и далее до конца таблицы присваиваю определенному полю инкрементирющееся значение.
Вопрос. почему это происходит так долго?
sniknik (2006-01-23 17:12:00) [18]> а для пустого датасета так и останутся контролы отсоединенными...
да нет, он там try finally использует, просто опять не написал в очередном примере...
Desdechado (2006-01-23 17:08:00) [19]а для пустого датасета так и останутся контролы отсоединенными...
msguns (2006-01-23 17:02:00) [20]Совершенно непонятно все, начиная от нумерации неизвесно чего неизвестно как неизвестно для чего и заканчивая тем, что это делается через Table да еще и тяганием всех блобов на клиента.
Кстати, каково происхождение и назначение таинственного поля с зубодробительным названием SetCurrImpulsesRNumTotalImp, также тайна за семью печатями