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
|