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

تنفيذ الأمر في السجلات التي يتم تحديدها بالفأرة فقط


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

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

الإخوة الكرام .. المطلوب تنفيذ هذا الأمر

CurrentDb.Execute "UPDATE [TAB] SET [TAB].[MoveX] = Yes"

في السجلات التي يتم تحديدها بالفأرة فقط وليس في كل السجلات

select.accdb

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

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

 

استخدم هذا الكود للحقول المختارة:

UPDATE TAB SET TAB.MOVEX = -1
WHERE ((Not (TAB.MOVEX)=[Forms]![FRM2]![MOVEX]));


ويمكنك استخدام
UPDATE TAB SET MOVEX = -1 WHERE Not MOVEX=[Forms]![FRM2]![MOVEX]


وفي صيغة الكود
CurrentDb.Execute "UPDATE TAB SET MOVEX = -1 WHERE Not MOVEX=" & [Forms]![FRM2]![MOVEX]

 

جعفر

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

أخي الكريم .. يبدو أني لم أوضح المطلوب بشكل جيد 😐

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

 09.jpg.25da452d6dba9128ce5969a7dd081d35.jpg

والكود الذي تفضلت به يضع (صح) في بقية السجلات هذا بعد أن أضع أنا فيها علامة (صح)

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

تفضل 🙂

 

1423.gif.9e3190de09197a51d64b87e9893b982a.gif

 

لا نستخدم الزر ، وانما نستخدم زر مسك الفأرة :

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

  'https://stackoverflow.com/a/1670110
  'https://stackoverflow.com/a/18793073
  
    'Me.SelHeight =  to specify or determine the number of selected rows
    'Me.SelTop = to specify or determine which row (record) is topmost in the current selection
    
    Dim i As Integer
    Dim rst As dao.Recordset

    Set rst = Me.RecordsetClone

    If Me.SelHeight = 0 Then Exit Sub

    rst.MoveFirst
    
    ' Move to the first selected record.
    rst.Move Me.SelTop - 1

    'its slow to refresh, so don't show it
    Me.Painting = False
    
    For i = 1 To Me.SelHeight
        rst.Edit
            rst![MOVEX] = -1
        rst.Update
        
       rst.MoveNext
    Next i

    Me.SelHeight = 0    'unSelect the Records
    Me.Painting = True  'show the Records values
    
End Sub

 

جعفر

1423.select.accdb.zip

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

 

أحسن الله إليك أخي الكريم .. يبدو أن الموضوع ليس سهلا كما كنت أظن

أنا كنت أظن أن الأمر سيتم بصياغة الجملة التي بعد (WHERE) بمعني أن تكون هناك جملة أو صيغة تميز السجلات التي تم تحديدها بالفأرة لينفذ عليها الأمر

وأنا كنت أنوي استخدام هذه الجملة لتنفيذ أوامر أخرى مثل (حذف سجلات تم تحديدها بالفأرة) وغير ذلك، أحيانا على مربع (MOVEX) وأحيانا على مربع (SelectX) -وهو غير موجود في النموذج المرفق لأنه للتجربة فقط- وذلك حسب طبيعة الكود ومهمته

لكن .. إذا كان الأمر لا يتم إلا بهذه الطريقة، بوضع الأمر في الفورم نفسه، فهل من طريقة لجعل تنفيذه بعد الكبس على الزر، فلا أريد كلما تم تحديد سجل أو عدة سجلات أن يقوم الكود بالعمل فورا

وتبقى إشكالية لو كان المطلوب تطبيق الأمر على المربع الآخر (SelectX) عند الحاجة لذلك في مهمة أخرى

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

  • أفضل إجابة

تفضل 🙂

 

قبل الاختيار ، سترى ان لون زر "الغي الاختيار" لونه اسود

image.png.68b33cb7ee3fc168171a30056df231c9.png

.

وعند الاختيار ، سيتحول لونه الى الاحمر ، ليحذرك بأنه هناك اختيار سابق تم تخزينه في المتغير TempVars!tmpVars_DoIn ، وتم الافصاح عن هذا المتغير في اعلى كود النموذج ، حتى يمكنه اضافة القيم:

Dim tmpVars_DoIn as TempVars

وكلما تختار سجلات اخرى ، فإن المتغير يضيف هذه السجلات الى المتغير

image.png.6a6ce5cd217c8c99a794dd8e578da562.png

.

هذا الكود يقوم بإضافة ارقام الحقل TNO (يمكنك اختيار اي حقل يدل على رقم السجل) الى المتغير ، بحيث يكون المتغير يحتوي على مصفوفة بهذه الطريقة:  34 ,33 , 13 ,12 , 0

Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)

    'Me.SelHeight =  to specify or determine the number of selected rows
    'Me.SelTop = to specify or determine which row (record) is topmost in the current selection
    
    Dim i As Integer
    Dim rst As dao.Recordset

    Set rst = Me.RecordsetClone
    rst.MoveFirst
    
    If Me.SelHeight = 0 Then Exit Sub
    
    ' Move to the first selected record.
    rst.Move Me.SelTop - 1

    
    For i = 1 To Me.SelHeight

            TempVars!tmpVars_DoIn = TempVars!tmpVars_DoIn & ", " & rst![TNO]    'add the selected TNO to tmpVars_DoIt
        
       rst.MoveNext
    Next i

    'show the selected in the Form
    'اذا لا تريد تحديث النموذج، اوقف عمل السطر التالي
    Call TempVars_Use_Click
    
    'change the button color, so that the user know somwthing is selected already
    Me.TempVars_Clear.ForeColor = vbRed
    
    'Debug.Print TempVars!tmpVars_DoIn
    
End Sub

.

ولما تريد استخدام اياستعلام (انا استعملت الكود الذي وضعته انت) ، يمكنك استخدام الكود التالي المحتوي على البيانات التي تم تحديدها :

Mid(TempVars!tmpVars_DoIn, 3)

.

هذا كود زر الغي التحديد:

Private Sub TempVars_Clear_Click()

    TempVars!tmpVars_DoIn = 0
    
    'change the color to black, indicating nothing is selected
    Me.TempVars_Clear.ForeColor = vbBlack
End Sub

.

وهذا كود استخدم سجلات التحديد

Private Sub TempVars_Use_Click()

    'remove the initial comma
    'TempVars!tmpVars_DoIn = Mid(TempVars!tmpVars_DoIn, 3)
    
    CurrentDb.Execute "UPDATE TAB SET MOVEX = -1 WHERE TNO In (" & Mid(TempVars!tmpVars_DoIn, 3) & ")"

    'show the selected in the Form
    'اذا لا تريد تحديث النموذج، اوقف عمل السطر التالي
    Me.Requery
    
End Sub

.

جعفر

1423.1.Record Selector.accdb.zip

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

أحسن الله إليك أخي الكريم .. وكالعادة:

أولا: أخذت وقتاً حتى استوعبت ما قمت به أخي الكريم 🙄

ثانيا: بعد الاستيعاب – وكالعادة – لا بد من ممارسة هوايتي المفضلة: التعديل على الأكواد 😁

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

وخلاصة التجارب:

1- جعلت الكود الذي في الفورم لا يعمل إلا بعد الكبس على زر معين

   If Me.SelHeight = 0 Or Me.TempVars_Clear.Caption = "no" Then Exit Sub

2- تمكنت من جعله عند الطلب يطبق أكثر من مهمة متعاكسة، مهمة على (MOVEX) ومهمة مختلفة على (SelectX)   

..
..
If Me.com1.Enabled = True Then
  Call com1_Click
ElseIf Me.TempVars_Use.Enabled = True Then
   Call TempVars_Use_Click
End If

ولتجنب موضوع نسيان التحديد وتركه جعلت في أول كل كود منهما

  If TempVars!tmpVars_DoIn = 0 Then Exit Sub

وفي آخره

TempVars!tmpVars_DoIn = 0

والأمور بحمد الله تمام .. فبارك الله فيك أخي الكريم

ولكن قبل ختام الموضوع عندي استفسار أخير:

كونك أخي الكريم جعلت الجملة الشرطية التي تحدد متى يتم تنفيذ الكود بهذه الصيغة

    CurrentDb.Execute ..  .. WHERE TNO In (" & Mid(TempVars!tmpVars_DoIn, 3) & ")"

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

هذا لأن عندي عدة جداول ليس فيها مربع اختيار (SelectX) وقد أحتاج لتنفيذ أمر على عدة سجلات متتالية يتم تحديدها بالفأرة

فكان ظني أن أستخدم هذه العبارة الشرطية لتنفيذ الأمر في السجلات المحددة

لكن ما فهمته الآن أنه لا بد من وجود مربع اختيار لتنفيذ المهام على السجلات المحددة

هل ما فهمته صحيح أخي الكريم ؟

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

59 دقائق مضت, nssj said:

أخذت وقتاً حتى استوعبت ما قمت به أخي الكريم 🙄

في الواقع انا اتعمد ان اجعل الكود سلس وبسيط ومقسّم الى عدة اسطر ، وذلك لهدف ان تكون البرمجه مرنه لتغييرات المبرمج ، واحاول الابتعاد عن اختزال الكود قدر المستطاع 🙂

 

بالنسبة لإختيار السجلات في جملة Where ،

عندك عدة اختيارات ، منها مربع الاختيار (نعم/لا) ، ومنها اي حقل له رقم/قيمة فريدة تدل على السجل ،

لهذا السبب ، ترى اني استخدمت النوعين معا ، فبالاضافة الى قيم الحقل TNO (في مصفوفة في الكود) ، فقد قمت بإختيار مربع الاختيار MoveX (في الجدول) كذلك ،

ويمكنك استعمال النوعين خارج النموذج ، وحتى عند اغلاق النموذج ، فقيمة TempVars!tmpVars_DoIn تكون موجودة طوال فترة عمل البرنامج ، الى ان يتم غلق البرنامج ، او اعطاء قيمة اخرى للمتغير ، او حذف بياناته.

 

جعفر

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

منذ ساعه, nssj said:

تم المطلوب بحمد الله

 الحمدلله 🙂

 

 

48 دقائق مضت, Moosak said:

كيف تعمل هذيلا الصور المتحركة ؟ بأي برنامج ؟

وعليكم السلام اخوي موسى 🙂

 

 

جعفر

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

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