منتدى مبرمجي ASP

 اسم العضو:عبدالله جابر شقليه  الثلاثاء,11/شوال/1425 هـ,10:40 مساءً
السلام عليكم لكل من يستخدم قاعدة بيانات أكسس، ويريد أن يقوم بعمل ضغط لقاعدة البيانات،فلديكم الكود التالي: [CODE]<% Dim objJetEngine Set objJetEngine = Server.CreateObject("JRO.JetEngine") objJetEngine.CompactDatabase _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _ & Server.MapPath("database/STUDENT.mdb") & ";", _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" _ & Server.MapPath("destination.mdb") & ";" Set objJetEngine = Nothing %>[/CODE]حيث الامتداد الأول وهو تحديد قاعدة البيانات الخاصة بك على السيرفر، والامتداد تحدد اسم الملف الذي سوف ينشأ من بعد عملية ضغط قاعدة البيانات،وتحديد مسار انشاء الملف. واذا كنت تستخدم ال NTFS يجب أن تراعي وجود لديك صلاحية في المكان الذي سوف تنشأ به قاعدة البيانات بعد ضغطها.  

 اسم العضو:اا الفاروق اا  الأربعاء,12/شوال/1425 هـ,05:08 مساءً
السلام عليكم الف شكر أخ عبد الله ... هذا الكود عزمت على أن أبحث عنه داخل موقع Microsoft أو أى موقع متخصص لعلى أجد حل ، وأعتقد ان هذا الكود يبحث عنه العديد من الأعضاء والزوار .. وبفضل الله قام الأخ عبد الله مشكورا بوضعه بمنتداه الذى ندعوا الله ان يكون ساحة بها علماً نافعا وعملا بإذن الله متقبلا ..  

 اسم العضو:عبدالله جابر شقليه  الثلاثاء,18/شوال/1425 هـ,07:07 صباحاً
شكراً لك أخ الفاروق، طبعا الكود في الأعلى يعتبر اعاقه على المستخدم حيث يتم ضغط القاعده وتسميته باسم أخر، ومما سوف يجعل المستخدم بكل مره يقوم بضغط القاعده وحذف القاعده القديمة وتسمية القاعده الي تم ضغطها باسم القاعده القديمة سوف أقوم الأن بوضع لكم كود يسهل لكم هذه الطريقة بشكل أفضل والذي بوحده يوفر لديك هذا العناء، ويوجد أيضاً ملف مرفق بذلك، وهذا الكود الذي يوجد في الملف المرفق والذي سوف أقوم بشرحه بالمشاركات التالية: [CODE]<%Response.Buffer = True%> <html dir="rtl"> <head> <meta http-equiv="Content-Language" content="tr"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1256"> <meta http-equiv="Content-Type" CONTENT="text/html; charset=ISO-8859-9"> <meta name="author" Content="Emrah Zengin (emrah@sandedesign.net)"> <% ScriptName = Request.ServerVariables("Script_Name") ScriptName = Mid(ScriptName,InstrRev(ScriptName,"/") + 1) RootDir = Replace(Request.ServerVariables("Script_Name"),"/" & ScriptName,"") '******************************************************** MyDirectory = Server.MapPath (RootDir) '******************************************************** Set FSOdir = Server.CreateObject("Scripting.FileSystemObject") Set MyDir = FSODir.GetFolder (MyDirectory) Set FileNms = Mydir.Files CmpctFile = Request.QueryString ("Compact") If CmpctFile<>"" then MyPos = Instr(1,CmpctFile,".mdb",1) - 1 CmpctFileDst = Mid(CmpctFile,1,MyPos) & "Cmpcted" & ".mdb" AccessDB=MyDirectory & "\" & CmpctFile DestDB=MyDirectory & "\" & CmpctFileDst Set objJetEngine = Server.CreateObject("JRO.JetEngine") objJetEngine.CompactDatabase _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & AccessDB & ";", _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DestDB & ";" Set objJetEngine = Nothing FSODir.DeleteFile AccessDB,True FSODir.CopyFile DestDB,AccessDB FSODir.DeleteFile DestDB,True Session(CmpctFile) = 1 Response.Redirect "compact.asp?CmpctedDB=" & CmpctFile & "&Boyut=" & Request.QueryString ("Boyut") End If %> <title>ضغط قاعدة بيانات أكسس</title> </head> <body > <div align="center"> <center> <table border="1" width="450" bordercolor="#000080" class="budy" bgcolor="#c0c0c0"> <tr> <td width="100%" bgcolor="#FFFFFF" colspan=3><span lang="ar-sa"><b>الامتداد</b></span><b> : " <%=MyDirectory%>"</b></td> </tr> <tr> <td width="225" bgcolor="#FFFFFF"><span lang="ar-sa"><b>الملفات</b></span></td> <td width="100" bgcolor="#FFFFFF"><span lang="ar-sa"><b>الحجم</b></span></td> <td width="125" bgcolor="#FFFFFF"><span lang="ar-sa"><b>ضغط</b></span></td> </tr> <%For Each FNms In FileNms%> <% MapPathLen= Len(MyDirectory) + 2 If Instr(1,Fnms,".mdb",1) > 0 then FileNm = Mid(Fnms,MappathLen) %> <tr> <td width="225" > <% If Session(FileNm) = 1 then Response.Write FileNm & " [Compacted]" else Response.Write FileNm End if %> </td> <td width="100" > <% DBFileSize = Fnms.Size / 1024 Response.Write DBFileSize & " Kb" %> </td> <td width="125"><A href="compact.asp?Compact= <%=FileNm%>&Boyut= <%=DBFileSize%>"> "<span lang="ar-sa">ضغط</span>" </a></td> </tr> <% End If Next%> <tr> <td width="100%" bgcolor="#FFFFFF" colspan=3> <% If Not Request.QueryString ("CmpctedDB") = "" then %> <hr> <span lang="ar-sa">تم ضغط قاعدة البيانات</span> : <%=Request.QueryString ("CmpctedDB") %> <br> <span lang="ar-sa">حجم القاعدة</span> : <%=Request.QueryString ("Boyut") %> Kb <br> <hr> <% End If %> <span lang="ar-sa"><font color="#808080"> لضغط قاعدة البيانات فقط اضغط على كلمة ضغط حتى يتم ضغط قاعدة البيانات</font></span><b></td> </tr> </table> </center> </div> </body> </html>[/CODE] 

 اسم العضو:عبدالله جابر شقليه  الثلاثاء,18/شوال/1425 هـ,07:07 صباحاً
هنا شرح للمثال في الأعلى [CODE]ScriptName = Request.ServerVariables("Script_Name")[/CODE] هنا سوف يتم اخذ امتداد الملف. [CODE]ScriptName = Mid(ScriptName,InstrRev(ScriptName,"/") + 1)[/CODE] بعد الحصول على امتداد الصفحة سوف نستخدم الدالة mid حيث سوف يتم وضع امتداد الصفحة التي حصلنا عليه أولاً المخزنه في المتغير ScriptName. ومن خلال هذا الكود نريد أن نحصل على اسم الصفحة فقط دون الحصول على الامتداد، أي بعد أشاره / مع وضع قيمة واحد لها، يتم اخذ اسم الصفحة فقط. [CODE]RootDir = Replace(Request.ServerVariables("Script_Name"),"/" & ScriptName,"")[/CODE] هنا سوف نقوم باستخدام الدالة replace حيث سوف نقوم باخذ فقط اسم المجلد التي تحتوي على الصفحة دون أخذ اسم الصفحة ويتم تخزينه بداخل المتغير RootDir. [CODE]MyDirectory = Server.MapPath (RootDir)[/CODE]هنا سوف نقوم بجلب المسار الكلي لهذا المجلد وتخزينه داخل المتغير MyDirectory. [CODE] Set FSOdir = Server.CreateObject("Scripting.FileSystemObject") Set MyDir = FSODir.GetFolder (MyDirectory) Set FileNms = Mydir.Files[/CODE] هنا سوف نستخدم ال file system object، لكي نحصل على الملفات التي موجود في المسار المخزن داخل المتغير MyDirectory. الكود التالي سوف يتم شرحه في مشاركة لوحدها ، وذلك لانه لم يحن موعد الشرح له. [CODE]CmpctFile = Request.QueryString ("Compact") If CmpctFile<>"" then MyPos = Instr(1,CmpctFile,".mdb",1) - 1 CmpctFileDst = Mid(CmpctFile,1,MyPos) & "Cmpcted" & ".mdb" AccessDB=MyDirectory & "\" & CmpctFile DestDB=MyDirectory & "\" & CmpctFileDst Set objJetEngine = Server.CreateObject("JRO.JetEngine") objJetEngine.CompactDatabase _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & AccessDB & ";", _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DestDB & ";" Set objJetEngine = Nothing FSODir.DeleteFile AccessDB,True FSODir.CopyFile DestDB,AccessDB FSODir.DeleteFile DestDB,True Session(CmpctFile) = 1 Response.Redirect "compact.asp?CmpctedDB=" & CmpctFile & "&Boyut=" & Request.QueryString ("Boyut") End If[/CODE]------------------------------------------ [CODE]<% For Each FNms In FileNms %> [/CODE] هنا سوف نستخدم جملة ال for لكي نخزن جميع الملفات التي بداخل المتغير FileNms التي تم تخزين فيه الملفات، حيث وبنفس الوقت سوف يتم عمل for loop لها. [CODE] MapPathLen= Len(MyDirectory) + 2 If Instr(1,Fnms,".mdb",1) > 0 then FileNm = Mid(Fnms,MappathLen)[/CODE] هنا يتم عمل فحص على امتداد الملفات اذا كانت لها الامتداد mdb من خلال استخدام الدالة Instr، سوف نفذ الجمل التي تليها. المتغير FileNm يتم تخزين به اسم قاعدة البيانات. [CODE]<% If Session(FileNm) = 1 then Response.Write FileNm & " [Compacted]" else Response.Write FileNm End if %>[/CODE]يوجد لدينا هنا session حيث سوف يتم الفحص اذا انت قيمته 1 يطبع اسم القاعدة التي توجد داخل المتغير filenm ويطبع بجانبها انه تم ضغطها. وفي حالو قيمته لا تساوي واحد فقط يظهر القاعده. متى تصبح قيمة ال session واحد هذا ما سوف نعرفه بعد شرح الكود الذي ذكرت لكم بأنه سوف يتم شرحه بمشاركة لوحدها. ------------------------------ [CODE]<% DBFileSize = Fnms.Size / 1024 Response.Write DBFileSize & " Kb" %>[/CODE]هنا سوف يتم اخذ حجم الملف مع قسمته على 1024 حتى يتم تحويله إلى كيلو بايت، وتخزينه داخل المتغير DBFileSize، وبعدها يتم طباعة الحجم بعد وضع العملية الحسابية. [CODE]<%=FileNm%>&size=<%=DBFileSize%>[/CODE]هنا سوف يتم واضع ويحتوي على متغيرين متغير يحتوي على اسم القاعده، ومتغير يحتوي على حجم القاعده. وفي المشاركة التالية سوف يتم شرح الكود الذي قمت بتأجيل شرحه.  

 اسم العضو:عبدالله جابر شقليه  الثلاثاء,18/شوال/1425 هـ,07:08 صباحاً
[CODE]CmpctFile = Request.QueryString ("Compact") If CmpctFile<>"" then MyPos = Instr(1,CmpctFile,".mdb",1) - 1 CmpctFileDst = Mid(CmpctFile,1,MyPos) & "Cmpcted" & ".mdb" AccessDB=MyDirectory & "\" & CmpctFile DestDB=MyDirectory & "\" & CmpctFileDst Set objJetEngine = Server.CreateObject("JRO.JetEngine") objJetEngine.CompactDatabase _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & AccessDB & ";", _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DestDB & ";" Set objJetEngine = Nothing FSODir.DeleteFile AccessDB,True FSODir.CopyFile DestDB,AccessDB FSODir.DeleteFile DestDB,True Session(CmpctFile) = 1 Response.Redirect "compact.asp?CmpctedDB=" & CmpctFile & "&size=" & Request.QueryString ("size") End If[/CODE]بعد الضغط على كملة ضغط قاعدة البيانات والتي سوف ترسل على نفس الصفحة التي تقوم بضغط قاعدة البيانات وتحمل معها المتغيرين. المتغير Compact يحتوي على اسم قاعدة البيانات. المتغير size يحتوي على حجم قاعدة البيانات. [CODE]CmpctFile = Request.QueryString ("Compact")[/CODE] هنا سوف يتم استقبال قيمة المتغير Compact وتخزينها داخل المتغيرCmpctFile . [CODE]If CmpctFile<>"" then [/CODE]واعتقد أنكم تتساؤلون لما تم تأجيل هذا الكود سوف تجدون الرد الأن. عند بداية تشغيل الصفحة على المتصفح سوف يتم استقبال قيمة المتغير compact ولكن في البادية تكون قيمته فارغه. فلهذا وضعنا جملة ال if لكي تفحص اذا كانت قيمة المتغير الذي يحتوي على قاعدة البيانات ليس فارغ نفذ الكود الذي يليه إلى نهاية جملة if الشرطية. [CODE]MyPos = Instr(1,CmpctFile,".mdb",1) - 1 CmpctFileDst = Mid(CmpctFile,1,MyPos) & "Cmpcted" & ".mdb"[/CODE] هنا سوف يتم الحصول فقط على اسم القاعدة دون الامتداد التي سوف نقوم بعملية ضغطها ومن ثمه نظف إلى الاسم كلمة Cmpcted ونضع لها الامتداد، ويتم تخزينها داخل المتغير CmpctFileDst. [CODE]AccessDB=MyDirectory & "\" & CmpctFile DestDB=MyDirectory & "\" & CmpctFileDst[/CODE]المتغير AccessDB سوف يحتوي امتداد الكامل للقاعدة التي نريد أن نقوم بضغطها. والمتغير DestDB سوف يحصل أيضاً على نفس الامتداد للقاعدة القديمة ولكن يحتوي على اسم القاعدة الجديدة التي سوف يتم إنشائها بعد عملية ضغط قاعدة البيانات القديمة. [CODE]Set objJetEngine = Server.CreateObject("JRO.JetEngine") objJetEngine.CompactDatabase _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & AccessDB & ";", _ "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DestDB & ";" Set objJetEngine = Nothing[/CODE] اعتقد بأنني شرحة طبيعة عمل هذا الكود في أول مشاركة في الأعلى. [CODE]FSODir.DeleteFile AccessDB,True[/CODE]هنا سوف يتم حذف القاعدة القديمة بعد أن تم ضغطها. [CODE]FSODir.CopyFile DestDB,AccessDB[/CODE] وهنا سوف يتم عملية نسخ للقاعدة الجديدة ويتم تسميتها باسم القاعدة القديمة. [CODE]FSODir.DeleteFile DestDB,True Session(CmpctFile) = 1[/CODE]هنا سوف يتم حذف القاعدة التي تم ضغطها ، وتصبحة قيمة ال session، والذي تم ذكره في الأعلى لكي يتم تنفيذ الشرط: [CODE]<% If Session(FileNm) = 1 then Response.Write FileNm & " [Compacted]" else Response.Write FileNm End if %>[/CODE] وهكذا نكون قد انتهينا من شرح الصفحة التي تم وضعها في الملف المرفق في الأعلى. واي شئ غير واضح في الشرح أرجوا أن لا تترددو بوضع أسئلتكم مع تحياتي 

 اسم العضو:اا الفاروق اا  الأربعاء,19/شوال/1425 هـ,08:51 مساءً
ما شاء الله عليك أخ عبد الله جهد كبير .. وكود كبير ايضا .. وبالفعل شرح وافر وأسلوب جيد ... ولم ار هذا الكود فى منتدى عربى من قبل .. جزاك الله خيرا اخانا عبد الله 

 اسم العضو:ابو سالم  الجمعة,10/فر/1427 هـ,09:31 صباحاً
الاستاذ عبد الله الف شكر على هذا المجهود الرئع طبعا انا لم اصل لهذا المستوى و لكن لازلت مبتدئ في هذا المجال و لا يسعني الا شكرك على كل ما تقدمه لاخوانك المسلمين في هذا المنتدى نفع الله بك و الى الامام 

 اسم العضو:mohamedmashhot  الجمعة,10/ربيع الثاني/1428 هـ,05:03 مساءً
اريد عمل نسخ احتياطى لقاعده بيانات sql  

 اسم العضو:حمدي الرماح  السبت,14/شوال/1430 هـ,08:15 مساءً
بارك الله فيك اخي 

 اسم العضو:zedanco  الأربعاء,25/ربيع الأول/1431 هـ,02:56 صباحاً
[SIZE=5]موضوع هايل جد ارجو لاكثر من هذة المواضيع المفيدة[/SIZE] 

 اسم العضو:takecourse  السبت,27/رجب/1433 هـ,02:04 مساءً
شكراً بارك الله فيك يا أخي 

جميع الحقوق محفوظة لـمنتديات المحيط العربي 2004 - 2020