إذا قمت بحذف بيانات أو كائنات في قاعدة بيانات Access، أو حذفت كائنات في مشروع Access، فقد تصبح قاعدة بيانات Access أو مشروع Access مجزأة وتستخدم مساحة القرص بكفاءة أقل. يؤدي ضغط قاعدة بيانات Access أو مشروع Access إلى نسخ الملف فعليًا وإعادة تنظيم كيفية تخزين الملف على القرص. يعمل الضغط على تحسين أداء كل من قواعد بيانات Access ومشاريع Access.
لذلك عندما وجدنا برنامج ASP بطيئًا بشكل لا يطاق بسبب تزايد قاعدة البيانات، فكرنا في ضغطه. لكن الطريقة التقليدية هي تنزيله محليًا ثم استخدام MSaccess لإكمال عملية الضغط، ثم تحميله!
تجدر الإشارة إلى أن هذا البرنامج متصل بالفعل بمحرك JET من خلال أذونات FSO، لذا قبل استخدامه، يرجى التأكد من أن الخادم الخاص بك يدعم أذونات FSO (كائن نظام الملفات) وتثبيت أحدث برنامج تشغيل ACCESS! لأسباب تتعلق بالسلامة، يرجى عمل نسخة احتياطية من قاعدة البيانات الأصلية قبل الضغط! بيئات التشغيل التي اجتازت الاختبار:
WIN98SE+PWS، WIN2000+IIS5.0
ما يلي هو الكود المصدري الذي قمت بتجميعه. انسخه واحفظه بتنسيق Compact.asp وقم بتحميله إلى الدليل حيث توجد قاعدة البيانات للاستخدام العادي.
<أتش تي أم أل>
<الرأس>
<title>برنامج ضغط قاعدة البيانات Access</title>
</الرأس>
<الجسم bgcolor="e0f8ef">
<ديف>
<div align="center"><font color="#3300FF">
<b><font size="5">برنامج ضغط قاعدة بيانات Universal ACCESS عبر الإنترنت</font></b></font><br>
</div>
<ديف><ر>
هذا البرنامج متصل بالفعل بمحرك JET من خلال أذونات FSO.
ولذلك، يرجى التأكد من أن الخادم الخاص بك يدعم FSO قبل استخدامه.
(كائن نظام الملفات) أذونات وتثبيت أحدث برنامج تشغيل ACCESS!
لأسباب تتعلق بالسلامة، يرجى عمل نسخة احتياطية من قاعدة البيانات الأصلية قبل الضغط! </div><br>
<div align="center">بيئة التشغيل: WIN98SE+PWS، WIN2000+IIS5.0 <br>
<%
كونست JET_3X = 4
الدالة CompactDB(dbPath, boolIs97)
خافت fso، المحرك، strDBPath
strDBPath = left(dbPath,instrrev(DBPath,""))
تعيين fso = CreateObject("Scripting.FileSystemObject")
إذا كان fso.FileExists(dbPath) ثم
تعيين المحرك = CreateObject("JRO.JetEngine")
إذا كان boolIs97 = "True" إذن
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb;"
& "Jet OLEDB: نوع المحرك =" & JET_3X
آخر
Engine.CompactDatabase "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbpath, _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strDBPath & "temp.mdb"
نهاية إذا
fso.CopyFile strDBPath & "temp.mdb"، dbpath
fso.DeleteFile(strDBPath & "temp.mdb")
تعيين fso = لا شيء
ضبط المحرك = لا شيء
CompactDB = "تم ضغط قاعدة البيانات الخاصة بك، " & dbpath & "،" & vbCrLf
آخر
CompactDB = "لم يتم العثور على مسار قاعدة البيانات أو الاسم الذي أدخلته، يرجى المحاولة مرة أخرى" & vbCrLf
نهاية إذا كانت
وظيفة النهاية
%>
</div>
</div>
<اسم النموذج = "compact" طريقة = "post" action = "compact.asp">
<div محاذاة = "المركز">
<font size="2"><b><font color="#FF0000">
خيارات الضغط، يرجى ملؤها بعناية! </font></b><br>
<ر>
أدخل الاسم الكامل لقاعدة البيانات:
<نوع الإدخال = "نص" اسم = "dbpath">
(يتضمن امتدادات مثل MDB، وASA، وASP، وما إلى ذلك)<br>
<ر>
<نوع الإدخال = "مربع الاختيار" اسم = "boolIs97" القيمة = "صحيح">
تحقق مما إذا كانت قاعدة بيانات ACCESS97<br>
(الافتراضي هو قاعدة بيانات ACCESS2000)<br>
<ر>
<نوع الإدخال = "إرسال" الاسم = "إرسال" القيمة = "تأكيد الضغط">
</font></div>
</النموذج>
<div align="center"><font size="2">
<%
خافت dbpath,boolIs97
dbpath = طلب("dbpath")
boolIs97 = request("boolIs97")
إذا كان dbpath <> "" إذن
dbpath = server.mappath(dbpath)
Response.write(CompactDB(dbpath,boolIs97))
نهاية إذا
%>
<ر>
</font></div></body></html>