الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار عن Isnull

بدأه AHMAD KALIL في 5 مايو 2009 · 5 رد · 617 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

مالفرق بين الجملتين التاليتين

if isnull(me.text1) then

if (me.text1) = "" then

ولكم الشكر

#2

استفسار جميل.

بانتظار أحد الأساتذة ليوضح الفرق جيداً.

أظن -والله أعلم- أن الفرق يكون داخلياً في الذاكرة، وليس خارجياً، فلنضرب مثالاً بالفرق بين "" و vbNullString بهذا الموضوع الذي يوجد عندي في المفضلة ولم أقرأه بعد:

http://www.xtremevbtalk.com/showthread.php?t=26717

إذا فالفرق ليس واضحاً، ولكنه قد يكون داخلياً.

بالنسبة إلي، قرأت أن أفضل استعمال للتحقق من أن النص فارغ هو:

If Len(Text1.Text) = 0 Then

فقد قرأت أنه الأسرع، والله أعلم.

بانتظار من يعرف :)

هذه الجملة خاطئة  :wacko: 


#3

وعليكم السلام ورحمة الله وبركاته ،،،

القيمة الافتراضية للأداة (Text.Text) هو ( " " ) ، ولا أدري هل هناك حالات تكون فيها قيمة الأداة (Null) لأن هذه القيمة غالبا ما تستخدم في قواعد البيانات للتحقق من وجود إدخال أم لا ...

ولا شك أن هناك فرق بين القيمتين ( " " ) وبين (Null) ، أرجو منك ضرب مثال تكون فيه قيمة الأداة تكست (Text.Text) = (Null) ... وتوضيح الهدف من طرح سؤالك .... بمعنى : ماذا تريد من سؤالك المطروح؟؟

#4

السلام عليكم...

يوجد ثلاثة أنواع من البيانات يمكن أن تسبب اللخبطة: اللاشيء (NULL) و الفارغ (EMPTY) و النص الفارغ أو النص ذو الطول الصفري (Empty String أو Zero-Length String).

من البداية سنستبعد النص الفارغ ( المعبر عنه هكذا: "" ) لأنه نوع محدد هو String، و لأن المتغير من هذا النوع يحتوي على قيمة مقبولة برمجياً لأنه يمثل سلسلة رمزية (حروف و أرقام و رموز الكتابة الأخرى) و حتى إن كان فارغاً فإنه في الواقع يحتوي على رمز واحد هو رمز نهاية السلسلة، و هو الرمز رقم صفر في جدول رموز آسكي.

و بما أنه - كما قلنا - نوع محدد (String) و مقبول برمجياً مثله مثل Long و Integr و Single و غيرها فإنه لا يسبب مشاكل حتى و إن كان فارغاً.

و أي نوع من تلك الأنواع المحددة لا يمكننا أن نسند إليه القيمة NULL كما في المثال التالي:

  1. Dim Var As String
  2. Dim Var2 As Long
  3.  
  4. Var = NULL ' تعطي خطأ
  5. Var2 = NULL ' تعطي خطأ
  6.  
  7. Var = "" ' جملة صحيحة
  8. Var2 = 0 ' جملة صحيحة
  9.  
  10. Text1.Text = NULL ' خطأ
  11.  

الجملة الأخيرة تتسبب في خطأ لأن الخاصية Text من النوع String فلا تقبل القيمة NULL أيضاً.

القيمتان NULL و EMPTY خاصتان بالنوع Variant فقط و فقط.

القيمة NULL تعني أن المتغير لا يحتوي على قيمة فعلية أو مقبولة، و بالتالي لا يمكن تحويلها إلى أي نوع من أنواع البيانات الأخرى. يمكن أن يحتوي متغير من النوع Variant على NULL بإحدى طريقتين: إما نسند إليه القيمة NULL صراحةً (MyVar = NULL) أو أن نسند إليه تعبيراً تكون نتيجته NULL كأن يحتوي التعبير أصلاً على قيم NULL أو نسند إليه قيمة دالة قد تعيد NULL أو نسند إليه حقلاً فارغاً في قاعدة بيانات.

لننظر إلى المثال التالي:

  1. Dim Var
  2. Var = NULL
  3. MsgBox Var ' يحدث خطأ
  4.  

جملة Dim Var تعلن عن متغير من النوع Variant (عندما لا نحدد النوع فإنه يكون تلقائياً Variant) و هي مكافئة لجملة Dim Var As Variant.

المتغيرات من النوع Variant تقبل القيمة NULL و هذا ما فعلناه في السطر الثاني. المشكلة تحدث في السطر الثالث. فالدالة MsgBox تحتاج إلى قيمة من النوع String أو قيمة يمكن تحويلها إلى String، لكننا ذكرنا سابقاً أن القيمة NULL لا يمكن تحويلها إلى أي نوع آخر، فيحدث الخطأ.

القيمة EMPTY أيضاً خاصة بالمتغيرات من النوع Variant لكنها أكثر مرونة. في VB فإن EMPTY تعني أنه لم يتم بعد إعطاء قيمة مبدئية للمتغير (Un-initialized) - و لا حتى القيمة NULL - لكن المتغير بهذا الشكل لا يتسبب في أخطاء، فإذا استعملناه ضمن تعبير String فإنه ببساطة يعتبر نصاً فارغاً (Empty String) و إذا استعملناه ضمن تعبير عددي فإن قيمته تعتبر 0 (صفراً). لكن بالمقابل لا يمكننا إسناد قيمة EMPTY لمتغير لأنه ببساطة لا يوجد نوع بيانات اسمه EMPTY فهذه الكلمة تستعمل فقط للدلالة على أن المتغير لم يُعطَ قيمة محددة بعد.

  1. Dim Var
  2.  
  3. If IsNull(Var) Then
  4. MsgBox "NULL"
  5. ElseIf IsEmpty(Var) Then
  6. MsgBox "EMPTY"
  7. Else
  8. MsgBox "Not NULL, Not Empty"
  9. End If
  10.  

الرسالة التي ستظهر في الكود السابق هي "EMPTY" لأننا لم نعط قيمة مبدئية للمتغير.

أخيراً هناك المتغير العام (ضمن مكتبة VBA) و هو vbNullString و هو في الواقع مؤشر إلى قيمة NULL (فهو يختلف عن النص الفارغ) و عادةً لا نستعمله إلا مع دوال API التي تحتاج القيمة NULL في بعض بارامتراتها.

نرجو الاستفادة و السلام.

وَ قُلِ اعْمَلُوا فَسَيَرَى اللهُ عَمَلَكُمْ وَ رَسُولُهُ وَ الْمُؤْمِنُونَ

صدق الله العظيم

#5

السلام عليكــم ورحمـة الله وبركاتــه ،،

شكرا لاجاباتكم

ولكن لتوضيح طرحي للسوؤل بسبب التالي

If IsNull(Me.Text1) Then

MsgBox " Pls Inter Plate No", vbCritical, "Data Entry"

Exit Sub

End If

هنا عندما اضغط save والحقل فارغ لاتوجد به قيمه لاينفذ هذا الشرط

ولكن عندما اجعل الكود بالطريقة التالية

If (Me.Text1) = "" Then

MsgBox " Pls Inter Plate No", vbCritical, "Data Entry"

Exit Sub

End If

فهنا ينفذ الشرط

وشكرا للاستاذ najy وضحت الصورة بارك الله فيك

#6

ما شاء الله يا أستاذ ناجي، فعلاً شرح أكر من رائع.

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

شكراً لك :)

هذه الجملة خاطئة  :wacko: 


مواضيع مشابهة