الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ضغط قاعدة البيانات واصلاحها

بدأه kafi في 15 أكتوبر 2014 · 15 رد · 1,505 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

 

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

 

نعم .....موضوع ضغط قاعدة البيانات واصلاحها مرة ثانية.........ولكــــــــــن ....هذه المرة عندما تكون الجداول منفصلة عن قاعدة البيانات

 

 

قمت بانشاء مثالين :

1- المثال الأول Q103 وفيه نلاحظ انه عند الضغط على زر ضغط قاعدة البيانات ( هنا الجداول ليست منفصلة عن القاعدة ) كيف تكون الأمور سليمة مائة بالمائة

 

 

2- المثال الثاني Q104 ( هنا الجداول منفصلة عن القاعدة الرئيسية ) والجداول متوضعة باسم Data 2014 >>>>> وقد يسمى الاسم بغير ذلك - حسب ما يقوم المستثمر للبرنامج بتسمية فقد يسمي Data personal 2014  وقد يسمي Data 2015

 

وهكذا

 

سؤالي :

في المثال الثاني، لا تضغط الداتا وانما تضغط قاعدة البيانات الرئيسية

 

كيف السبيل الى ضغط القاعدة التي فيها الجداول في المثال Q104

 

ارجو التعديل على المثال Q104 وإيجاد الطريقة التي تمكننا من ضغط القاعدة التي  بها الجداول مهما كان اسمها.

والف شكر

بارك الله فيكم

 

كلمة السر 1

Q103.rar

Q104.rar

post-32358-0-87534500-1413405738_thumb.j

post-32358-0-43069500-1413405789_thumb.j

تم تعديل هذه المشاركة بواسطة kafi في 15 أكتوبر 2014 في 23:47

#2

up

#3

up

#4

up

#5

Up

>>>>>>>>>>>>>>>>

#6

وعليكم السلام اخي :)

 

رجاء مراجعة الرابط التالي للحصول على اسم برنامج الجداول المقسم:

/index.php/topic/293420-نسخ-احتياطي-لقاعدة-البيانات/?p=1399191

 

 

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

 

نعم هناك مشكلة الضغط والاصلاح في الاصدار الاول للاكسس 2007 ، مما كان يضر بالقاعدة ، ولكنه تم تصليح هذا لاحقا :)

 

 

 

جعفر

#7

شكرا اخي جعفر

على اجابتك

 

حاولت جاهداً  الاستئناس بالكود الذي تفضلت به حضرتك

المتعلق بالمشاركة تحت عنوان  "نسخ قاعدة البيانات"

 

والحمد لله، وصلت الى نتيجة 90 %

من خلال تعديل كود الضغط

 

ولكن بقيت لدي مشكلة لم استطع حلها ( نظراً الى كون الكود المتعلق بالضغط وهو الكود المأخوذ من الاخت زهرة جزاها الله عنا كل خير معقد ) .

والمشكلة تتمثل في ان البرنامج لا يعود يفتح تلقائياً، بعد ان اضغط على زر استمرار

 

ولكن عوضاً عن ذلك،  تفتح القاعدة التي بها الجداول

 

ارجو تصويب الكود الموجود بالوحدة النمطية

تحت عنوان  Restart

Public Sub Restart(Optional Compact As Boolean = True)
    Dim scriptpath As String
    Dim x, xx1  As String
    Dim falg_x As Boolean
    
    falg_x = False
    Call BE_or_FE
    x = Mid(DBEngine.Workspaces(0).Databases(0).TableDefs("beda").Connect, 11)
    
   'ÚäÏ ÊÍÞÞ ÇáÔÑØ Êßæä ÇáÌÏÇæá Öãä ÞÇÚÏÉ ÇáÈíÇäÇÊ æáíÓÊ ãäÝÕáÉ
    If Len(x & "") = 0 Then
        x = Application.CurrentProject.Name
        falg_x = True
    End If
    
    If falg_x = True Then
         scriptpath = Application.CurrentProject.FullName & ".dbrestart.bat"
         xx1 = CurrentProject.FullName
    Else
        scriptpath = x & ".dbrestart.bat"
        xx1 = x
    End If
    
    
    
    If Dir(scriptpath, vbNormal) <> "" Then
        If DateAdd("s", TIMEOUT * 2, FileDateTime(scriptpath)) < Date Then
            Kill scriptpath
        Else
            Application.Quit acQuitSaveAll
            Exit Sub
        End If
    End If
    
    Dim s As String
    s = s & "SETLOCAL ENABLEDELAYEDEXPANSION" & vbCrLf
    s = s & "SET /a counter=0" & vbCrLf
    s = s & ":CHECKLOCKFILE" & vbCrLf
    s = s & "ping 0.0.0.255 -n 1 -w 100 > nul" & vbCrLf
    s = s & "SET /a counter+=1" & vbCrLf
    s = s & "IF ""!counter!""==""" & TIMEOUT & """ GOTO CLEANUP" & vbCrLf
    s = s & "IF EXIST ""%~f2.%4"" GOTO CHECKLOCKFILE" & vbCrLf
    If Compact Then
        s = s & """%~f1"" ""%~f2.%3"" /compact" & vbCrLf
    End If
    s = s & "start "" "" ""%~f2.%3""" & vbCrLf
    s = s & ":CLEANUP" & vbCrLf
    s = s & "del %0"
    
    Dim intFile As Integer
    intFile = FreeFile()
    Open scriptpath For Output As #intFile
    Print #intFile, s
    Close #intFile
    
    Dim dbname As String, ext As String, lockext As String, accesspath As String
    Dim idx As Integer
    
    accesspath = SysCmd(acSysCmdAccessDir) & "msaccess.exe"
   
   
    For idx = Len(xx1) To 1 Step -1
        If Mid(xx1, idx, 1) = "." Then Exit For
    Next idx
    dbname = Left(xx1, idx - 1)
    ext = Mid(xx1, idx + 1)
    
    If Left(ext, 2) = "ac" Then
        lockext = "laccdb"
    Else
        lockext = "ldb"
    End If
    
   ' scriptpath = Application.CurrentProject.FullName & ".dbrestart.bat"
    
    s = """" & scriptpath & """ """ & accesspath & """ """ & dbname & """ " & ext & " " & lockext
    Shell s, vbHide
    
   Application.Quit acQuitSaveAll
End Sub

يحيث يصبح المثال المرفق، مشابه في ادائه للمثال

Q103

 

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

 

والف شكر

Q104 up.rar

تم تعديل هذه المشاركة بواسطة kafi في 26 أكتوبر 2014 في 00:44

#8

وعليكم السلام اخي :)

 

في الوحدة النمطية اعلاه ، غير السطر التالي:

s = s & "start "" "" ""%~f2.%3""" & vbCrLf

الى

s = s & "start "" "" " & Application.CurrentProject.FullName & vbCrLf

:)

 

 

جعفر

1
#9

الف شكر

اخي جعفر

على الارشاد الى مكمن الخطأ

 

الحمد لله نجح الامر، مائة بالمائة واصبح المثال شغال

واحببت ان اضع المثال من جديد بعد التعديل، لتعم الفائدة على الجميع

 

اخي جعفر

هل يكفي تطبيق الكود على القاعدة التي بها الجداول

ام انني بحاجة ايضا الى تطبيق الكود كذلك على القاعدة الاساسية  التي بداخلها ( الاستعلامات- النماذج - التقارير - الوحدات النمطية )

 

ارجو التوضيح

والف شكر

 

xx.rar

#10

هلا والله ، عمل جميل :)

 

نعم ، انا افضل لو انه بالإمكان ان يتم العمل على الجزئين ، حيث اني في احد مشاركاتي سابقا في بعض المواقع الاجنبية ، كبر حجم برنامج الواجهة FE ، كبر حجمه من 36 ميجا الى اكثر من 200 ميجا واصبح بطيئا ،

وعند عمل الضغط تلقائيا (عند الخروج من البرنامج) ، رجع حجمه وسرعته كما يفترض :)

وللعلم ، حتى البرامج المقفلة mde مثلا ، تحتاج الى الضغط :)

 

جعفر

#11

شكرا اخي جعفر

على تواصلك معي

 

بعد نقل الكود الى برنامجي الاساسي، ظهر معي خطأ ..........

واخذ الامر معي وقتا طويلاً الى ان عرفت السبب

 

الخطأ يظهر،  عندما يكون هناك فراغ في اسم قاعدة البيانات الاساسية

كأن يكون الاسم Q 105، عندئد تظهر مشكلة بالبرنامج

 

اما اذا كان الاسم لا يحتوي على فراغ كأن يكون Q105 فعندئد الامور عال العال

 

من خلال تتبع التنفيذ

وجدت ان الخطأ يحدث عن الوصول الى

If Dir(scriptpath, vbNormal) <> "" Then
        If DateAdd("s", TIMEOUT * 2, FileDateTime(scriptpath)) < Date Then
            Kill scriptpath
        Else
            Application.Quit acQuitSaveAll
            Exit Sub
        End If
    End If

ارجو المساعدة في تصحيح الكود، وخاصة هناك احتمال كبير بأن يقوم المستثمر بتسمية الملف الاساسي متضمن فراغ كأن يكتب

Kafi 2014

or

kafi factory 2014

 

والف شكر

 

post-32358-0-92537000-1414360263_thumb.j

 

Q 105.rar

#12

وعليكم السلام اخي :)

 

اذا كان الخطأ في الكودد الذي ارفقته ، فغير هذا السطر:

Kill scriptpath

الى

Kill chr(34) & scriptpath & chr(34)

جعفر

#13

السلام عليكم

 

اخي جعفر

تم تعديل الكود كما اشرت اليه

 

ولكن مازالت المشكلة قائمة

 

ارجو المساعدة في تصويب الكود

 

والف شكر

 

xx.rar

post-32358-0-30536100-1414412294_thumb.j

#14

وعليكم السلام اخي :)

 

الخطأ لم يكن في السطر الذي ذكرت ، وانما في السطر الذي غيرناه سابقا :)

 

غير السطر التالي:

    s = s & "start "" "" " &  Application.CurrentProject.FullName &  vbCrLf

الى:

    s = s & "start "" "" " & Chr(34) & Application.CurrentProject.FullName & Chr(34) & vbCrLf

جعفر

306.1.Q 105.zip

1
#15

الف شكر

اخي جعفر

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

 

نجح الامر اخيرا

 

والحمد لله

#16

:)

مواضيع مشابهة