العالم العربي
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس

استعرض الموضوع التالي استعرض الموضوع السابق اذهب الى الأسفل

برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس Empty برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس

مُساهمة من طرف Ch.Marwen الجمعة 13 يوليو 2012, 20:20

bsmlah


برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس



78




السلام عليكم....

لقد بحثت كثيرا عن برمجة قواعد البيانات بواسطة لغة السي بلس وقد اليت علي نفسي ان اكتب هذه المشاركة

التي قد ينتفع بها اخوتي محبي البرمجة بلغة السي.

مقدمة :

هنالك الكثير من تقنيات الوصول الي قواعد البيانات (بل جميع التقنيات) التي يمكن التعامل معها بواسطة لغة السي بلس ،

لكني اخترت تقنية ADO لاتناولها في هذا الموضوع وذلك لسهولة تعلمها وكفائتها بالاضافة الي شهرتها العالية.

ماهي ado؟

Ado اختصار لـ(activex data objects) هي عبارة عن مكون يربط بين قاعد البينات والبرامج ،وهي عبارة عن مجموعة من الكائنات تتيح الاتصال

بقاعدة البيانات واجراء عدة مهام عليها مثل قراء البيانات والكتابة (طبعا يتم ذلك باستخدام لغة Sql او الاجراءات المخزنة). لقد تم بناء ADO علي

تقنية OLE DB وبذلك اصبحت ado عبارة عن الطبقة الاعلي في برمجة OLE DB وقد جعلت ado البرمجة اسهل بكثير من استخدام

OLE DB وحدها. تتيح ado واجهتين للبرمجة احداها للغات النصية مثل VBScript, java script والاخري للغات مثل VB, java, C++ لكن سوف

نستخدم الواجهة التي تتعامل مع لغة C++ فقط.

برمجة قواعد بيانات باستخدام السي بلس وado :

هنالك الكثيرمن مكتبات ado الموجودة علي الانترنت و التي يمكنك استخدامها لكني لن استخدم احداها هنا ،

Ado عبارة عن ملف dll يحتوي علي كائنات com لذلك سوف نقوم بادراج هذا الملف في ببرنامجنا باستخدام التوجيه #import مع المسار الكامل للملف وهو

plain text
"C:\program files\common files\system\ado\msado15.dll"


وايضا سوف نستخدم مكتبة OLE/COM وذلك بتضمينها في البرنامج

plain text
#include

#import "C:\program files\common files\system\ado\msado15.dll" \
no_namespace \
rename( "EOF", "adoEOF" )


لقد استخدمنا التوجيه #import مع المعلمة no_namespace حتي لا نطر الي ادراج مساحة الاسماء التي يتم انشائها تلقائيا.

ثم غيرنا معلمة نهاية الملف EOF الي اسم اخر حتي لا تتعارض مع مكتبات اخري تستخدم نفس الاسم .

الان يجب ان نقوم بتهيئة COM بواسطة الاجراء AfxOleInit (احدي اجراءات MFC)

plain text
AfxOleInit();



انشاء اتصال بقاعدة البيانات:

لانشاء اتصال بقاعدة البيانات نحتاج اولا الي عبارة الاتصال وهي العبارة التي يتم استخدامها بواسطة OLE DB Driver لانشاء

اتصال بقاعدة البيانات . وعبارة الاتصال تعتمد علي نوع قاعدة البيانات التي يراد استخدامها. في حالتنا هذه سوف

نستخدم اكسس وسوف تكون عبارة الاتصال هي:
plain text
"Provider = Microsoft.Jet.OLEDB.3.51;Data Source = c:\\der\\mydb.mdb;"


الان ننشئي كائن الاتصال ونستخدم عبارة الاتصال مع كائن الاتصال.


plain text
_ConnectionPtr m_pConnection;
HRESULT hr;
hr = m_pConnection.CreateInstance( __uuidof( Connection ) );
if (SUCCEEDED(hr))
{
hr = m_pConnection->Open(
_bstr_t(L"Provider=Microsoft.Jet.OLEDB.3.51;
Data Source=c:\\der\\mydb.mdb;"),
_bstr_t(L""),
_bstr_t(L""),
adModeUnknown);
}



القراة والكتابة الي قاعدة البيانات:

لقراءة البيانات تحتاج الي استعلام sql لتحديد اي البيانات التي تريد ان تجري عليها عملية، وذلك عن طريقة كائن الاتصال مباشرة ،

او استخدام كائن الاوامر مع استعلام SQL او اجراء مخزن او استخدام مجموعة البيانات.

(1)استخدام كائن الاتصال لتنفيذ احدي الاستعلامات:


plain text
_bstr_t bstrQuery("SELECT * FROM Customers");
_variant_t vRecsAffected(0L);

_RecordsetPtr pRecordSet;

pRecordSet = pDoc->m_pConnection->Execute(bstrQuery, &vRecsAffected, adOptionUnspecified);


(2)استخدام كائن الاوامر لتنفيذ احدي الاستعلامات:

plain text
_CommandPtr pCommand;
_RecordsetPtr pRS;
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;

pCommand.CreateInstance(__uuidof( Command ));
pCommand->ActiveConnection = m_pConnection;
pCommand->CommandType = adCmdStoredProc;
pCommand->CommandText = _bstr_t("CustomerWithMostRecentOrder");
pRS = pCommand->Execute( &vNull, &vNull, adCmdUnknown );


(3)استخدام مجموعة البيانات لتنفيذ احدي الاستعلامات:

plain text
_RecordsetPtr pRecordSet;
_variant_t vNull;
vNull.vt = VT_ERROR;
vNull.scode = DISP_E_PARAMNOTFOUND;
_bstr_t bstrQuery("SELECT * FROM Customers");


pRecordSet.CreateInstance(_uuidof(Recordset));
pRecordSet->PutRefActiveConnection(m_pConnection);
pRecordSet->Open(_variant_t(bstrQuery), vNull,
adOpenForwardOnly, adLockOptimistic, adCmdText);


بعد اجراء الاستعلام يمكنك تعديل او حذف او اضافة البيانات وذلك باستخدام مجموعة البيانات كما في الامثلة التالية:

لحذف البيانات:
plain text
pRecordSet->Delete(adAffectCurrent);


لتحديث البيانات:

plain text
pRecordSet->PutCollect(L"ProductName", L"بيرقر");
pRecordSet->Update(vNull, vNull);



لاضاقة بيانات:

plain text
COleSafeArray vaFieldlist;
vaFieldlist.CreateOneDim(VT_VARIANT,3);
long lArrayIndex[1];
lArrayIndex[0] = 0;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t(“PartNumber")));
lArrayIndex[0] = 1;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("ProductName")));
lArrayIndex[0] = 2;
vaFieldlist.PutElement(lArrayIndex,&(_variant_t("Price")));

COleSafeArray vaValuelist;
vaValuelist.CreateOneDim(VT_VARIANT,3);
lArrayIndex[0] = 0;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("104")));
lArrayIndex[0] = 1;
vaValuelist.PutElement(lArrayIndex,&(_variant_t("بيرقر")));
lArrayIndex[0] = 2;
vaValuelist.PutElement(lArrayIndex,
&(_variant_t((float)30.95)));
pRecordSet->AddNew(vaFieldlist, vaValuelist);



كانت هذه لمحة سريعة عن كيفية استخدام ADO .




منتديات تونس الابداع
Ch.Marwen
Ch.Marwen
الادارة العليا
الادارة العليا

المتصفح : Google Chrome
الإقامة : Republic of Tunisia
الجنس : ذكر
عدد المساهمات : 25405
نقاط : 103330942
تقييم : 7859
تاريخ الميلاد : 14/01/1990
تاريخ التسجيل : 11/02/2012
العمر : 34

http://www.arabwoorld.com
-----

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع التالي استعرض الموضوع السابق الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى

  • ©phpBB | انشاء منتدى | منتدى مجاني للدعم و المساعدة | التبليغ عن محتوى مخالف | آخر المواضيع