Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.53 MB
Время: 0.05 c
15-1137657413
Kerk
2006-01-19 10:56
2006.02.12
Поясните плиз вдовца


1-1137063029
Ega23
2006-01-12 13:50
2006.02.12
Как узнать ParentFont?


3-1134316431
kaif
2005-12-11 18:53
2006.02.12
Замучился с XDB на порту 8080 ORACLE 9i - конфликт с Tomcat


15-1138064297
Andy BitOff
2006-01-24 03:58
2006.02.12
BDS 2006


2-1138384768
Erudit
2006-01-27 20:59
2006.02.12
Как открыть с помощью FileOpen?