ODBC Functions

مرحبا بكم جميعا

لغة رينج هي اللغة التي قام بابتكارها مبرمج عربي ووصلت الي الترتيب ال 45 بين لغات البرمجة الاخري، وقمنا بعمل مقالات في شرح اللغة و تحدثنا عن أساسيات لغة البرمجة رينج وسوف ننطلق الي شرح قواعد البيانات في اللغة حيث لغة البرمجة Ring تدخل في برمجة قواعد البيانات ولا يخفي علينا اهمية قواعد البيانات ونظرا لان اللغة وصلت لدرجة عالية من المميزات فلا شك أنها تدخل في برمجة قواعد البيانات وبرمجة الالعاب وبرمجة تطبيقات الويب…الخ.

فلا يمكن الاستغناء عن قواعد البيانات حيث تدخل في المشاريع الكبيرة لتطبيقات الويب التي تحتفظ بالبيانات وتديرها بطريقة مستمرة مثل تطبيق ال Facebook,Twitter,LinkedIn,Youtube، وكذلك المشاريع الخاصة بحياتنا اليومية مثل مشروع ادارة مدرسة يدير جدول المدرسين والطلبة وحضورهم وعددهم،ومشروع الصيدلية لادارة الادوية، ومشروع الطائرات والتحكم في ساعات الهبوط والنزول،ومشروع ادارة المبيعات والتحكم في البضائع وحركات البيع والشراء،ومشروع البنك لحفظ بيانات الشخص ومستحقاته، ….الخ.

ونتحدث في مقالتنا اليوم عن مكتبة خاصة بقواعد البيانات في لغة البرمجة Ring وهي مكتبة دوال ال  ODBC ،وهي المسؤولة عن فتح ومعالجة قواعد البيانات المختلفة.

وفيما يلي دوال ال ODBCفي لغة Ring:

odbc_init() —> ODBC Handle

 لتهيئة الاتصال بقاعدة البيانات

odbc_drivers(ODBC Handle) —> Drivers

للحصول على ال drivers

odbc_datasources(ODBC Handle) —> Data sources

للحصول على ال drivers من  ال datasource

(odbc_close(ODBC Handle

لااغلاق ال resources بعد استدعاء الدوال

(odbc_connect(ODBC Handle, cConnectionString

لعمل اتصال بقاعدة البيانات

(odbc_disconnect(ODBC Handle

لقطع الاتصال بقاعدة البيانات

(odbc_execute(ODBC Handle, cSQLStatement

لتنفيذ جمل ال SQL على قاعدة البيانات

odbc_colcount(ODBCHandle)—>ColumnsCount

للحصول على عدد الاعمدة في ال query او جدول الاستعلام.

(odbc_fetch(ODBC Handle

للتطبيق على الصفوف في ال query

(odbc_getdata(ODBCHandle,nColumnNumber

للحصول على ال data في الاعمدة

(odbc_tables(ODBC Handle

للحصول على الجداول في قاعدة البيانات

(odbc_columns(ODBC Handle, cTableName

للحصول على أعمدة داخل جدول أو DB

(odbc_autocommit(ODBC Handle, lStatus 

لفتح أو اغلاق خاصية ال autocommit

(odbc_commit(ODBC Handle

لعمل Commit لل Updates في DB

(odbc_rollback(ODBC Handle

لعمل restore  لل Updatedفي DB

ملحوظة:

ال Transaction عبارة عن مجموعة من ال actions لمعالجة ونقل قواعد البيانات من مكان لأخر بنجاح وأثناء ذلك قد يحدث فشل أثناء النقل.

حالات ال Transactions:

  • Active: المرحلة الاولي أثناء التنفيذ.
  • Partially Committed: يكون بعد اخر جملة SQL تم تنفيذها.
  • Committed: عند نجاح التنفيذ.
  • Failed: عند عدم نجاح التنفيذ.
  • Aborted/rolledback: في هذه المرحلة تستعيد قاعدة البيانات حالتها مرة أخري بدلا من بدء ال transaction من جديد.

أي أن ال Commition هي المرحلة النهائية بعد وصول قاعدة البيانات بنجاح وبالتالي عند عمل Commit يعني تسجيل الناتج بعد أخر Commit أي تعمل عمل ال “Save“، وعند عمل rollback يعني استعادة الحالة من جديد بعد اخر Commit أي يتم تنفيذ وتسجيل الناتج لخطوات التنفيذ بعد ال rollback

  • في حالة أن Autocommit =0  يتم تجاهل  المراحل التي لم يتم تسجيل ال Commit فيها وتنفيذ مراحل ال Rollback.
  • وفي حالة أن Autocommit =1 يتم تنفيذ جميع المراحل قبل وبعد ال Commit لان خاصية ال commit مفعلة تلقائيا وان لم يتم تسجيلها وكذلك يتم فيها تنفيذ مراحل ال Rollback.

    وقبل استخدام أي دالة ينبغي تعريف مكتبة ال ODBC كالتالي:

    "Load "odbclib.ring
     Use ODBC functions#

مثال توضيحي على استدعاء دوال مكتبة ال ODBC ثم طباعة ال Drivers:

4.jpgالكود

ويمكن رؤيتها في الويندوز عن طريق اتباع الخطوات التالية:

Control panal-Administrative Tools-ODBC data sources

5.jpg

كيفية الاتصال بقاعدة البيانات:

1-أولا يجب عليك عمل قاعدة بيانات وأبسط قاعدة بيانات تكون ب Microsoft Access

ويوجد شروحات كثيرة علي ال Web لشرح الجداول علي  Microsoft Access وقواعد البيانات وال SQL.

2-بعد عمل الجدول نضعه مع ملف ال Source.

3-نقوم باستدعاء مكتبة ال ODBC وهي “odbclib.ring”.

4-نقوم بتهيئة الاتصال بقاعدة البيانات عن طريق الدالة ()odbc_init.

5-ثم نقوم بالاتصال بقاعدة البيانات التي أنشأناها بال microsoft access عن طريق الدالة ()odbc_connect ونقوم بتعريف اسم قاعدة البيانات وال driver المسؤل عن فتحة.

6-ثم بعد ذلك يمكن لنا ادارة قاعدة البيانات بأوامر ال SQL المختلفة من اضافة وتعديل وحذف و…الخ. وذلك عن طريق الدالة ()odbc_execute ونستطيع كذلك بعد ذلك استخدام باقي دوال ال ODBC التي ذكرناها في الجدول حسب ما يريد المستخدم.

7-في النهاية نقوم بغلق الاتصال بقاعدة البيانات عن طريق الدالة ()odbc_disconnect.

مثال توضيحي:

connection#
"load "odbclib.ring
()oOdbc=odbc_init
("{(see odbc_connect(oOdbc,"DBQ=data.mdb;Driver={Microsoft Access Driver (*.mdb  
(odbc_disconnect(oOdbc
(odbc_close(oOdbc

الكود

في المثال التالي يوجد جدول باسم data.mdb.

6.jpg

مثال توضيحي علي كيفية الحصول على البيانات داخل الاعمدة:

صورة توضيحية للداتا بيز أو الجدول داخل برنامج Microsoft Access:

1.jpg

2.jpg الكود

مثال 2:

fetch query and get the tables#
 at this moment I have 2 tables,customer and clients in the data DB#
"load "odbclib.ring
()oOdbc=odbc_init
("{(odbc_connect(oOdbc,"DBQ=data.mdb;Driver={Microsoft Access Driver (*.mdb
see odbc_tables(oOdbc) + nl
(while odbc_fetch(oOdbc
see odbc_getdata(oODBC,3)+nl  
end
(odbc_disconnect(oOdbc
(odbc_close(oOdbc

الكود

مثال3:

fetch query and get the columns of table#
"load "odbclib.ring
()oOdbc=odbc_init
("{(odbc_connect(oOdbc,"DBQ=data.mdb;Driver={Microsoft Access Driver (*.mdb
odbc_columns(oOdbc,"clients")+nl
(while odbc_fetch(oOdbc
get the data in the fourth columns from clients table#
see odbc_getdata(oODBC,4)+nl   
end
(odbc_disconnect(oOdbc
(odbc_close(oOdbc

الكود

مثال توضيحي على ال Commition and rolledback:

في هذا المثال سوف نتعامل مع جدول ال Clients وهو  فارغ كما في الشكل التالي:

2.jpg

وجمل ال SQL في البرنامج كما هو موضح بالشكل:

4.jpg الكود

وهنا الناتج في ال  DBبعد عمل Run للبرنامج:

Capture.PNG

Save and Restore images

كما يمكن تخزين الصور داخل قاعدة البيانات ولكن يشغل حيز كبير في ال DB

ويتم ذلك عن طريق تحويل الصور الي ال Hexadecimal

  • يتم تخزين الصورة في قاعدة البيانات عن طريق الامر Read
  • ويتم نسخ نفس الصورة بالقيمة ال Hexadecimal المخزنة في قاعدة البيانات ثم تحويلها مرة أخري الي String عن طريق الامر Write

 

9.jpg

الكود

وهذا ما تم تخزينة في قاعدة البيانات:

11.PNG

 

ثم بعد ذلك يمكننا استرجاع الصورة من DB عن طريق التحويل مرة أخري ل String

restore image#
odbc_execute(pODBC,"select value from tel where id = 2 ") + nl
(odbc_fetch(pODBC
( ( (write("great.jpg",hex2str( odbc_getdata(pODBC,1

55.jpg

الكود

ملحوظة:

  • ينبغي تخزين اسم  الصورة في عمود باسم name وقيمة ال hexadecimal في عمود باسم value
  • ينبغي اختيار نوع العمود الذي يتم فيه تخزين الصورة من النوع long text نظرا لكبر حجم الصور.

ومن هنا صور توضيحية لذلك

وهنا قد انتهينا من مقالة اليوم والي لقاء اخر.

للاطلاع علي المقالات الاخري من هنا

تستطيع الاطلاع علي المشاريع مفتوحة المصدر من الموقع  GitHub
الموقع الرسمي للغة  http://ring-lang.net

 

Advertisements

3 أفكار على ”ODBC Functions

  1. تعقيب: MySQL Functions | لغة البرمجة رينج Ring programming language

  2. تعقيب: SQLite Functions | لغة البرمجة رينج Ring programming language

اترك رد

إملأ الحقول أدناه بالمعلومات المناسبة أو إضغط على إحدى الأيقونات لتسجيل الدخول:

شعار وردبرس.كوم

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   /  تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   /  تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   /  تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   /  تغيير )

Connecting to %s