Николай |
Отправлено: 06.09.2004, 12:29 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Необходимо заполнить базу данных. Я делаю это так:
Table1->Active = true;
Table1->Edit();
в цикле
{
Table1->Insert();
B1=...;
Table1-> FieldByName("Date")->AsString = B1;
}
Table1->Post();
При загрузке тысячи строк происходят жуткие тормоза, может я что-то не правильно делаю?
|
|
AVC |
Отправлено: 06.09.2004, 13:02 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Вам немного поможет
TField *fld = Table1-> FieldByName("Date");
в цикле ... fld->AsString = B1;
Какая СУБД ?
|
|
Николай |
Отправлено: 06.09.2004, 13:24 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Используется автономная база данных, в системе Paradox. |
|
Konstantine |
Отправлено: 06.09.2004, 14:34 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
Чтоб тормоза были не очень заметны вкинь в цикл строку:
CODE | Application->ProccessMessages();
|
Быстрее не станет, но хоть окно будет прорисовывать нормально.
|
|
AVC |
Отправлено: 06.09.2004, 14:43 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Подозреваю, что на Paradox'е быстрее не станет. |
|
Николай |
Отправлено: 06.09.2004, 14:46 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Может кто подскажет, как сделать быстрее |
|
Николай |
Отправлено: 06.09.2004, 14:55 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
При загрузке 5000 строк можно сходить пообедать, еще и время останется |
|
xTrim |
Отправлено: 06.09.2004, 15:08 |
|
Машинист паровоза
Группа: Участник
Сообщений: 208
|
Если есть отображение БД в визуальные компоненты — отключать. Прибавит скорости неплохо.
CODE |
DataSource1->DataSet = NULL;
//заполнение
DataSource1->DataSet = Table1;
|
|
|
AVC |
Отправлено: 07.09.2004, 10:23 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
А что у вас за техника?
Тестовый пример на копии таблицы Country.db с именем Test.db из BCDEMOS
CODE |
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
TDataSet *ds = TblPdx;
DSr->DataSet = ds;
if (ds->Active) ds->Active = false;
QryPdx->SQL->Text = "Delete From test.db";
QryPdx->ExecSQL();
TDateTime dt0;
ds->DisableControls(); try {
ds->Active = true;
TField *fName = ds->FieldByName("Name");
TField *fCap = ds->FieldByName("Capital");
dt0 = Now();
for (int i=0; i < 10000; i++)
{ ds->Insert();
fName->AsString = AnsiString(i);
fCap ->AsString = FormatDateTime("hh:nn:ss", Now());
ds->Post();
}
} __finally { ds->EnableControls(); }
Memo1->Lines->Text =
AnsiString("Выполнено за ") +
FormatFloat("0.0", double(Now() — dt0) * (24*60*60)) +
" sec";
|
Дает результат для 10 000 строк
С разрешенными контролами: Выполнено за 21.9 sec
С запрещенными контролами: Выполнено за 0.5 sec
Может вас держит система? |
|
Николай |
Отправлено: 08.09.2004, 13:18 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Спасибо. С запрещенными контролами выходит нормально. |
|
AVC |
Отправлено: 08.09.2004, 13:31 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE |
При загрузке 5000 строк можно сходить пообедать, еще и время останется
|
Я бы не успел пообедать за 15 секунд (30 / 2) |
|
Николай |
Отправлено: 08.09.2004, 13:41 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 55
|
Нее, тогда были проблемы и с системой. |
|