Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Вниз

Что-то не понятное с размером базы творится...   Найти похожие ветки 

 
Rouse_ ©   (2004-05-19 18:03) [0]

Что происходит:
База на Access (mdb - шник обычный с одной таблицей)
Открываю базу через ADOConnection -> ADOQuery -> DataSource -> DBGridEh

Создаю новое поле:
   SourceQuery.SQL.Text := "Alter Table " + sTitTable + " Add " + FIELD_REINDEX + " Char(50)";    
   SourceQuery.ExecSQL;


Прохожусь по всем полям - добавляю в это поле GUID

     while not SourceTable.Eof do
     begin
       GUID := GenerateGUID; // String
       SourceTable.Edit;
       SourceTable.FieldValues[FIELD_REINDEX] := GUID;  
       SourceTable.Next;          
    end;


Тип курсора clUseServer, правда при создании нового поля приходится переключаться на клиентский:

 SourceConnection.Connected := False;
 TCustomADODataSet(SourceTable).CursorLocation := clUseClient;
 SourceConnection.Connected := True;
 try
   <SOME CODE>
 finally
   SourceConnection.Connected := False;
   TCustomADODataSet(SourceTable).CursorLocation := clUseServer;
   TADOTable(SourceTable).TableDirect := True;
 end;


В чем заключается проблема:
размер базы до этого действия 78 Мб - после этого действия 452Мб!!!! Но после сжатия средствами Access опять принимает нормальный размер около 80 Мб.

Вопрос:
1. Почему такое резкое увеличение размера?
2. Есть ли возможность сжимать базу из своей программы?


 
Соловьев ©   (2004-05-19 18:05) [1]


> <SOME CODE>

тут и смотри что ты там делаешь
удаляешь вставляешь...наверное


 
Rouse_ ©   (2004-05-19 18:08) [2]

> [1] Соловьев ©   (19.05.04 18:05)
а там я делаю именно вот это:
SourceQuery.SQL.Text := "Alter Table " + sTitTable + " Add " + FIELD_REINDEX + " Char(50)";    
  SourceQuery.ExecSQL;
просто не стал повторять...


 
YurikGl ©   (2004-05-19 18:30) [3]

Сам сталкивался с таким.
Где-то на форуме был ответ на вопрос о том, как прописать строку соединения, что-бы программа сохраняла mdb-к в сжатом виде.


 
Ega23 ©   (2004-05-19 18:40) [4]

ИМХО, это от механизма исправления столбца может зависеть. Вспомни как PowerDesigner скрипт ремонтный генерит:
1. создаёт временную таблицу с текущими полями
2. делает select * into Временная_таблица from Исправляемая_таблица
3. удаляет Исправляемую таблицу
4. создаёт её заново с исправленными полями.
5. перекачивает данные из временной
6. удаляет временную.
Может и в Access такой-же механизм?
А вот команду принудительного сжатия базы "извне" было-бы неплохо узнать...


 
Anatoly Podgoretsky ©   (2004-05-19 18:47) [5]

Не знаю, но мне кажется, что при редактировании записи, Акцесс создает копию записи, аналог трансакции/версии, и поэтому акцесовские таблицы имеют тенденцию очень быстро распухать.


 
Vlad ©   (2004-05-19 18:50) [6]

Вот, может чем поможет
Тут есть пример как с помощью ADO сжимать базу
http://www.sql.ru/faq/faq_topic.aspx?fid=155

Одно ясно - Акцесс что-то творит в своих системных таблицах.
Что именно - одному богу известно.


 
sniknik ©   (2004-05-19 18:55) [7]

> 1. Почему такое резкое увеличение размера?
рабочее пространство увеличивается не соразмерно с данными а страницами, "на вырост" ;о), и даже групами страниц, гдето и такое читал, размер на усмотрение jet. можно включить режим повторного использования страниц (в реестре RecycleLVs, у меня ноль стоит, по умолчанию, что надо поставить поищи в хелпе), размер будет расти медленнее но добавлять бутет тормознее.

> 2. Есть ли возможность сжимать базу из своей программы?
есть, но лутше не надо (во всяком случае очень часто) перед добавлениями пока не увеличилось рабочее пространство, будет подтормаживать.

function TDMod.PackAccess(BaseName: string): boolean;
var je: Variant;
   sPath: string;
begin
 result:= false;
 BaseName:= GetMdbName(BaseName);
 sPath:= ExtractFilePath(BaseName);
 try
   try
     ADOConnection1.Close;
     ADOConnection2.Close;
     je:=CreateOleObject("JRO.JetEngine");
     je.CompactDatabase("Provider=Microsoft.Jet.OLEDB.4.0;"+
                        "Data Source="+BaseName+";",
                        "Provider=Microsoft.Jet.OLEDB.4.0;"+
                        "Data Source="+sPath+"NewBase$$$.Mdb;"+
                        "Jet OLEDB:Encrypt Database=True");
     DeleteFile(BaseName);
     RenameFile(sPath+"NewBase$$$.Mdb", BaseName);
     result:= true;
   except
     on E: Exception do DoIfError(E.Message);
   end;
 finally
   je:= Null;
 end;
end;


и еще
> SourceQuery.SQL.Text := "Alter Table " + sTitTable + " Add " + FIELD_REINDEX + " Char(50)";    
если сделаеш VarChar пухнуть будет меньше, и еще меньще если вместо строки GUID.


 
sniknik ©   (2004-05-19 18:58) [8]

> Тип курсора clUseServer, правда при создании нового поля приходится переключаться на клиентский:
попробуй не менять а просто выполнить команду создания в ADOCommand вместо квери.


 
Rouse_ ©   (2004-05-20 00:27) [9]

Всем спасибо, завтра буду проверять все советы...



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2004.06.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.036 c
3-1085398790
Andrey
2004-05-24 15:39
2004.06.13
Открытие таблицы MySQL


14-1085377649
Dmitriy O.
2004-05-24 09:47
2004.06.13
Посоветуйте где найти инфу по IB ?


1-1086006719
GanibalLector
2004-05-31 16:31
2004.06.13
Child в максимум...


3-1085052874
Mishgan
2004-05-20 15:34
2004.06.13
Checkbox в DbgridEH !!! Помогите


14-1085636200
Nurali
2004-05-27 09:36
2004.06.13
Dial-Up из Delphi (6)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский