Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Как ускорить работу базы?


Автор: FlaGmaN 18.6.2007, 16:16
Ребята! имеется база *.mdb просто ограменная. содержание примрно такое [N,FIO,dom и тд]. Сама задача: загрузить базу в Грид, произвести поиск по нужному столбцу. Все зделал, но как извесно тормозит нереально. особенно когда ищешь интерактивным поиском. Как можно ускорить Работу программы. если можно разъяснить все подробно и  smile . если кто знает как, прошу поделиться!

Автор: Bose 19.6.2007, 01:55
тормозит потому что всё загружаешь. Сначала фильтруй(вместо своего поиска) smile , а потом уже загружай в грид. Будет быстрее

Автор: FlaGmaN 19.6.2007, 07:23
нет такое решение не подойдет. необходимо чтобы вся база была в гриде, а только потом по ней поиск осуществлялся. может есть какие предложения?

Автор: Rodman 19.6.2007, 08:59
1. Обязательно ли юзать Access???
2. Не уверено, но возможно если работать с данными грида, будет быстрее...


Цитата(FlaGmaN @  18.6.2007,  15:16 Найти цитируемый пост)
*.mdb просто ограменная

эта СУБД не расчитана на такие базы...

Автор: kobra 19.6.2007, 09:11
Цитата(FlaGmaN @  19.6.2007,  07:23 Найти цитируемый пост)
необходимо чтобы вся база была в гриде
какава необхадимость? вь чем выгода? 
можно загружать данные в потоке, но всеравно, пока не загрузятся полностью, поиск вести будет безсмысленно.

Автор: Данкинг 19.6.2007, 11:31
Если только на несколько таблиц разбить. smile 

Автор: Bose 19.6.2007, 13:23
Цитата(FlaGmaN @  19.6.2007,  07:23 Найти цитируемый пост)
нет такое решение не подойдет. необходимо чтобы вся база была в гриде, а только потом по ней поиск осуществлялся. может есть какие предложения?

Тогда давай по-другому.

Что значит:

1) имеется база *.mdb просто ограменная(цифры давай). 
2) Какой Грид используешь? 
3) Как реализован интерактивный поиск?
4) Что значит тормозит(объёмы данных, время, машина)? 

п.с. хочешь подробных разъяснений, задавай подробные вопросы. smile 

Автор: FlaGmaN 19.6.2007, 13:45
Цитата(Bose @ 19.6.2007,  13:23)
Цитата(FlaGmaN @  19.6.2007,  07:23 Найти цитируемый пост)
нет такое решение не подойдет. необходимо чтобы вся база была в гриде, а только потом по ней поиск осуществлялся. может есть какие предложения?

Тогда давай по-другому.

Что значит:

1) имеется база *.mdb просто ограменная(цифры давай). 
2) Какой Грид используешь? 
3) Как реализован интерактивный поиск?
4) Что значит тормозит(объёмы данных, время, машина)? 

п.с. хочешь подробных разъяснений, задавай подробные вопросы. smile

База 264426 записей. 4 столбца. 
грид самый обычный. TDBGrid. 
поиск:
Код

procedure TForm1.Edit1Change(Sender: TObject);
begin
Table1.Locate('FIO',Edit1.Text,
              [loCaseInsensitive,loPartialKey]);
if edit1.Text='' then
table1.First;              {
Table1.SetKey;
Table1.FieldByName('FIO').AsString:=Edit1.Text;
Table1.GotoNearest;                              }
end;

end.

тормозит Значит долго загружается программа, ну и естественно поиск долго происходит в связи с оъемом данных

Автор: Bose 19.6.2007, 16:20
Цитата(FlaGmaN @  19.6.2007,  13:45 Найти цитируемый пост)
 264426 записей. 4 столбца. 

загружать всё это в DBGrid - это страшно. 

при этом условии:
Цитата(FlaGmaN @  19.6.2007,  07:23 Найти цитируемый пост)
необходимо чтобы вся база была в гриде, а только потом по ней поиск осуществлялся.

я не знаю чем помочь. 

п.с. ммммм... как вариант можно использовать в проекте FastMem и Fastcode библиотеки. Производительность может подрасти процентов на 10-30%. На форуме обсуждались.

Автор: FlaGmaN 19.6.2007, 16:38
спасибо
остается только плакать

Автор: Bose 20.6.2007, 12:58
Цитата(FlaGmaN @  19.6.2007,  16:38 Найти цитируемый пост)
остается только плакать

Нужно нормально проектировать. 

Автор: Savek 20.6.2007, 16:50
1. Это не огромная, и даже не большая база. Если приблизишься к миллиону, тогда подумай о замене
2. Замени ADOTable на ADODataSet и перепроектируй логику работы
3. Индексируй таблицу

Шансы на успех реальные smile 

Цитата(FlaGmaN @  19.6.2007,  07:23 Найти цитируемый пост)
нет такое решение не подойдет. необходимо чтобы вся база была в гриде

Разумное объяснение этому есть? Срмневаюсь

Автор: FlaGmaN 21.6.2007, 07:57
Цитата(Savek @  20.6.2007,  16:50 Найти цитируемый пост)
Разумное объяснение этому есть? Срмневаюсь


Представь случай! приходит начальник говорот хочу чтоб было так. Хочу и все. 

Я ему. ну чтож... Любой каприз. чистотеоретическия я свою задачу выполнил (база и поиск есть), но это не есть нормальная программа. 

Будо произвоидть поиск по дазе. посмотрю чего получится 

Автор: mutex 21.6.2007, 17:51
FlaGmaN, попробуйте открыть этой прогой: http://wincmd.ru/download.php?id=xBaseView
Если её скорость устроить, могу дать план действий.

Автор: FlaGmaN 22.6.2007, 08:43
Кто нибудь знает как самому задавать блинну поля в DBgrid?

Автор: FlaGmaN 22.6.2007, 12:24
Не кто не знает?..................

Автор: aktuba 22.6.2007, 12:31
Цитата

Кто нибудь знает как самому задавать блинну поля в DBgrid? 


Я, например, не понял вопрос. Какие еще поля в DBGrid????

Автор: Savek 22.6.2007, 14:31
Цитата(FlaGmaN @  22.6.2007,  08:43 Найти цитируемый пост)
Кто нибудь знает как самому задавать блинну поля в DBgrid?

Наверное ты хотел спросить про ширину столбца? Тогда так
Код

DBGrid1.Columns[1].Width:=20;

Автор: FlaGmaN 25.6.2007, 15:00
Да спасибо. я это и имел в виду. 

Автор: Akella 25.6.2007, 15:56
а если базу перекинуть в другой "формат", так сказать, Paradox, FireBird

Добавлено через 1 минуту и 1 секунду
проиндексировать, воспользоваться FIB+, которые работают значительно быстрее стандартных IBX

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)