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


Автор: Данкинг 24.7.2009, 23:30
Есть база Access размером 1.5 гига. Подключаюсь к ней, разумеется, через ADO. Понятное дело, что подключение к БД такого объёма происходит очень долго, вот сейчас минуты 2 висел. Можно ли в принципе как-то ускорить этот процесс? 
(Да, знаю, что лучше использовать другую СУБД, это можно не говорить smile ).
 smile 

Автор: Keeper89 25.7.2009, 13:13
Могу только посоветовать пробежаться по вот этим рекомендациям: http://www.blueclaw-db.com/access_consultant_rapid.htm. 
З.Ы. А так - другая СУБД smile

Добавлено через 2 минуты и 45 секунд
Вот еще ссылка, может и там есть что-то подходящее: http://www.blueclaw-db.com/speed_up_access_forms.htm 

Автор: Данкинг 25.7.2009, 13:28
Keeper89, это не то. smile Там или как ускорить работу с БД (т.е. поиск и т.п.) или как ускорить подключение таблиц к формам. smile 

Автор: Keeper89 25.7.2009, 14:20
Вообще 2 минуты - это странно. Вот есть у меня такая вещь как БСЭ, в электронном виде конечно. Так там 3 базы по 700 Мб., а какой-либо длительной загрузки я вообще не видел... 

Автор: Данкинг 25.7.2009, 14:25
Цитата(Keeper89 @  25.7.2009,  15:20 Найти цитируемый пост)
Вообще 2 минуты - это странно

Может, я преувеличил, хотя и от загруза процессора зависит. Сейчас вот 55 секунд открывалась. smile 

Цитата(Keeper89 @  25.7.2009,  15:20 Найти цитируемый пост)
Так там 3 базы по 700 Мб., а какой-либо длительной загрузки я вообще не видел...  

MDB тоже? smile А записей, как я понимаю, столько, сколько статей в БСЭ? У меня она в обычном виде есть, там 31 том, что ли.

Автор: Keeper89 25.7.2009, 14:29
Ага, тоже MDB, вроде как написано перевод в электронный вид всей энциклопедии. 

Автор: Данкинг 25.7.2009, 23:21
Н-да, а при увеличении объёма БД вылезает ошибка "недостаточно памяти". smile Видимо, из .mdb всё сразу в оперативку читается, что ли, зачем-то. smile Тогда действительно от идеи .mdb лучше отказаться.

В общем, будем считать тему закрытой, хотя если у кого-то возникнут идеи по решению сабжевой проблемы - пишите, не стесняйтесь. smile Попробую переделать базу под Firebird; осталось выяснить, как на нём запихать/считать JPG картинку (с MDB и ADO мы уже разобрались в своё время smile ).

Автор: Romikgy 26.7.2009, 15:53
Цитата(Данкинг @  25.7.2009,  22:21 Найти цитируемый пост)
осталось выяснить, как на нём запихать/считать JPG картинку (с MDB и ADO мы уже разобрались в своё время smile ).

имхо почти также

Автор: Данкинг 26.7.2009, 20:47
Цитата(Romikgy @  26.7.2009,  16:53 Найти цитируемый пост)
имхо почти также 

Да, http://forums.realcoding.net/index.php?showtopic=13231 нашёл:
Код

procedure FileToBlob(BlobField: TField; FileName: string);
var S : TStream;
    FileS : TFileStream;
begin
  S:=BlobField.DataSet.CreateBlobStream(BlobField, bmReadWrite);
  FileS:=TFileStream.Create(FileName, fmOpenRead);
  try
    S.CopyFrom(FileS, FileS.Size);
  finally
    FileS.Free;
    S.Free;
  end;
end;

procedure BlobToFile(BlobField: TField; FileName: string);
var S : TStream;
    FileS : TFileStream;
begin
  if BlobField.IsNull then Exit;
  S:=BlobField.DataSet.CreateBlobStream(BlobField, bmRead);
  if FileExists(FileName) then
    FileS:=TFileStream.Create(FileName, fmOpenWrite)
  else
    FileS:=TFileStream.Create(FileName, fmCreate);
  try
    FileS.CopyFrom(S, S.Size);
  finally
    S.Free;
    FileS.Free;
  end;
end;

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