PDA

View Full Version : compact and repair اکسس 2007



Batman
جمعه 20 آذر 1388, 08:24 صبح
با سلام
تو سایت چند تا نمونه کد برای این کار بود:

function DatabaseCompact(const sdbName: WideString): boolean;
// This function compacts an Access 2000 database
// it is called from Backup window
var
JE : TJetEngine; //Jet Engine
sdbTemp : WideString; //TEMP database
sdbTempConn : WideString; //Connection string
const
SProvider = 'Provider=Microsoft.jet.OLEDB.4.0;'+
'Data Source=';
begin
Result:=False;
//Here we make temp file's name
//JE.CompactDatabase() does not let you to have same names...
//...as source and destination parameter, so we neet a temp file
sdbTemp := ExtractFileDir(sdbName) +
'TEMP' +
ExtractFileName(sdbName);
sdbTempConn := SProvider + sdbtemp;
//if destination file is exists, JE.compactDatabase raises an exception
//so we need to check if the file exists, if it does we have to delete it
if FileExists(sdbTemp) then
DeleteFile(sdbTemp);
//Here we make an instance of JetEngine
JE:= TJetEngine.Create(Application);
try
try
Application.ProcessMessages;
//Here is the command which compacts our database
JE.CompactDatabase(SProvider + sdbName, sdbTempConn);
//Here we replace compact database(Temp database) with current one
DeleteFile(sdbName);
RenameFile(sdbTemp, sdbName);
except
MessageDlg('خطایی در هنگام فشرده سازی بانک اطلاعاتی رخ داده است',mtError,[mbOK],0);
end;
finally
//At last here we set JetEngine instance free
JE.FreeOnRelease;
Result :=True;
end;
end;


Function CompactAndRepair(DB: string) : boolean;
var
v: OLEvariant;
begin
Result := True;
try
v := CreateOLEObject('JRO.JetEngine');
try
v.CompactDatabase('Provider=Microsoft.jet.OLEDB.4. 0;Data Source=' + DB,
'Provider=Microsoft.jet.OLEDB.4.0;Data Source=' + DB +
'x;Jet OLEDB:Engine type=5');
DeleteFile(DB);
RenameFile(DB + 'x', DB)
finally
v := Unassigned
end;
except
Result := False
end;
end;

اما هر دو رو تست کردم.هیچکدوم با اکسس 2007 کار نمیکنه.
لطفا راهنماییم کنید.
ممنونم

Batman
جمعه 20 آذر 1388, 21:49 عصر
آقا تورو خدا یکی کمک کنه.چون زمانیکه تعداد داده ها بالا بره سرعت خیلی پایین میاد

حسین شهریاری
دوشنبه 23 آذر 1388, 10:54 صبح
سلام
من پیشنهاد میکنم بجای این کار اطلاعاتتون را دوره ای ذخیره کنید.البته بستگی به برنامه شما داره ولی پیشنهاد میشه پایان هر سال اطلاعات اون سال بسته بشه یعنی یه کپی ازش نگه داریم تا در صورت نیاز
به اون سوییچ کنیم .یعنی ابتدای هرسال اطلاعات سال قبل که دیگه نیازی بهش نداریم را حذف میکنیم.
مثل سیستم حسابداری که میایم و دوره مالی ایجاد میکنیم.

در ضمن لازم نیست همه اطلاعات را لود کنین.اونایی را لود کنین که میدونین کاربر بهش نیاز داره.مثلا همیشه 100رکورد ابتدایی را لود کنین و اگه لازم بود با تایید کاربر 100تای بعدی را بار کنیند.دقیقا مثل کاری که Enterprizemanager انجام میده.که اصطلاحا بهش لود تدریجی میگن

موفق باشید