برجاء تسجيل الإعجاب بالصفحة لتصلك كتاباتي على فيسبوك

المتابعون للمدونة

السبت، 27 أغسطس، 2016

تيه عيناك



تيهٌ عيناك 

يا مثلَ قمرْ

قلبي منهوكٌ بعدَ سَفَرْ

تِيهٌ عيناكِ، الحبُّ قَدَرْ

وأنا عطشانٌ دونَ مَطَرْ

 

يا عَزْفَ وَتَرْ

سِحرٌ في العينِ القلبَ شَطَرْ

نصفًا للشوقِ أسيرَ سَهَرْ

والنصفَ الآخرَ عِندَكِ فَرّْ

 

يا عطرَ زَهَرْ

عِشقُكِ أضناني، العمرُ عَبَرْ

ذُوبي شوقًا يا قلبَ حجرْ

وطني في حِضنِكِ حينَ أَقَرّْ

محمد حمدي غانم

17/8/2016

 

 


دوال التجميع Aggregate functions



دوال التجميع Aggregate functions:

تمنحك SQL بعض الدوال الجاهزة ل‘جراء بعض الحسابات على سجلات قاعدة البيانات.. لاحظ ما يلي:

- هذه الدوال تقبل معاملا واحدا فقط، هو أحد أعمدة الجدول، أو أيّ عمود جديد ناتج عن إجراء عمليّة حسابيّة (كالجمع والطرح والضرب والقسمة) على واحد أو أكثر من الأعمدة، أو أيّ عمود ناتج من جملة SELECT فرعيّة.

- هذه الدوال تعيد قيمة واحدة فقط (رقما منفردا).. أيّ أن الناتج منها هو عمود يحتوي على خانة واحدة فقط.. ولو كنت ستعرض هذه النتيجة، فاستخدم التعبير AS لمنح هذا العمود الجديد اسما مناسبا، وإلا فإن SQL ستمنحه اسما افتراضيّا.

- لا مانع من استخدام الفقرة WHERE لتحديد السجلات التي ستتمّ العمليّة الحسابيّة عليها.

وهذه الدوال هي:

 


الأحد، 21 أغسطس، 2016

عصابة خطوط المحمول



عصابة خطوط المحمول 

اشتريت خط فودافون الأسبوع الماضي، وحاولت تسجيله ببطاقتي.. لكن الشركة رفضت تسجيله بحجة أن لدي خطوطا كثيرة مسجلة باسمي!!

ذهبت إلى فرع فودافون في دمياط، واستعلمت عن الأرقام المسجلة ببطاقتي، فاكتشفت وجود رقمين غريبين لم أرهما من قبل قط، فتقدمت بطلب لإلغائهما، لأن من الخطر بقاء خطين باسمي في يدي غريبين قد يرتكبان بهما أي جريمة فأتحمل أنا مسئوليتها!

لكن كيف تم تسجيل هذين الخطين؟

يريد المسوّقون تسريع بيع خطوط المحمول، لهذا حينما يقوم شخص بشراء خط جديد، يقومون بتسجيل خطوط أخرى برقم بطاقته دون أن يدري، وبيعها في محلات الهاتف.. لهذا عليكم أن تحذروا أن الخطوط التي يعرض عليكم شراؤها فوريا بدون تسجيل بياناتكم، هي خطوط مسجلة بأسماء أناس آخرين لا يعلمون عنها شيئا.. وقبل أن يظن أحدكم أن هذا لن يضره في شيء، اسألوا أنفسكم: ماذا لو كان هذا الخط باسم شخص له سوابق إجرامية، أو حتى شخص عادي لكنه تورط في مخالفة قانونية بعد ذلك استلزمت مراقبة كل الخطوط المسجلة باسمه؟!

وحتى بدون كل هذا: لماذا تساعد عصابة التزوير هذه في عملها بشرائك لهذه الخطوط المضروبة؟

ولماذا تمنع شخصا آخر من تسجيل خط جديد باسمه لأن هناك مجرما عديم الضمير سجله رغم علمه واشتريته أنت؟

وماذا لو اكتشف هذا الشخص الأمر مثلي، وقام بإلغاء الخط المزيف بعد أن اشتريته أنت؟

نقطة هامة أخرى:

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

فانتبه جيدا أن البائع أو مندوب الشركة قد يحاول استدراجك لتخبره باسم جدك من ناحية الأم.. لا تفعل تحت أي ظرف، وأكمل تفعيل الخط بنفسك عبر خدمة العملاء، فلو عرف اسم الجد، فقد يسجل خطوطا أخرى باسمك تباع إلى أشخاص غيرك، قد يورطونك في جرائك ومشاكل قانونية أنت في غنى عنها!

ونصيحة أخيرة:

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

لا تتكاسل، فالأمر جد خطير.


فقرة الترتيب ORDER BY



فقرة الترتيب ORDER BY:

يمكنك ترتيب السجلات الناتجة من الاستعلام تبعا لحقلٍ أو أكثر.. وفي المثال التالي سنعرض أسماء الكتب ومؤلفيها مرتبة باسم الكتاب:
SELECT Book, Author
FROM Books, Authors
ORDER BY Book
WHERE AuthorID = Authors.ID

ولكن لو كانت هناك كتب تحمل نفس الاسم، فكيف سيتمّ ترتيبها؟
في هذه الحالة يمكنك أن تحدّد حقل المؤلفين كمفتاح ثانٍ للترتيب، بحيث لو تشابهت أسماء الكتب، يتم ترتيب الكتب المتشابهة على حسب أسماء مؤلفيها:
SELECT Book, Author
FROM Books, Authors
ORDER BY Book, Author
WHERE AuthorID = Authors.ID

ويكون هذا الترتيب تصاعديّا في الوضع الافتراضيّ.. ولو أردت أن تغير طريقة الترتيب، فاستخدم الكلمة DESC بعد اسم أيّ حقلٍ تريد ترتيبه تنازليّا، والكلمة ASC بعد اسم الحقل الذي تريد ترتيبه تصاعديّا (وهي افتراضيّة ويمكن ألا تكتبها).. مثال:
SELECT Book, Author
FROM Books, Authors
ORDER BY Book DESC, Author ASC
WHERE AuthorID = Authors.ID
 

ملحوظة:
لوضع كيفيّة الترتيب في باني الاستعلام، حدد الحقل الذي تريد أن يتمّ الترتيب على أساسه في قسم المخطط Diagram Pane واضغطه بزرّ الفأرة الأيمن، ومن القائمة الموضعيّة اضغط الأمر Sort Ascending إذا كنت تريد الترتيب تصاعديّا، أو الأمر Sort Descending إذا كنت تريد الترتيب تنازليّا.. ستجد أن أيقونةً تمثل نوع الترتيب قد ظهرت بجوار اسم الحقل.. ولو أردت إزالة الترتيب، فاضغط نفس الأمر من القائمة الموضعيّة مرّة أخرى.. ويمكنك فعل ذلك مع أكثر من حقل ومن أيّ جدول، حيث ستظهر كلها في جملة SQL بالترتيب الذي أضفتها به.
كما يمكنك اختيار نوع الترتيب بطريقة أخرى، وذلك باستخدام قسم المعايير Criteria Pane، حيث يمكنك استخدام القائمة المنسدلة في العمود الذي يحمل العنوان Sort Type لتغيير طريقة ترتيب أي حقل.
وإذا أردت استخدام أكثر من حقل للترتيب على أساسها، فعليك استخدام العمود Sort Order للتحكم في أولوية هذه الحقول في عملية الترتيب، فالحقل الذي سيتم الترتيب على أساسه أولا أعطه الرقم 1، والحقل الذي سيتم الترتيب على أساسه في حالة تشابه قيم الحقل الأول أعطه الرقم 2، وهكذا.

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


الخميس، 18 أغسطس، 2016

أحلى منجزاتك



أحلى مُنجزاتِك

 

لماذا لستُ أحلى مُنجزاتِكْ؟ = ألا أكفيكِ في تحقيقِ ذاتِكْ؟

لماذا لا أكونُ أنا التحدّي: = غدًا إثمارُ زهري في نَباتِكْ؟

أليسَ الشِّعرُ في شَفَتَيَّ فخرًا = إذا أغلاكِ بينَ صُوَيْحِباتِكْ؟

ألا أَحويكِ في قلبي سنينا = كَسِرٍّ غامرٍ بالسِّحرِ فاتِكْ؟

فما يُؤذيكِ في عشقي فَتاتي = إذا لَملمتُ حُلمي مِن فُتاتِكْ؟!

أنا أُعلِيكِ حينَ عليكِ أَعلو = ألا معنى لشمسٍ في حياتِكْ؟

فكوني ـ مثلما أهواكِ ـ بدري = تَكُنْ نَجماتُ ليلي حارساتِكْ

فلا تتمرّدي في أسرِ عشقي = أنا وحدي أعيشُ بذكرياتِكْ

أحبيني فهذا كلُّ عَرضي = وضمّيني لأنهلَ مِن فُراتِكْ

محمد حمدي غانم

30/4/2016

 

 


القيم المنعدمة Null Values



القيم المنعدمة Null Values:

تشيرُ القيمة Null في قاعدة البيانات، إلى أن الخانة لم توضع بها أيّ قيمة أساسا.. لهذا تختلف الخانة التي بها نص فارغ "" عن الخانة التي ليس بها أي شيء على الإطلاق.

وعند تنفيذ الفقرة WHERE، فإنها لا تسترجع أيّ خانة فارغة، لأن القيمة NULL تنتج False بطريقة دائمة في أيّ عمليّة مقارنة.. هذا بالإضافة إلى أن دخول هذه القيمة في أيّ عمليّة حسابيّة يؤدّى إلى حدوث خطإ في البرنامج.

لهذا يجب أن تعامل هذه القيمة بحذر، حيث يمكنك أن تختبر وجودها باستخدام أحد التعبيرين IS NULL أو IS NOT NULL.. وكمثال، استخدم الاستعلام التالي للبحث عن أيّ خانة في الحقل Author تمّ تركها فارغة:

SELECT * FROM Authors

WHERE Author IS NULL

لاحظ أنك تستطيع تلافي الكثير من احتمالات الخطأ الناتجة عن القيمة Null، بإزالة علامة الاختيار من العمود Allow Nulls عند تصميم الحقول، بحيث لا يستطيع مدخل البيانات ترك خانة فارغة في هذا الحقل.

 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


 


الأربعاء، 17 أغسطس، 2016

قلب صخري



يا قلب صخري = أنا جبت آخري

أنا حبي بدري = ليه تحبي وخري

يا أحلى حوّا = يا سر فخري

من حاسدينك = حواليكْ مباخري

محمد حمدي غانم، 2016

 


الكلمة DISTINCT



الكلمة "منفصل" DISTINCT:

استخدم هذه الكلمة لإزالة السجلات المكرّرة من ناتج الاستعلام.. فمثلا، لو عرضنا جدولا بأسماء الكتب بدون مؤلفيها، فقد يتكرر اسم أحد الكتب أكثر من مرة (لمؤلفين مختلفين).. هنا يمكن تلافي هذا التكرار باستخدام الجملة التالية:

SELECT DISTINCT Book

FROM Books

  

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


الثلاثاء، 16 أغسطس، 2016

كيف ما قلت شيئا



كيفَ ما قلتَ شَيَّا؟ 

يا جميلَ المُحيّا = رُدَّ مَنْ ماتَ حيّا

أَهْدِ للشوقِ قُربًا = يُسعِدُ القلبَ، هيّا

أينَ مَنْ فاهَ شِعرًا؟.. خانهُ الشِّعرُ عَيَّا

قالَ بالعينِ: "أهوَى" = كيفَ ما قلتَ شَيَّا؟

هل تَرَى الحبَّ طُهرًا = أم تَرى الحبَّ غَيّا؟

فامنحِ الرَّوحَ حُسنًا = وامنحِ القلبَ فَيَّا

يَرقُصِ القلبُ فَرحًا = بالمُـنى قد تَزَيّا 

محمد حمدي غانم 

ملحوظة عروضية:
يمكن اعتبار هذه الأبيات من البحر المتدارك (فاعلن فاعلن فع)،
أو الخفيف (فاعلاتن متفعلْ)،
أو الممتد (فاعلن فاعلاتن)،
أو المضارع (فاعلن فاعلاتن) بخرم التفعلية مفاعلن.


الكلمة TOP



الكلمة TOP:

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

SELECT TOP 5 Book, Author

FROM Books, Authors

WHERE AuthorID = Authors.ID

وإذا لم تكن تعرف بالضبط عدد السجلات المطلوبة، فيمكنك استخدام النسبة المئويّة PERCENT كالتالي:

SELECT TOP 5 PERCENT Book, Author

FROM Books, Authors

WHERE AuthorID = Authors.ID

  

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


الاثنين، 15 أغسطس، 2016

في انتظارك



زهدتِ الآنَ إعلانَ انتصارِكْ = على المجنونِ شوقا في حصارِكْ؟
فلا تبكي على المِسكينِ حبّي = إذا ما ماتَ من طولِ انتظارِكْ

محمد حمدي غانم

 


وضع اسم مستعار



وضع اسم مستعار باستخدام الكلمةAS :
رأينا من قبل كيف يمكن استخدام الكلمة AS لوضع اسم مستعار للجدول.. مثلا:

SELECT A.*, B.ID, B.Book
FROM Authors As A, Books As B

ويمكنك أيضا استخدام الكلمة AS لوضع اسم مستعار للحقل.. مثال:
SELECT Book AS [اسم الكتاب], Author AS [المؤلف]
FROM Books, Authors
WHERE AuthorID = Authors.ID

الآن ستظهر أسماء المؤلفين وكتبهم، ولكن عنواني العمودين سيكونان اسمين عربيّين هذه المرّة.
ومن الاستخدامات الطريفة للاسم المستعار، استخدامه لتسميّة أحد الحقول الناتجة عن دمج حقلين معا.. افترض أننا نريد عرض حقل يحتوي على اسم الكتاب متبوعا بشرطة متبوعةً باسم المؤلف.. لفعل هذا، علينا تشبيك Concatenate الحقلين، تماما كما نفعل مع المتغيّرات النصّيّة في لغات البرمجة العادية، مع منح الحقل الناتج اسما مستعارا باستخدام الكلمة AS، كالتالي:

SELECT Book + '_' + Author AS [اسم الكتاب]
FROM Books, Authors
WHERE AuthorID = Authors.ID
 

ملحوظة:
عند تنفيذ الجملة السابقة في باني الاستعلام سيتم وضع التعبير Book + '_' + Author كحقل في قسم المعايير Criteria Pane، مع منحه الاسم المستعار "اسم الكتاب".. هذه هي الطريقة التي تضيف بها الحقول المدمجة في باني الاستعلام.. اكتب العمليّة التي تجمع بين الحقلين في أيّ خانة فارغة في العمود Column، وامنح هذا الحقل الجديد الاسم المستعار المناسب.

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

 من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


دوبان



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

محمد حمدي غانم، 2016

 


بعض الدوال النصية في SQL



بعض الدوال النصية المستخدمة في إنشاء الشرط:
يمكنك استخدام بعض الدوال في تكوين شرط WHERE، مثل دوال تقطيع النص SUBSTRING و LEFT و RIGHT، ودالة حذف المسافات الطرفية TRIM ودالة طول النص LEN، بطريقة شبيهة باستخدامها في دوت نت.. والمثال التالي يعيد الناشرين الذين تنتهي أسماؤهم بالحرفين "ية":

SELECT Publisher
FROM Publishers
WHERE (RIGHT(Publisher, 2) = 'ية')

أما المثال التالي فيعيد أطوال أسماء الناشرين:
SELECT LEN(Publisher)
FROM Publishers 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:

 


الجمعة، 12 أغسطس، 2016

الصيد لي



يا فاتناتِ القلبِ: ليتَ الصيدَ لي!
فَجرحنَني، هل لي دواءُ الصيدلي؟

محمد حمدي غانم، 2016


المقارنة بناتج استعلام



المقارنة بناتج استعلام:

من الإمكانيّات التي تمنحها لك الفقرة WHERE، قدرتك على مقارنة قيمة أحد الحقول، بقيمة أيّ حقل من جدول آخر، ناتج عن جملة SELECT كاملة أخرى!
انظر للمثال التالي، وفيه نحصل على كل الكتب التي ألفها (عباس العقاد) و(توفيق الحكيم):

SELECT *
From Books
WHERE AuthorID = (SELECT ID
   FROM Authors
   WHERE Author = 'عباس العقاد'
   OR Author = 'توفيق الحكيم')

حيث تُعيد SELECT الفرعيّة حقلا به رقما هذين المؤلفين، لتقوم الجملة SELECT الخارجيّة بإيجاد السجلات التي تحتوي على أيّ من هذين الرقمين في الحقل AuthorID.
في جدول الكتب.. لاحظ أنك تستطيع اختصار الجملة السابقة إلى ما يلي:

SELECT Books.*
From Authors , Books
WHERE AuthorID = Authors.ID
              AND Author = 'عباس العقاد' OR Author = 'توفيق الحكيم' 

من كتاب: من الصفر إلى الاحتراف برمجة قواعد البيانات في فيجوال بيزيك دوت نت ADO .NET.. للتنزيل:


 


الأربعاء، 10 أغسطس، 2016

عاصفة



أودت به في نظرة خاطفةْ

مستغرقا في اللذةِ الخائفةْ

هل هذه في قلبِه عاطفةْ؟

أم أنها في عينِها عاصفةْ

هل إنها عن شوقِهِ صادفةْ

أم أنها عن حالِهِ عارفة؟ْ

هل رُوحها عن حبِّهِ عازفةْ

أم أنها في حُلمِهِ عازفةْ؟

محمد حمدي غانم، 2016


شاشة بدء التشغيل



إنشاء شاشة بدء التشغيل Splash Screen في فيجوال بيزيك وسي شارب:

واحدة من نقاط التفوق العديدة التي تمتاز بها لغة فيجوال بيزيك دوت نت على سي شارب، هي شاشة بدء التشغيل Splash Screen والتي يمكن إنشاؤها جاهزة في فيجوال بيزيك بسهولة تامة باختيار إضافتها بضغط القائمة Project ثم ضغط الأمر Add Windows Form، واختيار العنصر Splash Screen من النافذة التي ستظهر:


ثم فتح خيارات المشروع من القائمة Project، وعرض الشريط Application والتحرك بالمنزلق لأسفل لعرض القائمة المنسدلة التي عنوانها Splash Screen وإسدالها لاختيار النموذج الذي أضفناه للتو (اسمه الافتراضي SplashScreen1).. بمجرد تشغيل البرنامج ستظهر شاشة بدء التشغيل، وتظل لعدة ثواني ثم تختفي ويظهر النموذج الرئيبسي في المشروع.. سيتبقى عليك فقط تعديل تصميم النموذج SplashScreen1 ليعرض بيانات مشروعك.

وللأسف لا تتيح سي شارب هذا التسهيل، لهذا يجب أن تنشئها بنفسك.. هذا مشروع من كود بروجيكت يفعل هذا:


وهذا موضوع تعليمي أيضا:


صفحة الشاعر