Текущий архив: 2006.02.12;
Скачать: CL | DM;
Внизaccess медленно работает? Найти похожие ветки
← →
Донской (2006-01-23 15:44) [0]День добрый! Ух, давно я здесь не появлялся....
Вот код
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. Особенные тормоза наблюдаются с теми записями, где эти поля заполнены.
← →
Плохиш © (2006-01-23 15:48) [1]Не включай blob-поля в запрос.
← →
Донской (2006-01-23 15:57) [2]Запроса как такового нет!
я просто в цикле обновляю поля - нумерация записей (нужна для кое-чего)
while not eof do
begin
edit
SetCurrImpulsesRNumTotalImp.asinteger:=k;
post
next
end
и все!
← →
Johnmen © (2006-01-23 16:10) [3]>Запроса как такового нет!
Как это нет????? Откуда же поле SetCurrImpulsesRNumTotalImp?
← →
atruhin © (2006-01-23 16:17) [4]Не используй ADOTable, см. ADODataset
← →
sniknik © (2006-01-23 16:45) [5]DisableControls в конце, после цикла EnableControls.
> нумерация записей (нужна для кое-чего)
у датасета с клиентским курсором адекватный RecNo... даже при фильтрах и сортировках (вроде было так, давно не проверял)
← →
Донской (2006-01-23 17:00) [6]> Johnmen ©
SetCurrImpulsesRNumTotalImp из tadodataset
> atruhin ©
> Не используй ADOTable, см. ADODataset
я его и использую
> sniknik ©
disablecontrols и enablecontrols я использую, просто не написал в примере.
Вот полный код
var SetCurrImpulses : tadodataset;
with SetCurrImpulses do
begin
DisableControls;
if isempty then
exit;
k:=0;
w:=gettickcount;
first;
while not eof do
begin
k:=k+1;
edit;
findfield("RNumTotalImp").asinteger:=k;
post;
next;
end;
showmessage(floattostr((gettickcount-w)/1000));
enablecontrols;
end;
← →
Anatoly Podgoretsky © (2006-01-23 17:01) [7]Где текст запроса?
← →
msguns © (2006-01-23 17:02) [8]Совершенно непонятно все, начиная от нумерации неизвесно чего неизвестно как неизвестно для чего и заканчивая тем, что это делается через Table да еще и тяганием всех блобов на клиента.
Кстати, каково происхождение и назначение таинственного поля с зубодробительным названием SetCurrImpulsesRNumTotalImp, также тайна за семью печатями
← →
Desdechado © (2006-01-23 17:08) [9]а для пустого датасета так и останутся контролы отсоединенными...
← →
sniknik © (2006-01-23 17:12) [10]> а для пустого датасета так и останутся контролы отсоединенными...
да нет, он там try finally использует, просто опять не написал в очередном примере...
← →
Донской (2006-01-23 17:12) [11]все по порядку.
Есть форма TDataModule на которой есть tadodataset.
В его свойствах есть такое "connectionstring"
посредством этого свойства я подключился к базе microsoft access (файл с расширением .mdb)
также tadodataset позволяет на этапе разработки задать поля таблицы (два раза щелкнуть по компоненту на форме, вылезет окно, в котором есть выпадающее меню с пунктом "add all fields")
Так вот если компонент tadodataset называется DataSEt, например, а поле в файле базы называется num к примеру, то в delphi оно получит имя DataSetNum. Оттуда и это зубодробительное SetCurrImpulsesRNumTotalImp.
Оно, это поле, определено как INT.
Никто блобы не тягает. Вам достаточно обратиться к полю по имени, например DataSetNum.asinteger или DataSetNum.value, и вы получите доступ к его значению безо всяких запросов.
Только нужно не забыть переключить tdataset в режим edit или insert, в зависимости от того, что выделаете - правите или вставляете запись.
Так вот в том коде я перехожу к первой записи, и далее до конца таблицы присваиваю определенному полю инкрементирющееся значение.
Вопрос. почему это происходит так долго?
← →
Донской (2006-01-23 17:14) [12]Да :) верно try finally.
Не придирайтесь к коду :) мне важно понять почему так долго.
← →
Sergey13 © (2006-01-23 17:19) [13]2[12] Донской (23.01.06 17:14)
> мне важно понять почему так долго.
не похоже. Тебе в [1] еще ответили.
← →
Johnmen © (2006-01-23 17:20) [14]>Так вот в том коде я перехожу к первой записи,
Можно полюбопытствовать, к первой записи чего?
И откуда это "чего" взялось?
← →
sniknik © (2006-01-23 17:22) [15]> В его свойствах есть такое "connectionstring"
не используй, вместо него есть connection
← →
Донской (2006-01-23 17:24) [16]> Johnmen ©
Я открываю доступ к таблице выполнив метод
tadodatset.Open.
Оттуда и взялось это "чего".
← →
Донской (2006-01-23 17:25) [17]> sniknik ©
от этого скорость не меняется, проверено.
← →
Johnmen © (2006-01-23 17:29) [18]>"add all fields")
А надо не all, а только нужные, без блобов.
>Я открываю доступ к таблице выполнив метод tadodatset.Open.
Что приводит к выполнению запроса SELECT * FROM ...
← →
Донской (2006-01-23 17:30) [19]> Johnmen ©
да, верно...
то есть я открываю таблицу а она сразу в память заносится целиком?
и там уже колбасится?
← →
sniknik © (2006-01-23 17:30) [20]> от этого скорость не меняется, проверено.
а от чего меняется? и если ты знаеш зачем спрашивать? просто поменяй это.
а использование connectionstring неверно в принципе.
← →
Донской (2006-01-23 17:31) [21]> sniknik ©
я понял твою идею, спасибо.
← →
Slym © (2006-01-24 06:37) [22]findfield("RNumTotalImp") - вынеси из цикла
← →
Anatoly Podgoretsky © (2006-01-24 09:20) [23]Донской (23.01.06 17:14) [12]
Ты ждешь невозможного, тебя спрашивают, а ты не отвечаешь, бросаешь какие то оторваные куски кода, а все остальное тайне. До сих пор текст запроса тайна.
Видимо тебя больше процесс потрепаться интересует, чем результат.
← →
Плохиш © (2006-01-24 10:58) [24]
> Anatoly Podgoretsky © (24.01.06 09:20) [23]
> До сих пор текст запроса тайна.
Да ладно, уже давно телепатор подсказал, что CommandType = cmdTable ;-) Отсюда и все проблемы со скоростью.
← →
sniknik © (2006-01-24 11:17) [25]> Да ладно, уже давно телепатор подсказал, что CommandType = cmdTable ;-) Отсюда и все проблемы со скоростью.
это недостаточное условие... мой телепатор подсказывает что кроме того и ключа в таблице нет. но хотелось бы всетаки адекватного описания от автора, а не "показания" телепатора.
← →
Плохиш © (2006-01-24 11:22) [26]
> но хотелось бы всетаки адекватного описания от автора, а
> не "показания" телепатора.
Какие-то несбыточные мечты :-(
PS. хочу хоть в этот раз про "мечты" ошибится ;-)
← →
msguns © (2006-01-24 14:04) [27]Товарисч принципиально не желает разобраться в принципах ADO, вместо этого просто "чикает" компоненты и по максимуму программирует в дизайне (небось по Фаронову учился).
А потом удивляется откуда "тормоза". Пусть у Фаронова и спрашивает.
Страницы: 1 вся ветка
Текущий архив: 2006.02.12;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.038 c