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

الأحد، 26 مارس 2017

دستور العشق


دستور العشق 

لَأُعَـذِّبَنَّ فؤادَها بالعشقِ كي لا تُنكرَهْ

وأُكحِّـلَنَّ رُموشَها بالليلِ حتى تَسهَرَهْ

وأُذَوِّبَنَّ شُعورَها بالشِّعرِ مثلَ السُّـكَّرَةْ

وأُسِيلُ نهرَ دموعِها بالوجْـدِ حتى تُزهِرَهْ

ولَسوفَ تَندمُ ما حَيَتْ إنْ لم أَذُقْها مُثمِرَةْ

أنا لستُ شيئا تافهًا مَرَّتْ عليه لِتَعبُرَهْ

أنا لستُ شخصًا صادَفَتْ يومًا ستَنْسَى مَظْهَرَهْ

أنا كلُّ ذِكرَى في الهَوَى عبْرَ الزمانِ مُعطَّرَةْ

حلمٌ جميلٌ لم تَنَـلْهُ، مَصيرهُا أن تَذكُرَهْ

وأنا المُغازِلُ حسنَها أبياتَ شِعرٍ مُسْـكِرَةْ

منذُ استطابتْ عَذبَهُ، مِنهُ غَدَتْ مُستكثِرَةْ

أنا نِصفُها الثاني، رُسِمْـتُ مُفَصَّلاً بالمِسطرَةْ

لا بلْ أنا هِيَ كلُّها.. أناْ حولَها مِثلُ الكُرَةْ

وإذا عليَّ تَمرَّدَتْ فأنا جروحٌ مُوغِرَةْ

لو عذَّبتْ كلَّ الرجالِ بحُسنِها مُتجبِّرَةْ

فأنا انتقامٌ عاصفٌ، بِمَدَاهُ أمسَتْ مُبحِرَةْ

مَكْرُ الهَوَى أَودَى بها لمّا نَوَتْ أنْ تَمْـكُرَهْ

فإذا بها بجمالِها ودلالِها مُتحيِّرَةْْ

ظلَّتْ تُعذِّبُ نفسَها، عن أضلعي مُستكبرةْ

مغرورةً بذكائها، وبمُقلتيَّ مُغَرَّرَةْ

مَن في الوَرَى أولَى بها في العشقِ كي تَتخيَّرَهْ

غيرِي؟.. وغَيْرتُها عليَّ على العِيَانِ مُنَشَّرَةْ!

أتخافُ بَطْشَ ذُكورةٍ بأنوثةٍ مُتفجّرةْ؟

وأنا الذي فَتَكَتْ بقلبي نظرةٌ مُستهترَةْ

لا تَخْشَ شيئا: إنَّ مَن هُزِمَتْ لَديَّ مُظَـفَّرةْ

تَغدو لَدَيَّ أسيرةً، مملوكةً، ومُحرَّرَةْ!

تَغفو بصدري طفلةً، وعلى الفؤادِ مُؤَمَّرَةْ!

أَمْرُ العقولِ مُعقَّـدٌ.. أمّا القلوبُ مُيسَّرَةْ

في يومِ غضّتْ طَرْفَها ستَرَى معي ما لم تَرَهْ

تَمشي بحشمةِ ثوبِها بينَ العيونِ مُوَقَّرَةْ

تُدني إليَّ قطوفَها وعن الأنامِ مُسَوَّرَةْ

هي لي أنا، وحدي أنا، منذُ الوجودِ مُقَدَّرَةْ

فإذنْ لها سأقولُها - لي في الغرامِ المَعذِرَةْ:

إنْ تُضْحِ عبلةَ في الهوى، أناْ في افتتاني عنترةْ

أَسْرِي الجميلُ مَصيرُها.. مُنصَاعةً أو مُجبرَةْ!

فَلْتَهْوِ في حِضني إذنْ في التوِّ، لا متأخِّرَةْ

أو فَلْـتَعِشْ لَهْـفَى بدوني، حُرَّةً مُتحسِّرَةْ!

محمد حمدي غانم
26/3/2017

المتغيرات Variables


المتغيّرات Variables:

كما ذكرنا من قبل، تتشابه المتغيّرات مع الثوابت، فهي أيضا تحفظ القيمِ في الذاكرة أثناء تنفيذ البرنامج ولها أنواع محددة.. لكن المتغيرات تختلف عن الثوابت في نقطة أساسية، هي أنك تستطيع تغيير قيمها في أيّ لحظةٍ أثناء تشغيل البرنامج، وهذا هو سبب تسميتها بالمتغيّرات.

وفي فيجوال بيزيك تستخدم الكلمة Dim لتعريف المتغيرات، وهو ما يعرف أيضا بالإعلان عن المتغيرات Variable Declaration.. مثال:

Dim UserName As String
UserName = "محمد"

Dim Percent As Double
Percent = 0.35

لاحظ الاختلاف بين القيمتين "محمد" و 0.35، فالقيمة الأولى نص String لهذا تمّ وضعها بينَ علامتَيْ تنصيص، بينما الثانية قيمة رقميّة Numeric Value.

ويمكننا إعادة كتابة الكود السابق بشكل مختصر كالتالي:
Dim UserName As String = "محمد"
Dim Percent As Double = 0.35

حيث وضعنا قيمة ابتدائية لكل متغير في سطر تعريفه.. هذا أمر اختياري متروك لك، فلو لم تضع قيمة ابتدائية للمتغير في سطر تعريفه، فستعطيه فيجيوال بيزيك قيمة ابتدائية افتراضية تبعا لنوع المتغير، كما هو موضح في الجدول التالي: 

نوع المتغير
القيمة الافتراضية
المتغيرات الرقمية (مثل Integer و Double)
0
الحرف Char و النص String
(نص فارغ)
المتغير المنطقي Boolean
False
أي كاائن Object من أي نوع
Nothing

 غني عن القول، إنك لا تستطيع استخدام المتغير قبل تعريفه:

' الكود التالي خاطئ
UserName = "محمد"
Dim UserName As String

وهناك تسهيل آخر، هو قدرتك على تعريف أكثر من متغيّر من نفس النوع، بدون تكرار اسم النوع بعد كل متغيّر.. انظر المثال التالي:

Dim X, Y, Z As Integer, I, J As Double

في هذا السطر المنفرد، عرّفنا ثلاثة متغيرات (X, Y, Z) من نوع العدد الصحيح Integer، ومتغيّرين (I, J) من نوع العدد المزدوج Double.. وهو ما يوفر علينا كتابة السطور الخمسة التالية:

Dim X As Integer
Dim Y As Integer
Dim Z As Integer
Dim I As Double
Dim J As Double

لاحظ أنك لا تستطيع وضع قيمة ابتدائية لأكثر من متغير معا، لكن يمكن وضع أكثر من قيمة ابتدائية في نفس السطر كالتالي:
Dim X As Integer = 3, Y As Integer = 4

من كتاب المبرمج الصغير للصف الثالث الإعدادي (الفصل الدراسي الثاني).. للتنزيل كاملا:

الجمعة، 24 مارس 2017

قمقمها المسحور


قمقمها المسحور 

يا بَيضَ الديكِ ويا لبنَ العُصفورْ
هل ثَمَّةَ هَرَبٌ مِن عشقٍ مَقدورْ؟
أسْـرٌ عيناها..
قُمقمُها المسحورْ
وأنا جِنّيٌّ يَهواها
يَتَّكِئُ على قلبٍ مكسورْ
مخمورٌ ـ  لَذَّتْ عيناها ـ
في فَخٍّ حُلوٍ مأسورْ
لم يَعلمْ يومًا
لم يأبَه لومًا
يَتفاخرُ دومًا، يا تَعْسَ المغرورْ
أن الأحزانَ لِهَاتِيكَ العينينِ نُذورْ!
***
يا بنتَ الحُورْ
إنّي مفتونٌ منذُ عصورْ
أمشي في رَوضِكِ ظمآنًا
حسنُكِ يتمايلُ رَيْحانًا
يَضحكُ مِن حولي جذلانًا ويدورْ
يَتدلّلُ عطرًا في رئتي.. ويَثورْ
وأنا بجنونِ المخمورْ
أبغي أن أحضُنَ مذهولا
أنثى تتجسّدُ طيفَ عطورْ
أن أَلثَمَ يَوما شَفَةَ النورْ
أَنهَلَهُ حتّى آخرِ قطرةِ وجعٍ في بحري المسجورْ
وأُراقصَ سِربَ سرابِكِ
في طُرقاتِ الوحشةِ في الديجورْ
أَبغي أتحرّرُ يوما من أسْرِ القمقمِ،
لأحقّقَ أجملَ أمنيّاتِكِ،
في عهدٍ مسطورْ
***
يا علقمَ هذا القلبِ وسُـكَّرَهُ المنثورْ:
الشوقُ يَفورْ
وأنا مَنسِيٌّ منذُ دهورْ
في داخلِ قُمقُمِكِ المسحورْ!
محمد حمدي غانم
24/3/2017

فئة قارئ بيانات سيكويل SqlDataReader Class


 فئة قارئ بيانات سيكويل SqlDataReader Class 

 هذه الفئة ترث الفئة DbDataReader بكل وسائلها وخصائصها، وهي تمكنك من قراءة البيانات القادمة من خادم سيكويل.
وليس لهذه الفئة حدث إنشاء Constructor، ولكنك تستطيع الحصول على نسخة منها باستدعاء الوسيلة SqlCommand.ExecuteReader.
ولا تمتلك هذه الفئة أية خصائص جديدة غير ما ترثه من الفئة الأم، ولكنها تمتلك العديد من الوسائل الجديدة، وهي تقوم بقراءة البيانات من العمود الذي أرسلت رقمه إليها كمعامل، وتحولها إلى نوع البيانات المطلوب.. ولأسماء هذه الوسائل الصيغة العامة GetX، حيث X هو اسم نوع البيانات الذي سيتم التحويل إليه.. وهذه الوسائل هي:

GetSqlBinary
GetSqlBoolean
GetSqlByte
GetSqlBytes
GetSqlChars
GetSqlDateTime
GetSqlDecimal
GetSqlDouble
GetSqlGuid
GetSqlInt16
GetSqlInt32
GetSqlInt64
GetSqlMoney
GetSqlSingle
GetSqlString
GetSqlValue
GetSqlValues
GetSqlXml
GetTimeSpan

على سبيل المثال، الوسيلة GetSqlBinary تعيد كائنا من النوع SqlBinary، وهي مناسبة لقراءة الأعمدة التي تحتوي بيانات من النوع image أو varbinary(MAX)، لهذا استخدماها في الزر GetSqlBinary في المشروع ReadLargeData، لقراءة صورة أول ناشر من العمود Logo2 (ويمكنك استخدامها أيضا للقراءة من العمود Logo)، وحفظها في ملف.. لاحظ أن عملية القراءة ستتم هنا بطريقة مباشرة (غير تتابعية)، وأن حجم الصورة سيؤثر على كفاءة هذه العملية، فلو كانت ضخمة فسيأخذ نقلها وقتا طويلا، وسيتم تحميلها في الذاكرة كاملة قبل حفظها في الملف!

أما الوسيلة GetSqlBytes فستجد مثالا على استخدامها في الزر SqlFileStream.Read في المشروع ReadLargeData.. في هذا الكود استخدمنا الوسيلة GetSqlBytes لقراءة مصفوفة محتوى التعاملات Transaction Context. 

بهذا نكون قد أكملنا تعرفنا على قارئ البيانات.. وللتدريب على ما تعلمناه حتى الآن، يمكنك فحص المشروع AuthorBooks_Reader.. في هذا المشروع نسمح للمستخدم بكتابة اسم المؤلف في مربع نص، وعندما يضغط الزر "عرض الكتب"، نستخدم قارئ البيانات لكتابة كتب هذا المؤلف في مربع نص متعدد الأسطر.

لا تنسَ نسخ قاعدة بيانات الكتب من القرص الضوئي إلى المحرك C: والتأكد من أنها ليست للقراءة فقط، لكي يعمل المثال بشكل صحيح. 

ملحوظة:
لاستخدام الإجراء المخزن GetAuthorBooks للحصول على كتب المؤلف الذي ترسل إلى هذا الإجراء اسمه كمعامل، أجر التعديلات التالية على المشروع AuthorBooks_Reader:
-  ضع في الخاصيّة CommandText الخاصة بكائن الأمر اسم الإجراء المخزّن GetAuthorBooks.
-  ضع في الخاصية CommandType الخاصة بكائن الأمر القيمة StoredProcedure.
-  لا تُجرِ أية تعديلات على المعامل @Author الذي أضفناه إلى مجموعة معاملات كائن الأمر.
هذا فقط هو كل المطلوب، وسيعمل البرنامج بشكل سليم، وسيعطي نفس النتائج التي كان يعطيها سابقا، مع اختلاف واحد: أنه يستخدم الإجراء المخزن بدلا من جملة SQL.
والمشروع AuthorBooks_Reader2 يحتوي بالفعل على هذه التعديلات.

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

 

حافظي عليكي ليا


إنتي أمانة حب ليا عند نفسك

 يا جنتي أرجوكي حافظي عليكي ليا

 من كل عين تشتاق جمالك تهوى حسنك

 غيرتي عليكي حبيبتي قد الدنيا ديا

 محمد حمدي 2017

 

صفحة الشاعر