Главная / FAQ по Builder'у / 54 Как сжать mdb файл...

54 Как сжать mdb файл из программы?


1-й способ

Если работаешь через ADO, то можно руками. WSCurrConn должна быть ConnectionString текущего TADOConnection, WSTempDB - путь к временной базе. Потом переименовываешь временную в текущую и все. Hу есессно у пользователя должны быть права и на момент сжатия всех надо отключить.
WideString WSCurrConn, WSTempDB;
Variant JE = Variant::CreateObject ("JRO.JetEngine");
try
{
 HRESULT hResult = JE.OleFunction ("CompactDatabase",  WSCurrConn,
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + WSTempDB);
}
__finally
{
 JE = Unassigned;
}
Vladimir V. Polyakov

2-й способ

Вот тебе письмо из борландовой конференции по ADO.
//---------------------------------------------------------------------------
Import
Microsoft Jet and Replication Objects 2.x Library
#include <JRO_TLB.h>
...
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 IJetEngine * JetEngine = NULL;
 CoCreateInstance(CLSID_JetEngine, NULL, CLSCTX_INPROC_SERVER,
IID_IJetEngine,
  (void**) &JetEngine);

 WideString Source = "Provider=Microsoft.Jet.OLEDB.4.0;"
  "Data Source=C:\\Test\\Test.mdb;";
 WideString Dest = "Provider=Microsoft.Jet.OLEDB.4.0;"
  "Data Source=C:\\Test\\Compacted.mdb;";

 JetEngine->CompactDatabase(Source.c_bstr(), Dest.c_bstr());

 JetEngine->Release();
}
You can compact database from one file into another. There should be no users connected to database.

Regards,
Vassiliev V.V.
http://www.oledbdirect.com
//---------------------------------------------------------------------------
Или обратись к этому человеку, он наверняка знает.
Dmitry Konnov

Предыдущий вопрос   |  Список вопросов   |   Следующий вопрос

источник      На главную      by jenyok
Copyright © 2003 JTSOFT
Сайт управляется системой uCoz