اذهب الي المحتوي
أوفيسنا

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

قام بنشر

السلام عليكم 

احتاج الى اعادة ترقيم الحقل ID في الجدول Data من رقم معين استطيع كل مره تغييره

فمثلا اعادة ترقيم الحقل يبدا من 55 و 56 و57 و 58

اي عندما احدد اول عدد يقوم على التوالي بترقيم تصاعديا

وشكرا

Access.rar

  • Thanks 1
قام بنشر (معدل)

السلام عليكم

شكرا على الاجابة ولكن هذا ليس طلبي .

طلب هو انه لدي قاعدة بيانات وتحتوي على جدول Data لديه علاقات مرتبطه مع جدول اخر

وفي هذا الجدول يوجد حقل ID فيه تسلسلات 

المطلوب هو اعادة ترقيم التسلسلات القديمة من رقم معين احدده انا 

فمثلا اريد اعادة التسلسلات القديمه ويبدا من رقم 100 ثم 101 ثم 102 وهكذا وكما بالصوره

وشكرا

1.JPG

2.JPG

تم تعديل بواسطه النهر العطشان
قام بنشر (معدل)

السلام عليكم وكل عام وانتم بخير اعاده الله علينا وعليكم وعلى الامة العربية والاسلامية بالخير والمحبة

الأساتذه الكرام الاستاذ محمد التميمي والاستاذ alaa aboul-ela شكرا على الاجابة .

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

 

1.JPG

2.JPG

Access.rar

تم تعديل بواسطه النهر العطشان
قام بنشر

وعليكم السلام

 

رجاء اخذ نسخة اضافية من بياناتك قبل العمل

 

الطريقة التي عملتها هي:

تغيير الارقام الى ارقام كبيرة غير موجوده في القائمة ،

ثم تغيير الارقام الى التسلسل المطلوب:smile:

 

تفضل

927.Clipboard01.jpg.2efbe9f5ffe9e405db06a90e7c251e3b.jpg

.

والكود خلف الزر:

Private Sub cmd_Do_The_Changes_Click()

    'make Reference to Microsoft DAO x.xx Object Library
    
    Dim rst As DAO.Recordset
    Dim biggest_Number As Long
    Dim i As Integer
    Dim j As Integer
    Dim RC As Integer
    Dim Multiply_by As String
    

    biggest_Number = Len(DMax("[ID]", "Data"))
    
    'we have to do this in two steps:
    '1 based on the Biggest Number, lets multiply it by 10, so that No number id duplicated
    '2 then Seq based on the required Seq
    
    '1
    Set rst = CurrentDb.OpenRecordset("Select * From Data")
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
        
        
    For i = 1 To RC
        
        'what number to multiply with
        Multiply_by = 1
        For j = 1 To biggest_Number - Len(rst!ID)
            Multiply_by = Multiply_by & "0"
        Next j
    
        'change the existing numbers to BIGGER NUMBERS
        rst.edit
            rst!ID = rst!ID * Val(Multiply_by)
        rst.Update
    
        rst.MoveNext
    Next i
    
    '2
    rst.MoveFirst
    For i = 0 To RC - 1
           
        'change the BIGGER NUMBERS to the new Seq
        rst.edit
            rst!ID = Me.int_Start + i
        rst.Update
    
        rst.MoveNext
    Next i
    rst.Close: Set rst = Nothing
    
    MsgBox "Done"
    
End Sub

.

وبسبب وجود علاقة بين الجدولين Data و tell عن طريق الحقل ID ،

فلما الكود يغير قيمة الحقل ID في الجدول Data ، فتلقائيا نجد ان القيمة قد تغيرت في الحقل ID في الجدول tell .

 

جعفر

927.Access.accdb.zip

  • Like 2
  • Thanks 1
قام بنشر

 

السلام عليكم

استاذ jjafferr لقد تم تجربة الكود المرسل من قبلكم وكانت النتيجه بالمستوى المطلوب لقاعدة البيانات المرسله من قبلي .

ولكن عندما اصبحت السجلات اكثر من 160 سجل لم يعمل الكود ولا اعرف سبب ذلك .

وارفق نسخه من قاعدة البيانات الجديدة .

وشكرا

927.Access2.rar

قام بنشر

وعليكم السلام:smile:

 

تفضل ، جرب هذا التعديل:

Private Sub cmd_Do_The_Changes_Click()

    'make Reference to Microsoft DAO x.xx Object Library
    
    Dim rst As DAO.Recordset
    Dim biggest_Number As Long
    Dim i As Integer
    Dim j As Integer
    Dim RC As Integer
    Dim Multiply_by As String
    

    biggest_Number = Len(DMax("[ID]", "Data"))
    
        'what number to multiply with
        Multiply_by = 1
        For i = 1 To biggest_Number
            Multiply_by = Multiply_by & "0"
        Next i
        
    'we have to do this in two steps:
    '1 based on the Biggest Number, lets multiply it by 10, so that No number id duplicated
    '2 then Seq based on the required Seq
    
    '1
    Set rst = CurrentDb.OpenRecordset("Select * From Data")
    rst.MoveLast: rst.MoveFirst
    RC = rst.RecordCount
        
        
    For i = 1 To RC
    
        'change the existing numbers to BIGGER NUMBERS
        rst.edit
            rst!ID = rst!ID * Val(Multiply_by)
        rst.Update
    
        rst.MoveNext
    Next i
    
    '2
    rst.MoveFirst
    For i = 0 To RC - 1
           
        'change the BIGGER NUMBERS to the new Seq
        rst.edit
            rst!ID = Me.int_Start + i
        rst.Update
    
        rst.MoveNext
    Next i
    rst.Close: Set rst = Nothing
    
    MsgBox "Done"
    
End Sub

 

جعفر

927.1.Access2.accdb.zip

  • Like 1
  • Thanks 2
قام بنشر (معدل)

 

السلام عليكم

تمت التجربة استاذ jjafferr ونجح الكود الجديد في اعادة الترقيم من رقم احدده انا وحتى عند زيادة عدد السجلات ومشكور عليه جعله الله في ميزان حسناتك .

وسؤالي بخصوص هذا الكود هل تم استدعاء مكتبه لتنفيذ هذا الكود لانه يعمل بهذه القاعده فقط وعند نقل الكود الى قاعدة بيانات اخرى لايعمل مع مراعاة نفس اسماء الحقول والجداول ويضهر هذا الخطاء بالصوره .

Untitled.jpg

تم تعديل بواسطه النهر العطشان
خطا في سحب الصوره
قام بنشر

السلام عليكم

شكرا استاذي الفاضل jjafferr لسعة صدرك .

الكود الحالي يعطيني تسلسل تصاعدي من رقم احدده انا ويبدا من اقل تسلسل ويزداد واحد واحد وهذا كان ولازال هو المطلوب .

لكن لو كان هنالك حقل للاسماء في الجدول Data  واردنا ان نعمل ترتيب الاسماء حسب الحروف الابجدية ومن ثم نبداء بالترقيم على شرط ان يبداء التسلسل من اول سجل تصاعديا .

لان عند الترقيم في هذه الحالة ضهرت لي هذه المشكله وكما بالصوره .

الخطاء كان من عندي لم اذكر ذلك بطلبي من الاول .

وارفق نسخه من قاعدة البيانات بعد اضافة حقل الاسماء وصورة للمشكله التي حدثت لي .

وشكرا

927.Access4.rar

2.jpg

قام بنشر

وعليكم السلام:smile:

 

بدل هذا السطر
Set rst = CurrentDb.OpenRecordset("Select * From Data")


استعمل
Set rst = CurrentDb.OpenRecordset("Select * From Data Order By [Name]")

.

جعفر

  • Thanks 1
قام بنشر

السلام عليكم

لاحظت ان الترقيم ارقام فقط

ولكن  في بعض الأوقات نحتاج ترقيم مختلط يعن ارقام وحروف وحروف خاصة

فهل  يمكن تطبيق هذا على هذا المثال

شكرا

 

 

قام بنشر

وعليكم السلام اخي ابو عمر:smile:

 

تقريبا يمكننا عمل اي شيء بالاكسس ، ولكن ارجو ان تقتح موضوع جديد بهذه الخصوصية ، وترفق لنا مثال مفصل ومرفق بوضح المطلوب:smile:

 

جعفر

قام بنشر (معدل)

السلام عليكم

بارك الله بك اخي واستاذي القدير جعفر..

سؤال / هل يمكن انشاء كد مماثل يعمل على اعادة ترتيب الترقيم التلقائي من جديد بعد حذف سجلات من الجدول سواء يبدأ من رقم معين نختاره نحن او من رقم (1) وامكانية اعادة الترقيم الاصلي للجدول بعد حذف سجلات معينة .

تم تعديل بواسطه محمد التميمي
قام بنشر

وعليكم السلام اخي محمد:smile:

 

حقل الترقيم التلقائي هو للبرنامج ، وفهرسة السجلات ، وتوليد ارقام فريدة للسجلات ، ولكنه ليس للمبرمج.

 

المبرمج يجب ان يعمل له الحقول التي يحتاج لها لبرمجته ، ولا مانع من الاستفادة من حقل الرقم التلقائي ،

لذلك ، ليس مهما اي رقم هو رقمك التلقائي ، ومن اهميته ، فلا يسمح لك الاكسس تغييره ، واذا فقدت رقم تسلسل واستعملت الرقم الذي بعده ، فلا يمكنك استرجاع اي من الارقام المفقودة والتي وسط الارقام الاخرى ، مثلا ارقامك 1،3،4،6  ، فلا يمكنك استرجاع الارقام 2،5 ،

 

اما اذا (خلينا نتابع المثال المرفق) ،

الرقم الجديد الذي نحصل عليه هو 31 ،

927.Clipboard02.jpg.1eec9e0fd0a5ec43166b88a86126596b.jpg

.

1. آخر رقم تم استعماله هو 23 ، بينما فقدنا جميع الارقام بعد الـ 23 ، فإذا اردنا البرنامج ان يبدأ الرقم التالي بالرقم 24 ، فعلينا عمل ضغط واصلاح لقاعدة البيانات ،

2. بينما اذا اردنا ان نبدأ الرقم التلقائي برقم غير 24 ، بالرقم 25 مثلا ، فنستطيع ان نستعمل الكود التالي:

927.Clipboard03.jpg.2c3aceb1ddd9a0d471aa453a9e007779.jpg

.

والكود الذي يقوم بذلك هو:

Private Sub cmd_Do_Click()

    If Len(Me.int_Start_2 & "") = 0 Then
        MsgBox "What is the initial number?"
        Me.int_Start_2.SetFocus
        Exit Sub
    End If
    
    biggest_Number = Nz(DMax("[Auto_ID]", "Data"), 0)
    
    If Me.int_Start_2 - 1 <= biggest_Number Then
        MsgBox "the biggest_Number in the table is :" & biggest_Number & vbCrLf & _
               "Your initial number SHOULD be bigger than this number"
        Me.int_Start_2.SetFocus
        Exit Sub
    End If
    
    'from http://www.fmsinc.com/microsoftaccess/AutoNumber%20Field/Creating.asp
    
    'add the initial number
    mySQL = "INSERT INTO Data ( auto_ID )"
    mySQL = mySQL & " SELECT " & Me.int_Start_2 - 1 & " AS Expr1;"
    CurrentDb.Execute (mySQL)
    
    'Delete the dummy number
    mySQL = "DELETE * FROM Data WHERE auto_ID=" & Me.int_Start_2 - 1
    CurrentDb.Execute (mySQL)
    
    MsgBox "Now the NExt Auto_ID will be " & Me.int_Start_2
    

End Sub

.

ونحصل على النتيجة التالي:

927.Clipboard04.jpg.9ab89b38bff387b9670f01fa4496a867.jpg

.

جعفر

927.2.Access4.accdb.zip

  • Thanks 1
  • 2 weeks later...
قام بنشر

السلام عليكم استاذ jjafferr  المحترم

لقد حدثت لي مشكلة جديده بالترقيم وهي عندما يكون احد ارقام التسلسل اكثر من خمس او ست مراتب فلا يتم الترقيم وتظهر لي رسالة خطاء ويتم ترقيم بعض التسلسلات عشوائيا وكما في الصور .

شاكرا لكم تعاونكم .

 

1.JPG

2.JPG

3.JPG

927.Access5.rar

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