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

تصحيح قاعدة if


إذهب إلى الإجابة الإجابة بواسطة ابو عارف,

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

قام بنشر

السادة الخبراء الافاضل

هل قاعدة if كدة مكتوبة صح

If me. xxx <> 0 and isnull (me.yyy) or me.yyy="" then
هنا مكتب الحدث
Else
Ebd if

المقصود انة اذا كان yyy لايساوى صفر و

 Xxx فارغ كدة القاعدة سليمة لماذا لاتعمل معى

قام بنشر

و مشاركه مع استاذى القدير و معلمى الجليل الاستاذ @ابو عارف :fff:  وطبعا بعد إذنه 

اضافة بسيطه

If Me.xxx <> 0 And (IsNull(Me.yyy) Or Trim(Nz(Me.yyy, "")) = "") Then
    ' هنا نكتب الحدث
Else
End If
  • Nz(Me.yyy, ""): يحول Null إلى ""
  • Trim(...) = "": يتحقق إذا كانت النتيجة بعد إزالة المسافات فارغة  مما يغطي Null ,  "" ,   " "
     
  • Thanks 1
قام بنشر
منذ ساعه, ابو جودي said:

وطبعا بعد إذنه 

اي كلام ده!!! اباجودي يستأذن!! مش معول🤔

تفضل عزيزي @ابو جودي حياك الله إذننا دائما معك

سؤال خطر ببالي حول دالتين  Nz و Trim  ولكن دالتين هذا يفيدنا في حالة استخدام قيمة متغير او عنصر ،Trim لإزالة  مسافات يمين و يسار قيمة و Nz  لإرجا فراغ عند عدم وجود قيمة ، ولكن هنا مطلوب التأكد ان كان حقل فارغ ام لا ، اذا فارغ خلاص قد تم ايفاء شرط و الا الشرط لايفي سواء بمسافات يمين و يسار أو بدونهم هذا حسب علمي طبعا و لو استاذنا كشف فيه ميزة اضافية ممكن يكرمنا بمثال بسيط الفرق بين استخدام تلك دالتين من عدمه.

  • Like 1
  • Thanks 1
قام بنشر
1 ساعه مضت, ابو عارف said:

اي كلام ده!!! اباجودي يستأذن!! مش معول🤔

طبعا مما لاشك فيه لابد للطالب من الاستئذان توقيرا واجلا للمعلم القدير الجليل :fff:

1 ساعه مضت, ابو عارف said:

سؤال خطر ببالي حول دالتين  Nz و Trim  ولكن دالتين هذا يفيدنا في حالة استخدام قيمة متغير او عنصر ،Trim لإزالة  مسافات يمين و يسار قيمة و Nz  لإرجا فراغ عند عدم وجود قيمة ، ولكن هنا مطلوب التأكد ان كان حقل فارغ ام لا ، اذا فارغ خلاص قد تم ايفاء شرط و الا الشرط لايفي سواء بمسافات يمين و يسار أو بدونهم هذا حسب علمي طبعا و لو استاذنا كشف فيه ميزة اضافية ممكن يكرمنا بمثال بسيط الفرق بين استخدام تلك دالتين من عدمه.

حاسس انى اتدبست - او غلطت فى شئ  - أو يتم اختبارى وأنا أقلق من هذه الموافق جدا  :eek2:

ولكن سوف ادلى بدلوي فإن اخطأت فهذا مني ومن سوء فهمي وتقديري أنا و وقتها تصحون لي خطئي  وجزاكم الله عني كل خير 

وإن أصبت فلقد تعلمت على ايديكم فأنتم أحد الأساتذة العظماء الذين أدين لهم بالفضل بعد رب العزة سبحانه وتعالي

 

سؤالك جدا ممتاز يا أستاذي ويفتح مجالا لفهم أعمق لدالتي Nz وTrim خاصة في سياق التحقق من الحقول الفارغة

دعني أوضح حسب فهمى المتواضح الفائدة من استخدام هاتين الدالتين ومتى تكونان ضرورييتان و ما الفرق بين استخدامهما أو عدمهما مع مثال

أولا شرح الدالتين:
1- دالة Nz :

 

Nz(Value, ValueIfNull)
  • تستخدم لتحويل قيمة Null إلى قيمة أخرى محددة (مثل "" أو 0 حسب رغبة مطور النظم )
  • مفيدة جدا عندما تتعامل مع حقل قد يحتوي على Null لأن أي عملية مقارنة مع Null (مثل Null = "") ترجع Null وليس True أو False

2- دالة Trim :

Trim(Value)
  • تزيل المسافات البيضاء (Whitespace) من بداية و نهاية السلسلة النصية مثل " abs "  أو " abs" أو "abs " تصبح "abc"
  • لا تتعامل مع Null فإذا كانت القيمة هى  Null  فإن Trim(Null) يظل Null

الهدف:

تريد التحقق مما إذا كان الحقل (Me.yyy) "فارغا" أم لا

"فارغ" قد يعني:

  • Null (لا قيمة على الإطلاق)
  • "" (سلسلة فارغة).
  • " " أو " " (مسافات فقط)

** إذا كان الحقل فارغا بأي من هذه الحالات يتحقق الشرط و إذا كان يحتوي على قيمة فعلية (مثل "abc") لا يتحقق الشرط.

سؤال حضرتك :

هل استخدام Nz و Trim يضيف ميزة إضافية في هذا السياق أم أن التحقق الأساسي بـ IsNull و = "" كاف؟

 

1- بدون Nz و Trim:

If Me.xxx <> 0 And (IsNull(Me.yyy) Or Me.yyy = "") Then 
' الشرط تحقق 
Else 
End If

يتحقق الشرط إذا:

  • Me.yyy هو Null
  • Me.yyy هو "" (سلسلة فارغة)

لا يتحقق الشرط إذا:

  • Me.yyy يحتوي على مسافات فقط (مثل " " أو " ")، لأن " " <> ""
  • Me.yyy يحتوي على نص (مثل "abc")، وهذا متوقع


2- مع Nz و Trim:

If Me.xxx <> 0 And (IsNull(Me.yyy) Or Trim(Nz(Me.yyy, "")) = "") Then
' الشرط تحقق
Else
End If

يتحقق الشرط إذا:

  • Me.yyy هو Null (لأن Nz يحوله إلى "" و Trim("") = "")
  • Me.yyy هو "" (لأن Trim("") = "")
  • Me.yyy هو " " أو " " (لأن Trim(" ") = "")

لا يتحقق الشرط إذا:

  • Me.yyy يحتوي على نص فعلي (مثل "abc")، لأن Trim("abc") <> ""

 

الميزة الإضافية لـ Nz و Trim:

  1. Nz:
  • يضمن التعامل مع Null بطريقة آمنة مما يمنع أي أخطاء غير متوقعة إذا حاولت مقارنة Null مباشرة
  • في الكود بدون Nz الشرط IsNull(Me.yyy) كاف لكن استخدام Nz يجعل الكود أكثر مرونة إذا أردت لاحقا إجراء عمليات إضافية على القيمة
  1. Trim:
  • يضيف القدرة على اعتبار المسافات البيضاء (Whitespace) كقيمة "فارغة" 
    بدون Trim إذا كان Me.yyy = " "   »--»»  فإن الشرط لن يتحقق لأن " " <> ""

الفرق الأساسي:

  • بدون Trim و Nz: لا يعتبر المسافات فقط (" ") فارغة
  • مع Trim و Nz: يعتبر المسافات فقط فارغة  بالإضافة إلى Null و ""

 

الأمثلة العملبة :

 

1- الكود بدون Nz و Trim

  • Me.xxx = 5 , Me.yyy = Null       →    "الشرط تحقق"
  • Me.xxx = 5 , Me.yyy = ""          →    "الشرط تحقق"
  • Me.xxx = 5 , Me.yyy = " "         →    "الشرط لم يتحقق" (لأن " " <> "")
  • "Me.xxx = 5 , Me.yyy = "abc    →    "الشرط لم يتحقق"

 

2- الكود مع Nz و Trim

 

  • Me.xxx = 5 , Me.yyy = Null        →    "الشرط تحقق"
  • Me.xxx = 5 , Me.yyy = ""           →    "الشرط تحقق"
  • Me.xxx = 5 , Me.yyy = " "          →    "الشرط تحقق" (لأن Trim(" ") = "")
  • "Me.xxx = 5 , Me.yyy = "abc     →    "الشرط لم يتحقق"

 

الخلاصة:
إذا كان مطور النظم لا يهتم بالمسافات
(مثل " " ) ويتعتبرها قيمة غير فارغة فالكود الأبسط بدون Nz و Trim كاف
إذا كان مطور النظم يريد أن تعتبر المسافات فارغة (مثل " " ) فاستخدام Trim و Nz يعطي ميزة إضافية

 

إذا نستخلص مما سبق أن Trim و Nz يجعلان الكود أكثر شمولية للتعامل مع جميع حالات "الفراغ" ( Null , سلسلة فارغة , مسافات فقط ) مما يجعله أكثر مرونة إذا كانت البيانات غير متسقة أو تحتوي على إدخالات غير متوقعة مثل المسافات :biggrin2:

  • Like 1
  • Thanks 1
قام بنشر
1 ساعه مضت, ابو جودي said:

الخلاصة:
إذا كان مطور النظم لا يهتم بالمسافات
(مثل " " ) ويتعتبرها قيمة غير فارغة فالكود الأبسط بدون Nz و Trim كاف
إذا كان مطور النظم يريد أن تعتبر المسافات فارغة (مثل " " ) فاستخدام Trim و Nz يعطي ميزة إضافية

 

لاشك ان دالتين مهمتين جدا في بعض الاحيان ولكن سؤالي كان  دور دالتين في إطار موضوع الحالي فقط 

على العموم ،اسطرك الجميلة منح رونق اضافي للموضوع و يسعدني مشاركتك القيمة.

  • Thanks 1
قام بنشر

الفراغ الذي دار الحديث حوله اذا كان مربع النص حقل نصي ، إما اذا كان حقل رقمي فلا حاجة لـ Trim باعتقادي 😁

ولا في حد عنده اعتراض هههههههه

  • Like 1
  • Haha 1
قام بنشر

انا وضعت الاجابة بشكل مفصل لتكون مرجعا شاملا وشرحا وافيا 

6 دقائق مضت, ابو عارف said:

ولكن سؤالي كان  دور دالتين في إطار موضوع الحالي فقط 

وردا على سؤال حضرتك بإختصار شديد جدا جدا 
 إذا كانت البيانات غير متسقة أو تحتوي على إدخالات غير متوقعة مثل المسافات الزائده بدون داعى اما عن طريق الخطأ او بسبب تنفيذ اى عملية خطأ  :biggrin2:
فدائما أحاول بقدر الإمكان عند تقديم أى حلول التكد من سد أى ثغرات تؤدى الى أخطاء مستقبليه ولن يتم اكتشافها فى الوقت الراهن 

 

9 دقائق مضت, ابو عارف said:

على العموم ،اسطرك الجميلة منح رونق اضافي للموضوع و يسعدني مشاركتك القيمة.

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

شكر الله لكم وأحسن اليكم كما تحسنون الينا وكل طلاب العلم وجزاكم الله خيـرا وكتبه لكم فى موازين اعمالكم ان شاء الله

كلماتكم الطيبه وسام عزة جزاكم الله خيـرا ولكن هذا فضل الله تعالى اولا ثم فضلكم انتم فهذا حصاد و ثمار ما زرعتم وتزرعون

وانا من يسعدنى ويشرفنى ان اشارك مع اساتذتى العظماء   

 

احبكم فى الله :wub:

  • Thanks 1
قام بنشر

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

قام بنشر
10 ساعات مضت, ابو جودي said:

إذا كانت البيانات غير متسقة أو تحتوي على إدخالات غير متوقعة مثل المسافات الزائده بدون داعى اما عن طريق الخطأ او بسبب تنفيذ اى عملية خطأ  

اخي الكريم و استاذنا الجليل @ابو جودي باختصار شديد ايضاً ، ضم دالتين (Isnull) و (="") يتحقق من جميع تلك الأخطاء  و ما اظن ان  يبق مجال لدوال اضافية هذا اولا و ثانيا نحن سلطنا ضوء كلها على شرط الثاني في السؤال و ما اذا اورد تلك الأخطاء في جقل xxx مثلا لان xxx برضو مش معصوم من الخطاء و لك منا الف تحايا. 

ملحوظة: بسبب عدم استطاعتي كتابة لغة عربية  صحيحة ، قد تعذر علي وصولكم فهمي بسهولة و وصفكم بكلمات ما يناسبكم ايضا ارجو ان لا تفكروني بانني غير مهتم، والله وراء الفصد.    

قام بنشر
منذ ساعه, ابو عارف said:

ارجو ان لا تفكروني بانني غير مهتم

انتم احد اهم ركائز المنتدى واحد اعظم الاساتذة الذين يتعلم منهم كل طلاب العلم وانا أول هؤلاء الطلاب وفى مقدمتهم ولا نظن بكم الا كل الخيــــــر :fff:

  • Like 1
قام بنشر
5 ساعات مضت, ابو جودي 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