Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2012, 00:14   #1
Jora_Kornev
Пользователь
 
Аватар для Jora_Kornev
 
Регистрация: 06.01.2009
Сообщений: 72
По умолчанию DBGridEh тормозит при добавлении записи

Подскажите кто знает как правильно настроить DBGridEh (или компоненты подключения - ADOConnection, ADOTable, DataSource) чтобы при добавлении новой записи небыло таких "простоев". Запись добавляется при нажатии на кнопку. Вот кусок кода:
Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
 Table1.Last;
 while Table1.Fields[1].AsString = '' do
  Table1.Prior;
 Table1.Insert;
 Table1.Edit;
 Table1.Fields[1].AsString:=DateToStr(ExtractDate(UnixToDateTime(StrToInt(Edit1.Text))));
 Table1.Fields[2].AsString:=c;
 Table1.Fields[3].AsInteger:=n+1;
 Table1.Fields[4].AsString:=p;
 Table1.Fields[5].AsInteger:=z;
 Table1.Fields[6].AsString:=s;
 Table1.Fields[7].AsString:=TimeToStr(ExtractTime(UnixToDateTime(StrToInt(Edit1.Text))));
 if prostoi>deltatime then
 Table1.Fields[8].AsString:=TimeToStr(deltatime) else
  Table1.Fields[9].AsString:=TimeToStr(deltatime);
 Table1.Post;

end;
С 5-ю записями работает отлично, но когда их становится 50 то ожидать после клика на кнопку приходится долго очень. А таких записей в таблице может быть несколько десятков тысяч... Подскажите как правильно организовать доступ к ним, так как нужно оставить возможность менять значения полей любой записи.

Да, чуть не забыл СУБД - Microsoft SQL Server 2008 R2
ася: тристадевяносто 068 ноль восемь шесть

Последний раз редактировалось Jora_Kornev; 16.02.2012 в 00:18.
Jora_Kornev вне форума Ответить с цитированием
Старый 16.02.2012, 00:45   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

1. И несколько десятков тысяч собираетесь через ADOTable? Есть ADOQuery, запросом брать нужную порцию записей (но не тысячи)
2. Не пойму смысла искать от конца первую запись с не пустым полем.
3. После Insert Edit не надо.
4. Вместо Insert лучше Append
Основной тормоз пока записей не очень много пункт 2
Когда их станет очень много и пункт 1 станет тормозом, да и памяти будет жрать много, поскольку ADOTable все записи на клиента тянет из базы
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.02.2012, 01:04   #3
Jora_Kornev
Пользователь
 
Аватар для Jora_Kornev
 
Регистрация: 06.01.2009
Сообщений: 72
По умолчанию

Пока что не помогло. Буду пробовать через BDE подключаться, там есть свойство у TQuery UpdateMode со значением upWhereChanged. Попробую, потом отпишусь.
ася: тристадевяносто 068 ноль восемь шесть
Jora_Kornev вне форума Ответить с цитированием
Старый 16.02.2012, 08:08   #4
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

Я вот или дурак или не понимаю. Зачем использовать Microsoft SQL Server 2008 R2 и работать методами BDE. Типа Post, Edit, Insert?
T-SQL для вас рожей не вышел?
Вы пытаетесь блоху подковать, но при этом пытаетесь использовать разводной ключ.
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 16.02.2012, 08:27   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Да, чуть не забыл СУБД - Microsoft SQL Server 2008 R2
Вах!!! И ты имея под рукой такого многогранного монстра реализуешь сей алгоритм в Делфи?
Не думаешь ли ты что стоит сделать процедуру БД, в нее вынести алгоритм внесения данных, а не напрягать циклами клиента?
Цитата:
while Table1.Fields[1].AsString = '' do
Table1.Prior;
Из приведенного тобой куска кода я так и не понял зачем ты ищещь с конца какую-то запись, если при вставке не используешь ее данные?
Цитата:
но при этом пытаетесь использовать разводной ключ.
Не ключ а промышленный кузнечный пресс
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.03.2012, 09:17   #6
Jora_Kornev
Пользователь
 
Аватар для Jora_Kornev
 
Регистрация: 06.01.2009
Сообщений: 72
По умолчанию

Компонент TADODataSet решил эту проблему, теперь не тормозит.
ася: тристадевяносто 068 ноль восемь шесть
Jora_Kornev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка при добавлении записи kuzmich БД в Delphi 3 20.10.2011 03:55
Ошибка при добавлении записи Itachi БД в Delphi 1 10.06.2011 13:30
IE тормозит при добавлении данных на страницу Antonxaaa JavaScript, Ajax 4 27.07.2010 10:40
делфи ругается при добавлении записи Cannibal БД в Delphi 8 23.04.2010 15:49
Проверка при добавлении записи Tanya2008 БД в Delphi 3 22.04.2009 10:07