تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
محتاج كود ضغط وإصلاح قاعدة بيانات Access 2010
#1
السلام عليكم ورحمة الله وبركاته
محتاج كود ضغط وإصلاح قاعدة بيانات Access 2007 & 2010  
الكود التالى يعمل ولكن يحولها ل 2003

كود :
  Dim DbasePath2007 As String = "C:\aaaaaa\MyDB.accdb"

   'إجراء ضغط وإصلاح لقاعدة بيانات أكسس 2007
   Function Access_2007(ByVal FileNameMD As String, ByVal PasswordMD As String)
       con.Close()
       Try

           Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
           Dim Engine = CreateObject("JRO.JetEngine")
           Engine.CompactDatabase("provider=microsoft.ace.oledb.12.0;" & "Data Source=" & FileNameMD & ";" & "Jet OLEDB:Database Password=" & PasswordMD & ";" & _
           "Jet OLEDB:Engine Type=5;", _
           "provider=microsoft.ace.oledb.12.0;" & _
           "Jet OLEDB:Database Password=" & PasswordMD & ";" & _
           "Data Source=" & FileNameMD & ".tmp" & ";" & _
            "Jet OLEDB:Engine Type=5;")
           Dim FullPath As String = IO.Path.GetDirectoryName(FileNameMD)
           IO.File.Delete(FileNameMD)
           Dim filename As String = IO.Path.GetFileName(FileNameMD & ".tmp")
           Dim GetFileNameWithoutExtension As String = IO.Path.GetFileNameWithoutExtension(FileNameMD & ".tmp")
           FileSystem.Rename(FileNameMD & ".tmp", FullPath & "\" & GetFileNameWithoutExtension)
           EndMD = "Successfully"
           Return EndMD ' إرجع بقيمة تدل على إكمال العملية بنجاح
       Catch ex As Exception
           If My.Computer.FileSystem.FileExists(FileNameMD) = False Then
               EndMD = "Database"
               Return EndMD ' إرجع بقيمة تدل على فشل العملية بسبب عدم صحة مسار قاعدة البيانات
           Else
               EndMD = "Failed"
               Return EndMD ' إرجع بقيمة تدل على فشل العملية لاسباب اخرى
           End If
       End Try
   End Function


   'إجراء ضغط وإصلاح لقاعدة بيانات أكسس 2007

   'يوضع في زر للتنفيذ الدالة الأجراء الاتي '
   Private Sub Compactdba()
       Try
           Access_2007(DbasePath2007, "123456789")
       Catch ex As Exception
           MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
       Try
           '-----------------------------------------------------------
           EndMD = ""
           Access_2007(DbasePath2007, "123456789")
           ''                                 ''
           If EndMD = "Successfully" Then
               MsgBox("تمت عملية ضغط وإصلاح قاعدة البيانات بنجاح", MsgBoxStyle.Exclamation, "صيانة قاعدة البيانات")
           ElseIf EndMD = "Database" Then
               MsgBox(" قاعدة البيانات غير موجودة!", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Not found")

           ElseIf EndMD = "Failed" Then
               MsgBox("فشل العملية .", MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Erorr")
           End If
           ''=================================================================
       Catch ex As Exception
           MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try


   End Sub


الكود التالي يعمل ولكن لم أستطيع تمرير كلمة مرور القاعدة

كود :
Private Sub Compactdb()

       Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
       Dim source = "C:\aaaaaa\MyDB.accdb "
       Dim compact = "C:\aaaaaa\MyDBCom.accdb"
       AccessDatabaseEngine.CompactDatabase(source, compact)
   
       MsgBox("The database was compacted successfully")

   End Sub


الرجاء التصحيح لما سبق أو  الكود الصحيح 
وجزاكم الله خيرا
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:
#2
وعليكم اسلام ورحمة الله وبركاته

تفضل استخدم الكود بهذا الشكل وهو كود Sub
كود :
   Sub RunCompactDatabase(ByVal Sou As String, ByVal Com As String, ByVal Pass As String)
       Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
       Dim source As String = Sou
       Dim compact As String = Com
       Dim MyPassword As String = Pass
       AccessDatabaseEngine.CompactDatabase(source, compact, ";pwd=" & MyPassword, , ";pwd=" & MyPassword)
       MsgBox("The database was compacted successfully")
   End Sub

من ثم تقوم باستدعائه فى الزر من خلال
كود :
RunCompactDatabase("مسار قاعدة البيانات الرئيسيى", "مسار قاعدة البيانات بعد الضغط", "كلمة المرور المخصصة لقاعدة البيانات")


قم باختبار الكود وما هو الناتج معك

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: princelovelorn , عبد العزيز البسكري
#3
جزاك الله خيرا أخي الفاضل وأستاذي  elgokr
ولكن نفس المشكلة


كود :
   Private Sub Button9_Click(sender As Object, e As EventArgs) Handles Button9.Click
       Dim source = "C:\aaaaaa\MyDb.accdb "
       Dim compact = "C:\aaaaaa\MyDbcom.accdb"

       RunCompactDatabase(source, compact, "123456789")
   End Sub


   Sub RunCompactDatabase(ByVal Sou As String, ByVal Com As String, ByVal Pass As String)
       Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
       Dim source As String = Sou
       Dim compact As String = Com
       Dim MyPassword As String = Pass
       AccessDatabaseEngine.CompactDatabase(source, compact, ";pwd=" & MyPassword)
       MsgBox("The database was compacted successfully")
   End Sub


الملفات المرفقة صورة/صور
   
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:
#4
السّلام عليكم و رحمة الله و بركاته
بعد إذن أخي الفاضل " Elgokr " ..
أخي الكريم ..
قاعدة اليانات لديك هل هي من نوع mdb أو accdb ؟؟
تحياتي
الرد
تم الشكر بواسطة: princelovelorn
#5
(22-12-18, 02:11 AM)عبد العزيز البسكري كتب :
السّلام عليكم و رحمة الله و بركاته
بعد إذن أخي الفاضل " Elgokr " ..
أخي الكريم ..
قاعدة اليانات لديك هل هي من نوع mdb أو accdb ؟؟
تحياتي

وعليكم السلام ورحمة الله وبركاته

جزاك الله خيرا أخي الفاضل 

قاعدة البيانات accdb   أستخدم أوفييس 2010
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:
#6
عمليّة ضغط و إصلاح قواعد البيانات ذات كلمات المرور من نوع accdb تحتاج أخي الكريم إلى إضافة هذا الجزء بعد كلمة المرور ..
كود :
;Jet OLEDB:Engine Type=5
تحياتي
الرد
تم الشكر بواسطة: elgokr , elgokr , princelovelorn , ابراهيم ايبو
#7
اخى الحبيب السبب فى الرسالة المرفقة
هو كونك وضعت كلمة المرور بطريقة غير صحيحة

شرح مجدداً للكود مع الخطوات المطلوب نشائها حتى تتاكد جيداً بان كل شئ بدون مشكلة

قم بعمل مشروع جديد على جهازك يحتوى على زر

ادرج بداخل الزر الكود التالى
كود :
       RunCompactDatabase("C:\123.accdb", "C:\123-ok.accdb", "12341234")

اسفل حدث الزر او باى مكان قم بادراج كود هذا الـ Sub
كود :
   Sub RunCompactDatabase(ByVal Sou As String, ByVal Com As String, ByVal Pass As String)
       Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
       Dim source As String = Sou
       Dim compact As String = Com
       Dim MyPassword As String = Pass
       AccessDatabaseEngine.CompactDatabase(source, compact, ";pwd=" & MyPassword, , ";pwd=" & MyPassword)
       MsgBox("The database was compacted successfully")
   End Sub

قم باضافة Microsoft.Office.interop.access.dao
من خلال References


الان قم بتحميل قاعدة البيانات المرفقة وقم بوضعها على الدريف C
قم بتشغيل الان البرنامج من المشروع واضغط على الزر

وبعد ثوانى قليلة ستجد ظهور تلك الرسالة
كود :
The database was compacted successfully


الان اذهب الى الدريف C لتجد تم انشاء قاعدة بيانات جديدة بع الضغط تحت اسم
كود :
123-ok.accdb

تحياتى لك
وتمنياتى لك التوفيق


الملفات المرفقة
.zip   123.zip (الحجم : 369.03 ك ب / التحميلات : 123)
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: princelovelorn , princelovelorn , ابراهيم ايبو , سعود
#8
(22-12-18, 02:50 AM)عبد العزيز البسكري كتب :
عمليّة ضغط و إصلاح قواعد البيانات ذات كلمات المرور من نوع accdb تحتاج أخي الكريم إلى إضافة هذا الجزء بعد كلمة المرور ..
كود :
;Jet OLEDB:Engine Type=5
تحياتي


جزاك الله خيرا أخي الحبيب عبد العزيز البسكري
بالفعل لم أنسى هذا الجزء وهو موجود في الكود الاول من المشاركة الاولى 
والمشكلة في هذا الكود انه بيتم تحويل القاعدة بعد العملية الى اصدار 2003


(22-12-18, 03:28 AM)elgokr كتب :
اخى الحبيب السبب فى الرسالة المرفقة
هو كونك وضعت كلمة المرور بطريقة غير صحيحة

شرح مجدداً للكود مع الخطوات المطلوب نشائها حتى تتاكد جيداً بان كل شئ بدون مشكلة

قم بعمل مشروع جديد على جهازك يحتوى على زر

ادرج بداخل الزر الكود التالى
كود :
       RunCompactDatabase("C:\123.accdb", "C:\123-ok.accdb", "12341234")

اسفل حدث الزر او باى مكان قم بادراج كود هذا الـ Sub
كود :
   Sub RunCompactDatabase(ByVal Sou As String, ByVal Com As String, ByVal Pass As String)
       Dim AccessDatabaseEngine As New Microsoft.Office.Interop.Access.Dao.DBEngine
       Dim source As String = Sou
       Dim compact As String = Com
       Dim MyPassword As String = Pass
       AccessDatabaseEngine.CompactDatabase(source, compact, ";pwd=" & MyPassword, , ";pwd=" & MyPassword)
       MsgBox("The database was compacted successfully")
   End Sub

قم باضافة Microsoft.Office.interop.access.dao
من خلال References


الان قم بتحميل قاعدة البيانات المرفقة وقم بوضعها على الدريف C
قم بتشغيل الان البرنامج من المشروع واضغط على الزر

وبعد ثوانى قليلة ستجد ظهور تلك الرسالة
كود :
The database was compacted successfully


الان اذهب الى الدريف C لتجد تم انشاء قاعدة بيانات جديدة بع الضغط تحت اسم
كود :
123-ok.accdb

تحياتى لك
وتمنياتى لك التوفيق


جزاك الله خيرا وبارك فيك أخي الحبيب elgokr
لقد طبقت شرحك بالظبط وكانت النتيجة 
ظهور هذة الرسالة عندما إستخدمت القاعدة المرفقة  باسم 123
The Microsoft Access database engine cannot open or write to the file 'C:\1234-ok.accdb'. It is already opened exclusively by another user, or you need permission to view and write its data.

ثم أنتبهت الى موضوع الصلاحيات في الويندوز ودرايف ال c

فقمت بنقل القاعدة بداخل مجلد  فنجحت العملية والحمد لله 
ثم قمت بأستخدام القاعدة التى لدي فنجحت العملية والحمد لله 

فجزاكم الله خيرا وبارك فيكم وزادكم علما أخواني الكرام 

عبد العزيز البسكري   elgokr
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
#9
الحمد لله والشكر لله
بكل تاكيد اخى الفاضل فنص الرسالة تنبهك على ذلك
وهو غير قادر على فعل ذلك وهو انشاء الملف الجديد على المسار المحدد بسبب الصلاحيات

وهو سهواص منى وقد يكون خطءاً بان لا انبهك على دريف اخر بدلاً من C
أو ان تقوم بتشغيل البرنامج كمسؤل Run Administrator
حتى عيتم تنفيذ الكود مباشر على C عن عمل الضغط والانشاء للنسخة الجديدة

فسامحنى على ذلك وهو سهواً منى بسبب سرعة الرد دون الانتباه والتركيز

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

ساهم دائماً فى    لكل من يقوم بالمساهمة
فى حل المشكلة او الاستفسار لديك فالجميع هنا يعمل 
على مساعدة الاخرين لوجه الله وان تحتسب له اجر عند الله


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد
تم الشكر بواسطة: princelovelorn
#10
أخي الحبيب  elgokr


جزاك الله خيرا وبارك فيك وغفر الله لي ولك
أنا لم أقصد أن أشير لتقصير أو خلل بالشرح  لا والله
فكل ما أردته أن أشرح بالتفصيل ما يحدث معي حتى أستفيد من خبراتك وعلمك وخبرة الأخوة الكرام في المنتدى
وحتى يستفيد من يقرأ الموضوع والتعليقات أكبر إستفادة ممكنه
فأنت بمثابة أستاذ وانا طالب علم وفوق ذلك نحن أخوة  فلا داعي للاعتذار  
وجزاك الله خيرا ونفع بك الإسلام والمسلمين
لا إله إلا الله وحده لا شريك له له الملك وله الحمد وهو على كل شئ قدير
سبحان الله وبحمده سبحان الله العظيم
سبحان الله والحمد لله ولا إله إلا الله والله أكبر ولا حول ولا قوة إلا بالله العلى العظيم
رب أغفر لي 

الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  بناء قاعدة Access بالأوامر ؟ ZaerAllail 1 47 منذ 11 ساعة مضت
آخر رد: Jounior_P
  [VB.NET] اضافة ازرار حسب عدد متغير في قاعدة البيانات Ad Heart 5 686 16-11-20, 12:10 AM
آخر رد: sherf
  [VB.NET] ماهي طريقة تعبئة بيانات في داتاقريد فيو 2 مرتبطة بحقل في داتا فريد فيو1 Ad Heart 1 119 13-11-20, 12:27 AM
آخر رد: Ad Heart
  أريد كود إطفاء وتشغيل الشاشة ؟ [ Visual Studio 2010 ] PeterGhattas082460 1 148 09-11-20, 11:59 PM
آخر رد: SABER_ZINOUBI
  [VB.NET] مشكله في قراءه بيانات فارغه من ال SQL SERVER mohammed_abdu 2 157 08-11-20, 05:31 PM
آخر رد: mohammed_abdu
  كود تعديل البيانات فيجوال بيسك وقاعدة بيانات sql server برحوت 0 137 08-11-20, 12:17 AM
آخر رد: برحوت
  مشكلة حفظ البيانات الموجودة في اداة listview في قاعدة بيانات SQL shado1796 7 2,051 07-11-20, 02:47 PM
آخر رد: sherf
  هل استطيع الاتصال بقاعدة بيانات Access موجودة على سيرفر خارجي mohamedgadain61 4 218 05-11-20, 05:24 PM
آخر رد: kiki
  عرض محتويات الكومبوبوكس حسب ترتيبها في قاعدة البيانات جيولوجي مبتدئ 6 211 02-11-20, 08:36 PM
آخر رد: جيولوجي مبتدئ
  [VB.NET] برنامج اقساط على الفجوال بيسك 2010 وقاعده بيانات سيكوال سيرفر 2008 shawky ahmed 2 393 31-10-20, 06:03 PM
آخر رد: kebboud

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم