بسم الله الرحمن الرحيم
أخواني للتحدث عن كيفية ارسال واستقبال بيانات عبر الانترنت يجب ان يكون لدينا فكرة بسيطة عن قواعد بيانات MySQL هذا النوع من قواعد البيانات له ما يميزه قواعد بيانات SQL Server
لأنها تعمل على نظام ويندوز وأنظمة *nix يتم التعامل مع هذا النوع من قواعد البيانات غالبا عن طريق سكربتات وبرامج توضع على نفس السيرفر ومثال على ذلك نذكر جميع المنتديات الموجودة على الانترنت بما فيها هذا المنتدى.
بداية وللاسف الشديد انك لو صاحب موقع لن تستطيع تطبيق هذا الدرس عن طريق موقعك ..لماذا ؟
لأن صاحب السيرفر سيكون قد منع الاتصال الخارجي بسيرفر قواعد البيانات لأسباب أمنية ومن دخل في مجالات الهاكينج ربما يكون يعرف لماذا تحديدا وهذا ليس موضوعنا
يمنع اصحاب السيرفرات الاتصال الخارجي ويقتصر التعامل مع قواعد البيانات عن طريق برامج الويب التي يتم تثبيتها على السيرفر نفسه
لذلك سوف نبحث عن سيرفر يدعم الاتصال الخارجي بقواعد البيانات
وهذا الموضوع منذ فترة استغرق مني بعض الوقت لكي أجد سيرفر مجاني يفعل ذلك
وأخيرا توصلت لبعض السيرفرات التي تعطيك مساحة مجانية لمدة سنة كاملة وهي تدعم الاتصال الخارجي بقواعد بيانات MySQL طبعا هي سيرفرات اجنبية ولديها حماية عالية جدا
وهذا هو أفضلها من وجهة نظري freehostia.com قم بالتسجيل فيه وبعد ذلك قم بعمل قاعدة بيانات وسوف يصلك على بريدك اسم قاعدة البيانات وعنوان سيرفر الـ MySQL والباسورد ...الخ
==================
ندخل في تفاصيل الموضوع..
أولا يجب ان تقوم بتثبيت الدرايفر الخاص بقواعد بيانات MySQL وستجده في موقعها الرسمي http://dev.mysql.com
قم بتحميله وتثبيته على جهازك
بالطبع يعرف الجميع ان تقنية ADO تحتاج للـConnection String الخاص بنوع قاعدة البيانات التي سيتم التعامل معها
ولفتح قاعدة بيانات MySQL سوف نضع الكود التالي في حدث تحميل الفورم
Cn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=MySql.Hostnam.com;DATABASE=DataBase_Name;UID=User_Name;PWD=PassWord;OPTION=16427"حيث أن :
MySql.Hostname.com == اسم سيرفر قاعدة البيانات ( يجب ان تفرق بين اسم السيرفر وبين سيرفر قواعد البيانات)
DataBase_Name == اسم قاعدة البيانات
User_Name == هو اسم المستخدم على هذا السيرفر
PassWord == كلمة المرور
بذلك نكون قد فتحنا قاعدة البيانات وسيتم التعامل معها الان وفقا للطرق البرمجية العادية جدا
السؤال الذي طرحه أعضاء المنتدى وهو كيف يمكن استقبال او ارسال بيانات من خلال الانترنت ؟
في الحقيقة يظن الكثير من الناس انه شئ صعب ولكنه أسهل مما نتخيل
اولا نصيحة مني لا تجعل برنامجك يعمل على قاعدة البيانات الموجودة على الانترنت فقط ... لماذا ؟
لأسباب كثيرة أهمها ان البرنامج سيكون بطئ جدا جدا تخيل انه لو حتى وضعت كود مثل Rs.MoveNext فان المستخدم عليه الانتظار قليلا لكي ينتقل المؤشر للسجل التالي وطبعا لن تجد أحد لديه طاقة لتحمل هذا
فكرتي هنا في هذا المثال تعتمد على قاعدتين بيانات
الاولى : من نوع أكسس (او غيرها) بشرط انها تكون مثبتة على جهاز المستخدم
الثانية : قاعدة بيانات MySQL وهي الموجودة على الانترنت
القاعدة الاولى هي الاساس فهذه القاعدة سيتعامل معها المستخدم في كل شئ
اما الثانية فسيتم التعامل معها فقط في حالة ارسال او استقبال بيانات خلال الانترنت
ندخل الى الكلام عن طريق الكود...
اولا يجب ان تكون قد صرحت عن RS, RS2
RS2 يتعامل مع قاعدة البيانات الموجودة على جهاز المستخدم بينما RS يتعامل مع MySQL
نفترض اننا وضعنا زر اسمه تحديث البيانات .. تحت هذا الزر سيتم السيناريو الاتي :
1- نفتح الجدول المراد تحديثه في قاعدة بيانات اكسس
RS.Open "select * from Access_Table", DB, adOpenDynamic, adLockOptimistic
وهنا توجد حالتين :
الاولى : انك ستقوم بتحديث الجدول لأول مرة وهذا امر سهل
الثانية : انه يوجد لديك بيانات مسبقا وستقوم بتحديث البيانات الجديدة فقط
في الحقيقة ان الحالة الثانية تشمل الأولى والحالة الأولى تشمل الثانية ... كيف ؟
يجب مراعاة وضع حقل لترقيم السجلات لأنه سيكون عامل اساسي في عملية التحديث
بعد فتح جدول الاكسس يتم ايضا فتح جدول قاعدة البيانات الموجود على الانترنت بنفس الطريقة
RS2.Open "select * from MySQL_Table", DB, adOpenDynamic, adLockOptimistic
نأتي لأهم جزء في عملية التحديث..
الفكرة في ان RS و RS2 سوف يتحرك كل منهما مع الاخر ومع كل خطوة سيقوم RS2 (الخاص بقاعدة بيانات اكسس) باضافة سجل جديد
وفي نفس الوقت يقوم RS بقراءة سجل من الموجود لديه ثم يتم تخزين القيمة الموجودة في RS2 في السجل الجديد الذي تم اضافته بواسطة RS2 وهذا ما يعرف بعملية الـ Update
وسيكون الكود كما يأتي..
هذا الكود لمعرفة السجلات الموجودة لدى المستخدم في قاعدة بياناته
وذلك حتى يتم اضافة السجلات الجديدة فقط
Do While Not RS.EOF
RS.MoveNext
If RS.EOF Then Exit Sub
If RS("code") = MIR Then GoTo CO
Loop
CO:ويمكن استخدام الكود السابق بكود بحث وسيكون ذلك أسرع بالطبع
وهنا تتم عملية نقل البيانات الى قاعدة بيانات المستخدم
Do While Not RS.EOF
RS2.AddNew
RS2("code") = RS("code")
RS2("adrs") = RS("adrs")
RS2("dat") = RS("dat")
RS2("note") = RS("note")
RS2.Update
Loop
RS.MoveNextوبعد الانتهاء من عملية التحديث يتم ربط السجل الاخير بالحقول لكي يشعر المستخدم بالتحديثات
RS2.MoveLast
Label1.Caption = RS2("code")
Text2 = RS2("adrs")
Text6 = RS2("dat")
Text4 = RS2("note")وطبعا يجب ظهور رسالة تفيد بان عملية التحديث قد تمت بنجاح
-------------------------------
ملاحظات :
- طبعا نفس الفكرة ونفس الأكواد يمكن استخدامها في تخزين البيانات في قاعدة بيانات موجودة على النت مباشرة ولا يوجد اي اختلاف في ذلك
- كنت أريد وضع مثال ولكنني تأخرت عليكم في وضع الموضوع بسبب ظروفي الخاصة ولذلك فضلت وضعه أولا واذا أردتم مثال فسأجهز مثال لكم قريبا ان شاء الله
- الأكواد الموضوعة في الموضوع تعتبر بطيئة لذلك أنصح بالبحث عن أكواد تكون أسرع في التنفيذ لأن ذلك سيقلل من وقت ارسال واستقبال البيانات
أعرف انني قد أطلت في الموضوع أكثر من اللازم ولكن هذا بسبب حرصي على وصول الفكرة لكل الناس بما فيهم المبتدئين
---------------
أرجو ان اعرف رأيكم وأيضا ارجو ان اي احد لديه سؤال لا يتردد في طرحه حتى نستفيد جميعا بشكل أكبر
وأتمنى اكون أفدتكم بشئ ولو بسيط
===========
الى اللقاء