منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
كيف نضغط قاعدة بيانات أكسس برمجيا؟ - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة السي شارب C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=175)
+--- قسم : قسم اسئلة C#.NET (http://vb4arb.com/vb/forumdisplay.php?fid=176)
+--- الموضوع : كيف نضغط قاعدة بيانات أكسس برمجيا؟ (/showthread.php?tid=21573)



كيف نضغط قاعدة بيانات أكسس برمجيا؟ - abozeyd - 04-09-17

ما هي الطريقة التي نضغط بها قاعدة بيانات أكسس 2013 برمجيا؟


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - سعود - 04-09-17

هل 2013 تختلف عن 2010 و 2007 حسبما تعرف؟
هل هذا ماتريده؟


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - abozeyd - 04-09-17

لا يختلفون حسب ما أعلم الأختلاف في 2007 أو ما يسبقه

نعم رأيت هذا الموضوع واشكل علي تمرير البرمتر الثاني في الميثود الأول (Microsoft.Office.Interop.Access.Application app)


كود :
public static void CompactAndRepair(string accessFile, Microsoft.Office.Interop.Access.Application app)

أما الثاني فلم أفهم العمل به وكذلك إذا غيرنا 
كود :
Provider=Microsoft.Jet.OLEDB.4.0
إلى 
كود :
Provider=Microsoft.Jet.OLEDB.12.0

ماذا نغير معه أم يكفي هذا فقط؟


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - سعود - 04-09-17

غير jet الى Ace


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - abozeyd - 04-09-17

غيرت الميثود هكذا
كود :
public static bool CompactAndRepairAccessDB(string source, string destination)
       {
           try
           {
               JetEngine engine = (JetEngine)HttpContext.Current.Server.CreateObject("JRO.ACEEngine");
               engine.CompactDatabase(string.Format("Data Source={0};Provider=Microsoft.ACE.OLEDB.12.0;Data;", source),
                   string.Format("Data Source={0};Provider=Microsoft.ACE.OLEDB.12.0;Data;", destination));
               File.Copy(destination, source, true);
               File.Delete(destination);
               return true;
           }
           catch
           {
               return false;
           }
       }


ومررت البرمترات هكذا
كود :
CompactAndRepairAccessDB("Source=D:\\mydb.accdb", "Source=D:\\mydb.accdb");
فلم يفعل شيء


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - سعود - 04-09-17

فيه مثال في فيجوال بيسك هل تستطيع تحويله؟
حاولت لكن Smile!!
هو باستخدام ملف Interop.JRO.dll

حولته بعد جهد جهيدSmile
يااخي مدري وش يبون فيها سي شارب؟Smile
ترى امزح مو قصدي


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - abozeyd - 05-09-17

جزاك الله خير لكن هناك خلل هذا نص رسالة الخطأ
كود :
An unhandled exception of type 'System.Runtime.InteropServices.COMException' occurred in WindowsFormsApplication1.exe

Additional information: Operation cannot be completed on this database because it uses attachements or multi-valued lookup fields.



RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - سعود - 05-09-17

انت جربت المشروع بعد التنظيف؟
يعني هل عملت clean لاني نسيت اعملها قبل ارفع المشروع.
جرب وخبرني.


RE: كيف نضغط قاعدة بيانات أكسس برمجيا؟ - abozeyd - 05-09-17

(05-09-17, 12:43 AM)سعود كتب : انت جربت المشروع بعد التنظيف؟
يعني هل عملت clean لاني نسيت اعملها قبل ارفع المشروع.
جرب وخبرني.

للاسف نفس الشيء 
القاعدة الي في المشروع الذي رفعة تمشي مع الكود 
القواعد الموجودة في جهازي erorr
منصب اوفيس 2016 -64

قمت باستيراد الجداول الموجودة على قاعدتي للقاعدة التي في المشروع الذي رفعت عمل البرنامج بشكل جيد!

جزاك الله خيرا

أعدت تنصيب أوفيس 2013 -32

ومشى كل شيء على ما يرام