Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi перенос данных из одной базы данных в другу.

Автор: VasyOK
Дата сообщения: 03.06.2009 09:52
Добрый день!

Есть две базы данных: test1 (локальный комп), test2 (веб-сервер).

Используя компоненты ADOQuery, ADOConnection, DataSource и DBGrid.
Я выполняю запрос в test1 получаю таблицу (select) и передаю ее строки в test2 (insert).

При передаче 10 строк все работает нормально. А при передаче 300-500 начинает тормозить.

Подскажите пожайлуста как решить такую проблему.

Автор: dneprcomp
Дата сообщения: 03.06.2009 19:59
VasyOK
Передача через грид? Если да, то время уходит на перерисовку и отработку грида при добавлении каждой строки. Попробуй найти у грида свойство redraw(или как-то похожее). Или просто на время заполнения сделай его нивидимыи.
А вобще, может быть все что угодно. Без кода не видно. Без кода всей програмы. Может у тебя на добавку строки запускается функция проверки базы на дубликаты. К примеру
Автор: ShIvADeSt
Дата сообщения: 04.06.2009 01:11
Нафига данные в гриду выводить, если их надо сразу передавать в другую базу? Просто делай примерно так

AdoQuery2.SQL.Text(format('insert bla bla %s, %s...',[ADOQuery1.[Fields[1]]...]);
при этом пробегаясь по всем записям первой таблицы через first next вместо %s желательно использовать соотв типы для полей.
Автор: VasyOK
Дата сообщения: 04.06.2009 07:28
ShIvADeSt,


Цитата:
AdoQuery2.SQL.Text(format('insert bla bla %s, %s...',[ADOQuery1.[Fields[1]]...]);
при этом пробегаясь по всем записям первой таблицы через first next вместо %s желательно использовать соотв типы для полей.


Так и делаю

dneprcomp

Цитата:
Или просто на время заполнения сделай его нивидимыи.

Действительно быстрее работает.

Спасибо


Автор: Alexy780
Дата сообщения: 17.06.2009 12:12
1. ADOQuery.CacheSize следует делать больше, чем значение по умолчанию (1)
2. Вместо описанного dneprcomp обычно перед началом операций с наборами данных делается ADoQuery.DisableControls, а по окончанию всех операций - ADOQuery.EnableControls.
3. Использование ADOTable вместо ADOQuery, в режиме ADOTable.TableDirect:=true, дополнительно даст выигрыш в скорости процентов на 30-50.
Автор: AlexNMelnikov
Дата сообщения: 17.06.2009 14:59
Чтоб не было эффекта "торможения" добавь в цикл перебора записей следующее

Код: Application.ProcessMessages;
Автор: AlmazSpb2
Дата сообщения: 18.06.2009 00:19

Цитата:
Или просто на время заполнения сделай его нивидимыи.

Зачем невидимым-то ?
AdoQuery.DisableControls;
try
<...>
finally
AdoQuery.EnableControls;
end;

Страницы: 1

Предыдущая тема: CUDA - использование видеокарт для расчетов


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.