Open Database Connectivity (ODBC)


طارق جبر في 28/3/2004
tjabr@scs-net.org

يكاد لا يخلو تطبيق من قاعدة معطيات، ماذا تقدم لنا تقنية ODBC في هذا الإطار. هذا ما سوف نتكلم عنه في هذا المقال.
عندما نقوم ببناء التطبيقات، نصطدم كمطورين بمنصات العمل المختلفة، من لغات برمجة إلى أنظمة التشغيل وصولاً إلى قواعد المعطيات. فعلى المطور أن يقوم بإنتاج نسخ مختلفة من نفس البرنامج، واحدة من أجل النظام win98 وأخرى من أجل Win NT وواحدة من أجل Mac. واحدة من أجل التعامل مع قاعدة معطيات من نوع Access وأخرى من أجل Oracle وهكذا.
حاولت الشركات مؤخراً أن تأخذ على عاتقها مهمة التعامل مع منصات العمل هذه على اختلافها وتوفر للمطور فرصة التركيز على الوظائف الحقيقية التي يرغب في توفيرها من خلال برنامجه. وغالباً هذه الحلول تكون ببناء طبقات وسيطة تعزل البرنامج عن منصات العمل. وسنشرح هذا المفهوم وكيف حققته ODBC كتقنية.

ما هي التقنية ODBC؟

أولى الشركات التي دعمت هذه التقنيات كانت Microsoft، وهي عبارة عن طبقة تعزل البرامج عن قواعد المعطيات بحيث يتعامل البرنامج مع جميع أنواع قواعد المعطيات من خلال هذه الطبقة. كما في الشكل التالي:


نلاحظ من الشكل أنه لو اختلف برنامج قيادة قاعدة المعطيات وكذلك قاعدة المعطيات فلن يتغير شيء بالنسبة للتطبيق Application. إن البنية المبينة بالشكل هي فعلاً بنية التقنية ODBC حيث تحدد هذه التقنية كيفية اتصال البرنامج مع ODBC من جهة، وكيفية ترابط برنامج القيادة Driver مع ODBC من جهة أخرى. وبعد ذلك يقع على عاتق الشركة صاحبة قاعدة المعطيات بناء برنامج القيادة الذي يتناسب مع قاعدة معطياتها. تقدم Microsoft الطبقة ODBC API وكذلك كل الأدوات المساعدة من مثبت installer وكذلك واجهة صغيرة من أجل إدارة برامج القيادة.


من أين يمكن الحصول على برنامج التثبيت؟

من موقع Microsoft وهو
http://www.microsoft.com/downloads/details.aspx

يمكن من الموقع تحميل ما يسمى MDAC(Microsoft Data Access Component) وهي عبارة عن حزمة برمجية تحتوي جميع الأدوات التي تقدمها Microsoft من أجل الاتصال بقواعد المعطيات.

كيف يمكن إدارة ODBC؟

من "لوحة التحكم => أدوات الإدارة => Data Sources(ODBC)" يمكن تشغيل برنامج الإدارة. ويمكن من خلال برنامج الإدارة أن نعرف مصادر المعطيات على مستوى المستخدم الحالي، أو على مستوى النظام بحيث يمكن لجميع المستخدمين استخدامه.
كل مصدر معطيات يستخدم برنامج قيادة خاص بنوع هذا المصدر، على سبيل المثال من أجل Oracle نستخدم Oracle ODBC Driver. ومن أجل Access نستخدم Microsoft Access Driver وهكذا كما في الشكل التالي.


ويمكن الحصول على برامج القيادة هذه من المواقع الخاصة بها. مثلاً لن نجد بشكل افتراضي برنامج قيادة من أجل MySql ولكن يمكن تحميله من الموقع التالي:

http://www.mysql.com/downloads/api-myodbc.html

مثال:
باستخدام PHP يمكن أن نكتب الرمز التالي:


نستطيع من خلال هذا المثال أن نصل إلى مصدر معطيات محدد باستخدام اسمه وتوابع PHP خاصة بالتعامل مع ODBC سوف نلاحظ لو حاولنا تغيير قاعدة المعطيات من Access إلى MySql مثلاً لن نضطر إلى تغيير أي شيء في رماز الصفحة يكفي فقط أن نحافظ على اسم مصدر المعطيات مع تغيير برنامج القيادة الخاص بالمصدر من MS Access odbc driver إلى MySql odbc driver.


<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF">
<table width="75%" border="1" cellspacing="1" cellpadding="1" bgcolor="#FFFFFF">
<tr bgcolor="#CCFFFF">
<td height="22"><b>First Name</b></td>
<td height="22"><b>Last Name</b></td>
<td height="22"><b>Telephone</b></td>
</tr>

<?php
//connect to the database
$connectionstring = odbc_connect("phonebook", "", "");

//SQL query
$Query = "SELECT lname, fname, phone FROM phonebook";

//execute query
$queryexe = odbc_do($connectionstring, $Query);

//query database
while(odbc_fetch_row($queryexe))
{
$lname = odbc_result($queryexe, 1);
$fname = odbc_result($queryexe, 2);
$phone = odbc_result($queryexe, 3);

//format results
print ("<tr>");
print ("<td>$fname</td>");
print ("<td>$lname</td>");
print ("<td>$phone</td>");
print ("</tr>");
}

//disconnect from database
odbc_close($connectionstring);

?>
</table>
</body>
</html>

في النهاية يجب القول أن هناك طرق أخرى من أجل عزل التطبيق عن قاعدة المعطيات وليست ODBC هي الوحيدة ولكنها من أقدم هذه الطرق وتحظى بدعم من قبل معظم أنظمة قواعد المعطيات.