اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

اريد عمل ضغط واصلاح قاعدة بيانات اكسس خارجية


إذهب إلى أفضل إجابة Solved by kkhalifa1960,

الردود الموصى بها

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

حياكم الله جميعا وكل عام وانتم بخير وعافية

عندي قاعدة بيانات اكسس مقسمة واريد زر في قاعدة البيانات ( b ) ينفذ امر ضغط واصلاح قاعدة البيانات ( b_be ) علما ان قاعدة البيانات عليها كلمة مرور . 

ملاحظة / كلمة المرور   ( 123 ) 

نرجوا المساعدة جزاكم الله خير

bbe.rar

رابط هذا التعليق
شارك

وعليكم السلام ورحمة الله وبركاته اخي @salah.sarea .

ضع هذا الكود في حدث عند النقر لزر الإصلاح ، مع تحديد مسار قاعدة البيانات B_Be حسب ما تريد .

Private Sub btnRepair_Click()
    Dim strConnect As String
    Dim strPassword As String

    strPassword = "123"

    strConnect = "MS Access;PWD=" & strPassword & ";DATABASE=path_to_b_be.accdb"

    Application.CompactRepair SourceFile:="path_to_b_be.accdb", DestinationFile:="path_to_b_be.accdb", _
        Password:=strPassword

    MsgBox "تم إصلاح قاعدة البيانات بنجاح!", vbInformation
End Sub

طبعا على افتراض أن اسم الزر btnRepair.

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

أعتذر عن التأخير والمتابعة بسبب ظرف صحي .

أخي @salah.sarea و الأخ @kamelnet5

على العموم يا صديقي بعد التركيز في مشاركتي السابقة يبدو أنني قد توجهت بشكل خاطئ للمطلوب . القاعدة المقسمة والمرتبطة بقاعدة بيانات الواجهة الرئيسية ( الأمامية ) لا بد من أنها ترتبط مع الجداول دون أن تقوم بإدخال الباسوورد بشكل يدوي كل مرة هل هذا صحيح ؟؟

وعليه وإن كان / أو لم يكن هناك كلمة مرور لقاعدة بيانات الجداول جرب هذا المرفق يعمل معي بكفاءة . وهذا كود الدالة :-

Public Function compactDb(ByVal mydb As String, ByVal mypass As String, Optional openIt As Boolean = False)
    Dim f As Integer
    Dim filenoext As String, extension As String, Access As String
        Access = """" & SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE"""
        filenoext = Left(mydb, InStrRev(mydb, "."))
        extension = Right(mydb, Len(mydb) - InStrRev(mydb, "."))
        f = FreeFile
    Open CurrentProject.Path & "\compact.bat" For Output As f
        Print #f, "CHCP 1256"
        Print #f, ":checkldb1"
        Print #f, "if exist """ & filenoext & "l" & extension & """ goto checkldb1"
        Print #f, Access & " """ & mydb & """" & mypass & " /compact"
    If openIt Then
        Print #f, ":checkldb2"
        Print #f, "if exist """ & filenoext & "l" & extension & """ goto checkldb2"
        Print #f, Access & " """ & mydb & """"
    Else
        Print #f, "del ""%~f0"""
    End If
        Close f
End Function

Public Function CopactMyDb()
On Error Resume Next
    Dim Mypath As String
        Mypath = CurrentProject.Path & "\" & CurrentProject.Name
        Call compactDb(Mypath, "", True)
        Shell """" & Left(Mypath, InStrRev(Mypath, "\")) & "\compact.bat""", 0
        DoCmd.Quit acQuitSaveAll
End Function

 

ويتم الإستدعاء في أي زر = CopactMyDb

 

Compact.accdb

 

 

  • Like 1
رابط هذا التعليق
شارك

2 ساعات مضت, Foksh said:

وعليه وإن كان / أو لم يكن هناك كلمة مرور لقاعدة بيانات الجداول جرب هذا المرفق يعمل معي بكفاءة . وهذا كود الدالة :-

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

تم تعديل بواسطه kamelnet5
  • Like 1
رابط هذا التعليق
شارك

4 ساعات مضت, kamelnet5 said:

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

تم تعديل الكود والتأكد منه وتجربته . انسخه إلى مديول جديد ، واستدعيه بالأمر : ( CopactMyDb )

فقط حدد اسم قاعدة البيانات الخلفية التي بجانب القاعدة الرئيسية .

Public Function compactDb(ByVal mydb As String, ByVal mydbb As String, ByVal mypass As String, Optional openIt As Boolean = False)
    Dim f As Integer
    Dim filenoext As String, extension As String, Access As String
        Access = """" & SysCmd(acSysCmdAccessDir) & "MSACCESS.EXE"""
        filenoext = Left(mydb, InStrRev(mydb, "."))
        extension = Right(mydb, Len(mydb) - InStrRev(mydb, "."))
        f = FreeFile
    Open CurrentProject.Path & "\compact.bat" For Output As f
        Print #f, "CHCP 1256"
        Print #f, ":checkldb1"
        Print #f, "if exist """ & filenoext & "l" & extension & """ goto checkldb1"
        Print #f, Access & " """ & mydbb & """" & mypass & " /compact"
    If openIt Then
        Print #f, ":checkldb2"
        Print #f, "if exist """ & filenoext & "l" & extension & """ goto checkldb2"
        Print #f, Access & " """ & mydb & """"
    Else
        Print #f, "del ""%~f0"""
    End If
        Close f
End Function

Public Function CopactMyDb()
On Error Resume Next
    Dim Mypath, CurrDB, BEndTBL As String
    BEndTBL = "B-TBL.accdb" 'اسم قاعدة البيانات الخلفية
    CurrDB = CurrentProject.Path & "\" & CurrentProject.Name
        Mypath = CurrentProject.Path & "\" & BEndTBL
        Call compactDb(CurrDB, Mypath, "", True)
        Shell """" & Left(Mypath, InStrRev(Mypath, "\")) & "\compact.bat""", 0
        DoCmd.Quit acQuitSaveAll
End Function

 

Desktop.zip

  • Thanks 2
رابط هذا التعليق
شارك

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

  • Like 1
رابط هذا التعليق
شارك

14 ساعات مضت, Foksh said:

فقط حدد اسم قاعدة البيانات الخلفية التي بجانب القاعدة الرئيسية .

الف شكر يا استاذنا نفعنا الله بك وزادك من علمه

  • Like 1
رابط هذا التعليق
شارك

17 ساعات مضت, Moosak said:

تابع هذا الموضوع سيفيدك إن شاء الله  🙂 

اشكرك على الاهتمام استاذ @Moosak يبدو ان الموضوع الذي نصحتني به شيق ومفيد جزاك الله خيرا

  • Like 1
رابط هذا التعليق
شارك

حياك الله يا مهندس Foksh وسامحنا اذا كثرناها عليك ما ضبط معي

5 ساعات مضت, Foksh said:

ضع كلمة المرور بين علامتي التنصيص ، جرب وبانتظار ردك 🤗

حياك الله يا مهندس Foksh وسامحنا اذا كثرناها عليك ما ضبط معي

رابط هذا التعليق
شارك

  • أفضل إجابة

مشاركةً مع اساتذتي تفضل استاذ @salah.sarea محاولتي .

1- ضغط واصلاح القاعدة الخلفية للقاعدة الحالية (القاعدة الخلفية محمية بكلمة مرور) .

2- ضغط واصلاح اي قاعدة تختارها (القاعدة محمية بكلمة مرور) .

3- ضغط واصلاح اي قاعدة تختارها (القاعدة غير محمية ) .

ووافني بالرد .:fff:

compact and repair.rar

  • Like 1
  • Thanks 2
رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information