برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس
العالم العربي :: الكمبيوتر والجوالات وتطويرالمواقع والمنتديات :: الكمبيوتر والأنترنت :: التطوير ولغات البرمجة
صفحة 1 من اصل 1 • شاطر
برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس
برمجة قواعد البيانات باستخدام Ado و لغة C++ برمجة ADO بواسطة السي بلس بلس
السلام عليكم....
لقد بحثت كثيرا عن برمجة قواعد البيانات بواسطة لغة السي بلس وقد اليت علي نفسي ان اكتب هذه المشاركة
التي قد ينتفع بها اخوتي محبي البرمجة بلغة السي.
مقدمة :
هنالك الكثير من تقنيات الوصول الي قواعد البيانات (بل جميع التقنيات) التي يمكن التعامل معها بواسطة لغة السي بلس ،
لكني اخترت تقنية 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 .
لقد بحثت كثيرا عن برمجة قواعد البيانات بواسطة لغة السي بلس وقد اليت علي نفسي ان اكتب هذه المشاركة
التي قد ينتفع بها اخوتي محبي البرمجة بلغة السي.
مقدمة :
هنالك الكثير من تقنيات الوصول الي قواعد البيانات (بل جميع التقنيات) التي يمكن التعامل معها بواسطة لغة السي بلس ،
لكني اخترت تقنية 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 .
منتديات تونس الابداع
مواضيع مماثلة
» بحث بعنوان قواعد البيانات
» دورة فن التعامل مع قواعد البيانات والوصول السريع عبر الإنترنت Access 2007
» برنامج Burn4Free 7.1 لنسخ السي دي باحترافية مجانا
» برنامج Burn4Free 7.4 لنسخ السي دي باحترافية مجانا
» دورة تحليل البيانات الماليه
» دورة فن التعامل مع قواعد البيانات والوصول السريع عبر الإنترنت Access 2007
» برنامج Burn4Free 7.1 لنسخ السي دي باحترافية مجانا
» برنامج Burn4Free 7.4 لنسخ السي دي باحترافية مجانا
» دورة تحليل البيانات الماليه
العالم العربي :: الكمبيوتر والجوالات وتطويرالمواقع والمنتديات :: الكمبيوتر والأنترنت :: التطوير ولغات البرمجة
صفحة 1 من اصل 1
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى