Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.02.12;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.744 c
1-1136897933
m_mike
2006-01-10 15:58
2006.02.12
Программа мешает завершению работы windows


2-1138253763
Radix
2006-01-26 08:36
2006.02.12
Сделать выборку пропущенных номеров из БД на SQL


1-1137230335
V-A-V
2006-01-14 12:18
2006.02.12
Импорт справочника товара в 1с


2-1138118873
K_Lock
2006-01-24 19:07
2006.02.12
Ошибка - Несоответствие типов


11-1119341023
RA
2005-06-21 12:03
2006.02.12
Обработка сообщений в Graph-контролах





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский