اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
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
قام بنشر
  في 23‏/3‏/2025 at 19:04, ابو جودي said:

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

Expand  

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

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

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

  • Like 1
  • Thanks 1
قام بنشر
  في 23‏/3‏/2025 at 20:47, ابو عارف said:

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

Expand  

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

  في 23‏/3‏/2025 at 20:47, ابو عارف said:

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

Expand  

حاسس انى اتدبست - او غلطت فى شئ  - أو يتم اختبارى وأنا أقلق من هذه الموافق جدا  :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
قام بنشر
  في 23‏/3‏/2025 at 21:38, ابو جودي said:

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

 

Expand  

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

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

  • Thanks 1
قام بنشر

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

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

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

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

  في 23‏/3‏/2025 at 23:35, ابو عارف said:

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

Expand  

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

 

  في 23‏/3‏/2025 at 23:35, ابو عارف said:

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

Expand  

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

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

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

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

 

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

  • Thanks 1
قام بنشر

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

قام بنشر
  في 23‏/3‏/2025 at 23:51, ابو جودي said:

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

Expand  

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

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

قام بنشر
  في 24‏/3‏/2025 at 11:02, ابو عارف said:

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

Expand  

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

  • Like 1

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