nssj قام بنشر يناير 30 قام بنشر يناير 30 السلام عليكم الإخوة الكرام .. لدي جدول (TAB3) فيه حقل مرقم (HNO) وحقل مرقم آخر (SUB_ID) والمفترض أنه حيث كان رقم (HNO) واحداً، يكون أيضاً رقم (SUB_ID) واحداً وما كان سوى ذلك فهو خطأ وللتوضيح فهذه نسخة مصغرة من الجدول، والأرقام التي فيها خطأ مميزة بالدائرة الحمراء، والمطلوب تمييز هذه الأرقام بوضع علامة في حقل (CHEK)، أو إظهارها في استعلام خاص TAB3.accdb
kkhalifa1960 قام بنشر يناير 30 قام بنشر يناير 30 تفضل أستاذ @nssj حسب مافهمت . استعلامان للقيم الحقول المكررة (duplicates(HNO)) و(duplicates(SU_ID)) . TAB3-1.rar 1
nssj قام بنشر يناير 30 الكاتب قام بنشر يناير 30 شكراً على مشاركتك أخي الكريم .. لكن يبدو أني لم أشرح بشكل جيد انظر هذه الصورة المفروض أنه إذا كان رقم (HNO) واحداً، يكون أيضاً رقم (SUB_ID) واحداً لكن يوجد في الجدول خطأ في موضعين ميزتهما باللون الأحمر، ووضعت علامة يدوية في حقل (CHEK) للإشارة إلى أنه يوجد هنا خطأ ففي الموضع الأول المفروض أن يكون رقم (SUB_ID) = (73) ، مثل الرقم الذي قبله لأن لهما نفس رقم (HNO) الذي هو (20) وفي الموضع الثاني المفروض أن يكون رقم (SUB_ID) = (261) ، مثل الرقم الذي قبله لأن لهما نفس رقم (HNO) الذي هو (58) أرجو أن أكون قد شرحت المطلوب بشكل أوضح وأرجو أنه يمكن القيام بذلك باستعلام أو كود، لأن القيام بذلك يدويا سيأخذ وقتل طويلاً في الملف الأصلي
kkhalifa1960 قام بنشر يناير 31 قام بنشر يناير 31 (معدل) تفضل أستاذ @nssj حسب مافهمت . استعلام (Correct(SU_ID)) . التعديل بالحقل (AA) . TAB3-2.rar تم تعديل يناير 31 بواسطه kkhalifa1960 1
nssj قام بنشر يناير 31 الكاتب قام بنشر يناير 31 أخي الكريم .. هذا الاستعلام عالج الموضعين الذين ذكرتُهما فقط، والمطلوب ليس معالجة الخطأ ، المطلوب معرفة أين مواضع الخطأ فالمشكلة أني لا أعرف أين هذه الأخطاء في الملف الأصلي، وهذين الخطأين وضعتهما أنا يدويا للتوضيح
kanory قام بنشر يناير 31 قام بنشر يناير 31 7 ساعات مضت, nssj said: أخي الكريم .. هذا الاستعلام عالج الموضعين الذين ذكرتُهما فقط، والمطلوب ليس معالجة الخطأ ، المطلوب معرفة أين مواضع الخطأ فالمشكلة أني لا أعرف أين هذه الأخطاء في الملف الأصلي، وهذين الخطأين وضعتهما أنا يدويا للتوضيح ممكن اخي مجموعة من تلك الاخطاء التي تتوقع حدوثها في جدول ... اضف امثلة اخرى وكثر منها لفهم الالية لعمل استعلام مناسب للحالة 2
nssj قام بنشر يناير 31 الكاتب قام بنشر يناير 31 6 ساعات مضت, kanory said: ممكن اخي مجموعة من تلك الاخطاء التي تتوقع حدوثها في جدول ... اضف امثلة اخرى وكثر منها لفهم الالية لعمل استعلام مناسب للحالة أخي الكريم .. سأشرح الخطوات التي كنت سأقوم بها يدويا للقيام بالمطلوب، لعلها توضح ماهية الاستعلام أو الكود المطلوب البداية ستكون من (HNO)، مع ملاحظة أن كل الأرقام الموجودة فيه متكررة، وأبدأ بكل مجموعة وأنظر إلى المجموعة التي تقابلها من (SUB_ID) فإذا كان لها نفس الرقم فالعمل صحيح، وليس المقصود (بنفس الرقم) أن يكون لها نفس رقم (HNO)، بل المقصود أن يكون الرقم فيها موحداً لكل أفراد المجموعة، فإذا كان كذلك فالعمل صحيح وأنتقل للمجموعة التالية من (HNO) وهكذا وفي الجدول المرفق أول أربع مجموعات لا خطأ فيها أول خطأ في المجموعة التي تليها فلا ينبغي أن يختلف الرقم في (SUB_ID) بل ينبغي أن يكون الرقم موحداً إما (73) أو (72) لذلك ينبغي تمييز هذه المواضع بعلامة في (CHEK) لمراجعتها وتصحيحها وكذلك في موضع الخطأ الثاني كان ينبغي أن يكون رقم كل أفراد مجموعة (SUB_ID) هو (261) فالمطلوب تمييز هذا الموضع أيضاً لمراجعته ومعرفة سبب الخطأ هذه الخطوات التي كنت سأقوم بها يدويا، لكن الجدول كبير، مع وجود احتمال أن يزل النظر فلا أنتبه لوجود الخطأ لتتابع الأرقام .. فإذا كان من الممكن القيام بذلك عبر استعلام أو كود فهو أفضل
أفضل إجابة kanory قام بنشر فبراير 1 أفضل إجابة قام بنشر فبراير 1 5 ساعات مضت, nssj said: أخي الكريم .. سأشرح الخطوات التي كنت سأقوم بها يدويا للقيام بالمطلوب، لعلها توضح ماهية الاستعلام أو الكود المطلوب البداية ستكون من (HNO)، مع ملاحظة أن كل الأرقام الموجودة فيه متكررة، وأبدأ بكل مجموعة وأنظر إلى المجموعة التي تقابلها من (SUB_ID) فإذا كان لها نفس الرقم فالعمل صحيح، وليس المقصود (بنفس الرقم) أن يكون لها نفس رقم (HNO)، بل المقصود أن يكون الرقم فيها موحداً لكل أفراد المجموعة، فإذا كان كذلك فالعمل صحيح وأنتقل للمجموعة التالية من (HNO) وهكذا وفي الجدول المرفق أول أربع مجموعات لا خطأ فيها أول خطأ في المجموعة التي تليها فلا ينبغي أن يختلف الرقم في (SUB_ID) بل ينبغي أن يكون الرقم موحداً إما (73) أو (72) لذلك ينبغي تمييز هذه المواضع بعلامة في (CHEK) لمراجعتها وتصحيحها وكذلك في موضع الخطأ الثاني كان ينبغي أن يكون رقم كل أفراد مجموعة (SUB_ID) هو (261) فالمطلوب تمييز هذا الموضع أيضاً لمراجعته ومعرفة سبب الخطأ هذه الخطوات التي كنت سأقوم بها يدويا، لكن الجدول كبير، مع وجود احتمال أن يزل النظر فلا أنتبه لوجود الخطأ لتتابع الأرقام .. فإذا كان من الممكن القيام بذلك عبر استعلام أو كود فهو أفضل طيب اعمل مثلا زر امر وضع فيه هذه الشيفرة <<<<<<<<<>>>>>>>> Dim db As DAO.Database Dim qdf As DAO.QueryDef Dim strSQL As String Set db = CurrentDb Dim mov_st As String Dim rst As Recordset Set rst = CurrentDb.OpenRecordset("SELECT TAB3.HNO, TAB3.SUB_ID, DCount(""ID"",""TAB3"",""[HNO] ="" & [HNO] & "" and [SUB_ID] ="" & [SUB_ID] & """") AS Expr1, TAB3.CHEK, TAB3.ID, DCount(""ID"",""TAB3"",""[HNO] ="" & [HNO] & """") AS Expr2 " & _ " FROM TAB3;") rst.MoveFirst mov_st = rst!ID Do While Not rst.EOF If rst!Expr2 > rst!Expr1 And rst!Expr1 = 1 And rst!Expr2 > 2 Then rst.Edit rst!CHEK = True rst.Update ElseIf rst!Expr2 > rst!Expr1 And rst!Expr1 = 1 And rst!ID > mov_st Then rst.Edit rst!CHEK = True rst.Update Else End If mov_st = rst!ID rst.MoveNext Loop rst.Close Me.Refresh strSQL = "SELECT TAB3.ID, TAB3.MNO, TAB3.TNO, TAB3.HNO, TAB3.SUB_ID, TAB3.CHEK FROM TAB3 WHERE (((TAB3.CHEK)=True)) " 'db.QueryDefs.Delete "kanory" Set qdf = db.CreateQueryDef("kanory", strSQL) MsgBox "يتم الان فتح استعلام الاخطاء ", vbInformation + vbMsgBoxRight + vbOKOnly, "ملاحظة" DoCmd.OpenQuery "kanory", acNormal, acEdit 2
nssj قام بنشر فبراير 1 الكاتب قام بنشر فبراير 1 جزاك الله خيرا أخي الكريم وأحسن إليك تم المطلوب بحمد الله ولكن اسمح لي بسؤال لزيادة معلوماتي التراكمية 🙂 عندما نظرت في الكود ( Do While ،، Loop ) لاحظت أنه يشبه بعض الأكواد التي أحتفظ بها لعمليات الترقيم، وهي الأكواد التي فيها ( For i = 1 To K ،، Next i) فهل هذين النوعين يؤديان نفس الغرض ؟
kanory قام بنشر فبراير 1 قام بنشر فبراير 1 تابع هذه المشاركة لطرق وامثلة لحلقات التكرار في 29/1/2017 at 00:07, صالح حمادي said: الدرس الرابع: الحلقات التكرارية أو الدورانية Looping في كثير الأحيان يحتاج المبرمج أو المستخدم إلى تكرار تعليمة عدد من المرات حسب الحاجة. و هناك نوعان من الحلقات التكرارية , الأولى في حالة كان عدد مرات التكرار معروف و الثانية في حالة كان عدد التكرار مرتبط بشرط معين. أولا: الحلقة (For … Next) تستخدم الحلقة (For … Next) لتكرار عدد من المرات بحيث يكون عدد التكرارات معلوم. For counter = start To end [step increment] Statement Next counter Counter: متغير يمثل عداد الحلقة Start: القيمة الابتدائية للدوران End: القيمة النهائية للدوران Increment: مقدار الزيادة في كل حلقة من حلقات الدوران و إذا لم يوضع يأخذ القيمة 1 افتراضيا مثال1: For i = 1 To 10 Me.y = Me.y + i Next i هذا البرنامج يقوم بحساب مجموع الأعداد من 1 إلى 10 . بحيث i هو العداد و y مربع نص تظهر به النتيجة و القيمة الابتدائية له يجب أن تكون 0 مثال2: For i = 0 To 10 Step 2 Me.y = Me.y + i Next i في هذا البرنامج وضعنا قيمة الانتقال 2 يعني أن البرنامج سوف يحسب مجموع الأعداد الزوجية فقط (من 0 إلى 10) ثانيا: الحلقة (For Each … Next) تستخدم الحلقة (For Each… Next) عندما نريد تنفيذ تعليمة أو مجموعة من التعليمات لكل عنصر في مصفوفة أو مجموعة. و رغم أنها تشبه (For … Next) كثير إلا أنها تقوم بتنفيذ حلقة لكل عنصر مما يعني أنه لا يوجد عداد في هذا النوع من الحلقات. و يمكن استخدامها في المصفوفات أو مع الكائنات. صيغتها: For Each element In Group [statement 1] [statement 2] .... [statement n] Next مثال1: Dim Array_n() as string Array_n = Array(1, 2, 3, 5) Dim sum As Integer sum=0 For Each Item In Array_n sum = sum + Item Next Me.y = sum Array_n هي مصفوفة بها 4 عناصر. هذا البرنامج يقوم بحساب مجموع هذه العناصر و يضعها في مربع النص y Item : هي العنصر i: هو العداد مثال2: Dim frm As Form Dim fc As Control Set frm = Me For Each fc In frm.Controls Me.listbox.AddItem (fc.Name) Next هذا البرنامج يقوم بإضافة جميع أسماء عناصر النموذج الحالي إلى مربع قائمة listbox. السطر الأول هو تعريف المتغير frm من Form (نموذج) السطر الثاني تعريف المتغير fc من Control (عنصر تحكم) السطر الثالث إسناد النموذج الحالي (Me) للمتغير frm و ذلك باستعمال عبارة set لأن النموذج عبارة عن كائن (Object) . السطر الرابع هو القيام بالدوران لكل عنصر من عناصر النموذج(frm.Controls) السطر الخامس إضافة اسم العنصر(fc.Name) Listbox إلى مربع القائمة و ذلك بإستعمال التعليمة AddItem ثالثا: الحلقة (Do Until condition ... Loop) تقوم هذه الحلقة بتفحص الشرط قبل الدخول للحلقة إذا كان الشرط محقق (True) فإن البرنامج يقفز إلى ما بعد حلقة التكرارية أي أنه لن يتم الدخول للحلقة. و إذا كان الشرط غير محقق (False) فسيتم تنفيذ التعليمات Statments, ثم يرجع للسطر Do until لاختبار الشرط ثانية. و هكذا. يعني أنه سوف يتم تكرار الحلقة عدد من المرات حتى يتحقق الشرط. و لن ينفذه و لو مرة واحدة إذا كان الشرط صحيح من البداية. صيغتها: Do Until condition Statments Loop مثال: Dim i As Integer Dim sum As Integer i = 1 sum = 0 Do Until i > 10 sum = sum + i i = i + 1 Loop Me.y = sum يقوم هذا البرنامج بحساب مجموع الأعداد من 1 إلى 10 . i متغير من نوع integer يمثل العداد بالنسبة للحلقة في كل حلقة يزداد 1 و فيمته الابتدائية هي 1. sum متغير من نوع integer يمثل مجموع الأعداد قيمته الابتدائية هي 0. مادام i<10 فإن البرنامج يبقى يكرر العملية حتى يصبح i>10 و بعد نهاية الدوران يضع القيمة النهائية في مربع النص y رابعا: الحلقة (Do ... Loop Until condition ) هذا النوع من الحلقات يقوم بتنفيذ الدوران على الأقل مرة واحدة لأنه يختبر الشرط في نهاية الحلقة و بالتالي فإنه يتم الدخول للحلقة أولا ثم في نهاية الحلقة يتم تفحص الشرط. صيغتها: Do Statements Loop Until condition مثال: Dim i As Integer Dim sum As Integer i = 1 sum = 0 Do sum = sum + i i = i +2 Loop Until i > 10 Me.y = sum هذا البرنامج يقوم بحساب مجموع الأعداد الفردية من 0 إلى 10 لأن القيمة الابتدائية للعداد هي 1 و مقدار الزيادة في كل حلقة (الخطوة) هو 2 خامسا: الحلقة (Do While condition ... Loop) هذا النوع من الحلقات يقوم بتنفيذ الدوران مادام الشرط Condition محقق وإلا يتم التوقف عن الدوران في الحلقة و تقوم هذه الدالة بتفحص الشرط في بداية الحلقة. صيغتها: Do While Condition Statements Loop مثال: Dim i As Integer Dim sum As Integer i = 0 sum = 0 Do While i <= 10 sum = sum + i i = i + 2 Loop Me.y = sum يقوم هذا البرنامج بحساب مجموع الأعداد الزوجية من 0 إلى 10 مادام i<=10 فإن البرنامج يعيد الدوران. في كل دورة يقوم بإضافة 2 للعداد حتى يصبح i>10 سادسا: الحلقة (Do ... Loop While condition) هذا النوع من الحلقات الدورانية المشروطة يتم فيه تنفيذ التعليمات مرة واحدة على الأقل لأنها تختبر الشرط في نهاية الحلقة و هي تشبه النوع الرابع كثيرا, إلا أنها تستمر في الدوران مادام الشرط محقق و تتوقف عندما يصبح الشرط غير محقق. صيغتها: Do Statements Loop While Condition مثال: Dim i As Integer Dim mult As Long i = 10 mult = 1 Do mult = mult * i i = i - 1 Loop While i > 0 Me.y = mult هذا البرنامج يقوم بحساب جداء الأعداد من 10 إلى 1 و يضع النتيجة في me.y هنا وضعنا العداد i تنازليا (i=i-1) في كل دورة ينقص 1 من العداد حتى يصل إلى 0 نلاحظ هنا بالنسبة للمتغير mult و الذي يمثل الناتج أنني وضعت نوعه Long Integer بدلا من و السبب يرجع لأن النوع integer أقصى قيمة له هي 32767 و في هذه الحالة الناتج يفوق هذا العدد و بالتالي سوف يظهر لنا الخطأ رقم 6 (Overflow) 1 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.