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

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

access медленно работает? [D5, access]


Страницы:   1 2

Донской ©   (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, также тайна за семью печатями


Страницы:   1 2

Наверх

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