ابزار های ارتباط با data base

مقدمه :
برنامه هائئ كه درزمينه DATA BASE كار مي كنند به دو قسمت تقسيم مي شوند. يك قسمت لايه بيروني يا USER INTERFACE (برنامه اي است كه معمولا با برنامه هاي VISUALاي نوشته مي شود.) قسمت ديگر خود DATABASE است كه بوسيله يكي از زبانهاي بانكهاي اطلاعاتي (كه برپايه بانكهاي اطلاعاتي رابطه اي (RDBMS)

نوشته مي شود. قسمت اول ياAPPLICATION به وسيله زبانVISUAL BASIC ساخته مي شود كه وظيفه نما يش گرافيكي, زيبايي, كنترل كاربر و ارتباط با DATA BASE را بعهده مي گيرد.
اگر چه فناوري ODBC داراي اهداف بزرگ مشابهي است ليكن اجراي آن ساده نيست .بخاطر اينكه ODBCAPI براي برنامه نويسان متوسط كمي مشكل است و طوري ساخته شده است كه حتي براي برنامه نويسان پيشرفته نيز ابزار پرزحمتي به حساب مي آيد . بر مبناي ODBC ، ADO به بوجود آمد كه دسترسي به داده هاي زيادي را ايجاد خواهد نمود.RDO براي دسترسي به پايگاه داده از واسط ODBC استفاده مي كند ، و DAO از موتور JET داخلي خود . در حاليكه ADO بجاي آن از OLEDB (پايگاه داده OLE ) استفاده مي كند . OLEDB شيئ ايست كاملاً جديد براي اتصال به منابع داده .مي توان OLEDB را جانشين ODBC در اتصال به منابع داده دانست .طراحي داخلي OLEDB دسترسي به منابع داده غير SQL , را نيز(به همان سهولت دسترسي به داده هاي SQL ) ممكن ساخته است .

در گذشته براي دسترسي به پايگاه هاي داده راه دور بايد از API هايا درايورهاي ODBC استفاده مي كرديم .در اغلب موارد يافتن درايور ODBC مناسب براي منبع داده مورد نظر امكان پذير است ، اگر چه اين روش مشكلات خاص خود را دارد.در اين استاندارد ، درايور ODBC بايد از زبان SQL پشتيباني كند، و داده ها نيز بصورت جدول ( متشكل از سطر و ستون ) سازمان داده شده باشند . اما در برخي موارد چنين ساختاري براي ذخيره كردن داده ها مناسب نيست ، بخصوص داده هايي كه داراي ساختار سلسله مراتبي هستند ، مانند سرويس هاي دايركتوري و e-mail .
برنامه هايي مثل VISUAL BASIC , DELPHI , VC++ با رابطهايي چون COM, DCOM,ACTIVE X به DATA BASE وصل مي شوند.ADO‌يكي از ACTIVE X هايي است كه با DATABASE ارتباط

برقرار مي كند.
در اين برنامه با اسافاده از Objectهاي ارتباط با DataBase كه در بالا توضيح داده شد به بانك اطلاعاتي SQLServer متصل شده و با استفاده از قابليتهاي شيء ADO براي وارد كردن اطلاعات حسابداري ( اسناد حسابداري ، اطلاعات حسابداري ، اطلاعات ارز ، … ) و يا براي گرفتن اطلاعات حسابداري ( ترازهاي حساب ، گردش حساب ، نمايش اسناد ، …) با بانك اطلاعاتي ارتباط برقرار نموديم.
در كنار ابزار داخلي VB براي گرفتن گزارشات و نمودارهاي برنامه از برنامه CRYSTALL REPORT 9.0 ساخت شركت آمريكايي SEGATE كه داراي جلوه هاي زيبا و قدرت بالا براي نمايش اطلاعات برنامه است استفاده شده است

 

ابزارهاي ارتباط با DataBase

۱-DCOM,COM

يك برنامه كاربردي عموما داراي يك فايل باينري است كه نمي توان در ان تغييري ايجاد كرد مگر اينكه نوع جديد ان را با نوع قبلي جايگزين كرد. گونه) ويرژن( بعدي بايستي ايجاد ,خطا يابي و مجددا كامپايل شود.در اين حالت مدت زمان ساخت و توسعه برنامه هاي كاربردي افزايش پيد

ا مي كند. مي توانيم برنامه را به چندين جزء منطق به نام OOAD (OBJECT-ORIENTED تقسيم ( ANALYSIST AND DESIGN كنيم. براي مثال مي توانيم يك برنامه ساده ويرايشگر را به چندين قسمت منطقي تقسيم كنيم ( ناحيه متن، ميله ابزار،…)سپس مي توانيم درباره هرقسمت بصورت مستقل فكر و تصميم گيري كرده و ارتباط هر قسمت با ساير قسمتها را مشخص نماييم.هر قسمت(جزء) را ميتوانيم در برنامه اي كه به آن نياز دارد قرار داد. نرم افزارهايي كه با تركيبي از اجزاء ساخته شده اند COMPONENT WARE ناميده مي شوند.COM در سطر بانيري قرار دارد و بر اين نكته دلالت دارد كه ميتوانند درزبانهاي مختلف نوشته شوند وباهم در ارتباط باشند.
COM يك زبان برنامه نويسي است. توسط زبانهاي برنامه نويسي متفاوتي مانند C++ و Cو پاسكال و ساير زبانها مي توان COM ايجاد كرد. COM مستقل از زبان ,موقعيت و كامپايلر است. ميكروسافت با توسعه COM موجب شد كه برنامه هاي كاربردي انعطاف پذيري بيشتر وديناميك فراواني تري پيدا كنند. مانند اكثر محصولات ميكروسافت، ويژوال بيسيك هم از COM استفاده مي كنند . اگر چه جزئيات COMاز ديد برنامه نويس مخفي است.ولي ما درمورد COM وجزئيات مرتبط با آن مطالبي رابيان خواهيم كردچرا كه COM پايه اكتيواكس را تشكيل مي دهد.
برنامه هاي كاربردي با COM با يكسري ازاستانداردهاي واسط با ساير اجزاء درارتباط هستند.
انواع متفاوتي از واسطه هاي COM وجود دارند، تعدادي براي كنترلهاي اكتيواكس ،تعدادي براي انتقال داده، تعدادي براي ذخيره سازي اطلاعات و غيره . بيشتر واسطه هاي بنيادي COM ,IUNKNOWN هستند.

هر واسط COM ,IUNKNOWN بايستي شامل متعددهاي ADDREF, QUERYINTERFACE , وRELEASE باشد.
ازمتعددها ADDREF, RELEASE به منظور كنترل طول عمر جزء COM استفاده مي شود . متعدد QUERY INTERFACE روشي براي پرس و جو است. اگر يك جزء COM عملا از واسط COM پشتيباني كند. مثلا يك جزء ديگر COMنياز داشته باشد تا مشخص كند يك جزء ديگر COM آيا از واسط كشيدن ورها كردن حمايت مي كنديا نه .ميكروسافت با توسعه كارايي COM ، COM+ را اخيرا به بازار ارائه كرده است . كارايي COM+ علمي تراز COM است.
زمانيكه برنامه نويسان ويژوال بيسيك نتوانند بطور مستقيم با COM كار كنند ديگر نمي توانند ازمزاياي COM+بهره مند شوند.

COMتوزيع شده(DCOM) نوع توزيع شدة COM است. DCOMبه مفهوم اجراي،اجزايCOM برروي يك ماشين راه دوراست درحاليكه تمام جزئيات از ديد برنامه نويس پنهان است.
همچنين DCOMداراي ويژگيهايي است كه COMاز آنها برخوردار نيست(مانندامنيت).DCOMجزء اصلي وضروري ايجاد برنامه هايEnterprise-Level است.طريقة برقراري ارتباطات در DCOM همانند COM است چرا كهDCOM توسعه يافته COM است.

۱-۱چگونه ميتوانيم از COM استفاده كرد؟
تمام اين موارد مفيد مي اشد امادربارة اينكه چگونه يك شئ COM كارمي كندوچطورآنرا ايجاد و گسترش ميكنيد توضيح نمي دهد.
تقريباً هر محصول مايكروسافت كه امروز استفاده مي شوديك مدل شي دارد كه مي تواند واسط آن با هر محصول ديگري برپاية COM ارتباط داشته باشد . به خاطر داشته باشيد كه فكر كردن روي يك واسط به عنوان ويژگي هاي اشياء و عملكردي كه مي تواند داشته باشد تلقي مي گردد.
يك واسط عمومي واسطي است كه يك برنامه نويس كه از شيء COM استفاده ميكند آن را انتخابكرده تا به عنوان هر سرويسي كه شما آرزوي آن را داريد دردسترس شما قرار دهد (حتي اين مي تواند از طريقWINDOWS NT كنترل شود ) معمولاً يك تابع براي انجام آنچه اتفاق مي افتد
لازم ميباشدمثلاً درVBتابعي بنام CREATE OBJECT وجود دارد كه يك نمونه از كلاس مشخص شده را ايجاد ويك رجوع به شيءرا برمي گرداند وقتي كه برنامهُ سرويس گيرنده با استفاده ازتابع REATE OBJECT يك CLASS مي سازد (COM-SERVERNAME.CLASSNAME ) بااستفاده از يك اشاره گرمي تواند به تمام خواص متددهاي آن كلاس كه درسرويس دهندة COM است دسترسي پيدا كند .اين سرويس دهنده مي تواند يك تابع ساده DLL وياكل برنامه كاربردي مثل INTERNET EXPLORER,WORD,EXCELيا OUTLOOK باشد.
اينجا يك مثالي است كه ممكن است شما در يك برنامه كاربردي VB آنرا ببينيد اين تابع به منظور راه اندازي كردن يك برنامه روي چند كامپيوتر CLIENT-SERVER است.شما عملاً،عملكرد COMرا هنگاميكه داده ها از يك منبع داده با استفاده ازADO باز گردانده مي شوند را ديده ايد. مثال بعدنشان مي دهد كه چطور يك RECORDSET با محتواي جدولTBLUSERGROUP از پايگاه دادة SECURITY ايجاد مي شود.

AS NEW ADODB.RECORDSET DIM OBJRECORDSET

OBJRECORDSET.OPEN “TBLUSERGROUP”,DSN=”SECURITY;UID=SA;PWD;”
اين مثال بسيارساده است. نياز ديگري كه بايد وجود داشته باشد اين است كه ماشين سعي در ايجاد اشيايي كند كه بتواند يك رجوع را به كلاس و سرويس دهنده در رجيستري آن پيدا كند . اگر اين رجوع به يك DLL يا EXE كه روي همان ماشين قرار گرفته ، به عنوان يك فراخواني برنامه كاربردي ، اشاره كند، در اين صورت COM مي باشد ، اگر سرويس گيرنده روي ماشين خودش يك نماينده پيدا كند كه ان به ماشين ديگري اشاره داشته باشد در اين صورت يك COM توزيع شده يا DCOM خواهد بود . همانطور كه ممكن است حدس بزنيد آن چيزي اغلب در برنامه هاي كاربردي چند سطحي كه مي تواند روي سرويس دهندهاي شبكه قرارگيرد و توسط سرويس گيرنده ها به اشتراك گذاشته شود DCOM مي باشد.
فوايد استفاده از DCOM چندين فايده مختلف در استفاده از DCOM در مقابل COM وجود دارد.
نگهداري: در روش DCOM يك شئ بر روي سرويس دهنده قرار مي گيرد و هيچ سرويس گيرنده اي آن را به روز در نمي اورد. هر گونه تغيير و تحول در يك شئ كه روي سرويس دهنده قرار دارد باعث مي شود كه اين تغييرات بلا فاصله به تمامي سرويس گيرنده ها انتقال يابد.
۲-مدل تك برنامه اي: از ديد برنامه نويس تمام اشياء COM يكسان است و احتياج بكار اضافي براي توليد DCOM نيست. تنها مسئله سازماندهي ان مي باشد. شما نيز مي توانيد در صورتي كه از نظر هزينه مقرون به صرفه باشد اجزاء را به سرويس دهنده توزيع كنيد تا سرويس دهي آن نيز اسانتر شود.
تابعيت انعطا ف در گسترش: اغلب اينطور به نظرمي رسد كه اشياء COM, UI-CENTRIC روي پردازش هاي سرويس گيرنده اجراء مي شوند در حاليكه سرويس دهندهاي DATA- CENTRIC روي شبكه اجراء مي گردند حال اگر معماري سيستم تغيير كند به موجب آن DLLسمت سرويس گيرنده بايد سرويس دهنده توزيع شود و كارهاي خيلي كم بايد انجام گيرد اين مسئله تنها در سازماندهي مي باشد و نيازي به تغيير در كد برنامه نيست .

۴-سكوهاي CROSS : DCOM توسط سكوهاي زير پشتيباني مي شود WINDOWS 4.0+ APPLE ACINTO, SH WINDOWS 95, SUN SOLARIS, AIX, MVS,SCO UNIXWARE, LINUX .
ارتباط پردازشهاي CROSS در DCOM از ميان شبكه توسط STUB ها و نماينده ها انجام ميگيرد. هنگاميكه يك شئ COM روي يك سرويس گيرنده در خواست مي شود ان رجيستري ماشين را براي وجود سرويس دهنده و كلاسها از طريق PROGID چك مي كند. اگر سرويس دهنده به عنوان يك جزء COM سازماندهي شده باشد روتين COM بايد يك شئ PROXY را روي سرويس گيرنده پيدا كند.

يك تكنولوژي است كه به برنامه ها اجازه همكاري با يكديگر را مي دهد ( براي مثال ميتوانيم در درون برنامه WORD . از يك ليست EXEL استفاده كنيد ، بدون انكه برنامه EXEL را باز كرده باشيد انهم به صورت مستقيم ) . OLE تعدادي سرويس شامل عمليات كشيدن و رها كردن (DRAY-AND-DROP ) و اتوماسيون را ارائه مي كند .
۱-OPTION EXPLICIT
2-DIM MWORD . AS NEW WORD. APPLICATION
3-
4-PRIVATE SUB CMD WRITE- CLICK ( )
5-CMD WRITE. ENABLED= FALSE 6-CALL M WORD. DOCUMENTS.ADD
7-M WORD. SELECTION. SHADING. TEXTURE= WD TEX TURE22 PT5 PRECE
8-MWORD. SELECTION.FONT. SIZE=30
9-CALL MWORD . SELECTION. TYPETEXT (TXTINPUT.TEXT)
10-CALL MWORD .DOCUMENTS(1). SAVEAS(“D,\WORD.DOC”)
۱۱-CALL MWORD. QUIT
12-END SUB
در خط ۱ ما يك شئ به نامMWORD مي سازيم . در دكمه CMD WRITE در خط ۵ ما دكمه را خاموش مي كنيم در خط ۶ يك سند اضافه مي كنيم . در خط ۷ رنگ پس زمينه را تغييرمي دهيم با ثابت WD TEXTURE22 PT5 PRECENT . در خط۹ مقداري را از TEXTBOX به نام TEXTINPUT گرفته به داخل DOCUMENT مي ريزيم و در خط ۱۰ DOCUMENرا ذخيره مي كنيم.

 

۴-۱ ACTIVEX
كنترل هاي اكتيواكس اجراي قابل استفاده مجدداي هستند كه به برنامه هاي ويژوال بيسيك اضافه ميشوند. يك كنترل اكتيواكس تقريبا هر كاري كه برنامه نويس تصور كند ميتواند انجام دهد، تقويم، پردازش لغت، ويرايشگر تصوير، بازي كارت وغيره…
كنترلهاي اكتيواكس مي توانند از ديد كاربر مخفي باشند يا در ديد كاربر قرار بگيرند. براي مثال كنترل اكتيواكس بازي كارت به طور مشخص بايستي در ديد كاربر قرار داشته باشد. كنترلهاي اكتيواكس تكامل تدريجي كنترلهاي OLE هستند، برخي از كنترلها به مانند يك ميزبان براي يك كنترل

 

ديگر به كار مي روند.
كنترل اكتيواكس ريشه در كنترلهاي OLE و توسعه كنترلهاي ويژوال بيسيك دارند. كنترلهاي VBXقبل ازكنترلهاي اكتيواكس ايجاد شده اند. كنترلهاي OLEو VBX تكنولوژي سالهاي پيش هستند. هزاران كنترل VBX در طي سالهاي گذشته ايجاد شدهاند. تعدادي از اين كنترلهاي VBX مجددا توسط كنترلهاي اكتيواكس باز نويسي شده اند . ازكنترلهاي VBX نمي توان در ويژوال بيسيك ۵ يا ۶ استفاده كرد.
سه نوع متفاوت از كنترلهاي اكتيواكس را مي توان توسط ويژوال بيسيك ايجاد كرد. كنترلهاي ايجاد شده توسط كاربر كنترلهاي افزودني و كنترلهاي متراكم . ساخت و توسعه كنترلهاي ايجاد شده توسط كاربربسيارمشكل است. اين كنترلها انعطاف پذيري بيشتر درطراحي فراهم مي اورند OLEDB.
OLEDB يك دستور كار با ذكر خصوصياتي است كه تعريف مي كند چگونه دسترسي داده مايكروسافت كار مي كند به طور خاص مشخصات OLEDB در زير امده است:
۱-OLEDBبه عنوان يك رابط برنامه نويسي در سطح سيستم موجود مي باشد. اين خصوصيت مشابه ODBC ميباشد.
۲ – در حاليكه ODBC براي دسترسي به پايگاه داده اي رابطه اي ايجاد شده بود، OLEDB براي دسترسي به هرذخيره دادهاي طراحي گرديده است. براي مثال شما مي توانيد آنرا براي دسترسي به منابع رابطه اي يا غير رابطه اي كه شامل MAIN FRAME, ISAM/RSAM و پايگاه داده هاي سلسله مراتبي مي باشند بكار ببريد. همچنين مي توان به سيستمهاي ذخيره فايلي كه كمتر نستي هستند از قبيل سيستمهاي پست الكترونيكي و سيستمهاي فايل كه داده هاي متني و گرافيكي و غيره را ذخيره مي كنند دسترسي داشته باشد.
۳-OLEDB يك مجموعه اي از رابطهاي COM را تعريف ميكند كه سرويسهاي سيستم مديريت پايگاه دادهاي ختلف را كپسوله مي كند.
۵-۱ADO
ADO يك مجموعه اشياء COM مي باشد كه همانند مصرف كننده روي دادهO

LEDB عمل مي نمايد. ADO رابطهاي OLEDB سرويسهاي مديريت دسترسي به داده هاي ديگررا ديگر در سطح سيستم مديريت مي كند، در صورتيكه سطح كاربردي كه از رابطهايOLEDB زبدست آمده اند را نمايش مي دهد. ADO يك مدل برنامه نويسي پايگاه داده ميباشد كه به برنامه نويسان اجازه نوشتن برنامه هاي كاربردي روي داده هاي OLEDB به هر زباني ازقبيل JAVA SCRIPT VB, JAVA,VBSCRIPT, وC/C++ را مي دهد.هر شئ در يك هدف واحد و مجموعه خواص غير پيچيده متدها و رخدادها را دارا مي شود اگر چه اين اشياء پيچيده نمي باشند ولي بسيار قدرتمند هستند.ه ODBC نيست.

از زمان انتشار انها در سال ۱۹۹۷ مدل ADO تغييرات زيادي نكرده است، اما با هر نسخه جديد مايكروسافت هر يك از اشياء را به وسيله اضافه كردن متدها و خصوصيات جديد و به وسيله به وجود اوردن واسطه ها توانا تر وكارا تر نموده است.

شكل ۲-۱ مدل شئ ADO يك ساختار ساده و قدرتمند سلسله مراتب جهت دسترسي به داده مي باشد

اينك نظري به مدل شئ ADO و هدف از هر شئ مي پردازيم.همانطور كه در شكل ۲-۱مي بينيد، مدل شئ بسيار ساده مي باشد و فقط تعداد معدودي اشياء اصلي وجود دارند. اشياء در يك مجموعه شئ محض بصورت سلسله مراتبي پياده سازي گرديده اند. بالاترين شئ CONNECTION است كه شامل مجموعه ERRORS مي باشد كه هر يك شامل اشياءERROR مي گردند. همچنين CONNECTION شامل شئ COMMAND نيز مي گردد كه هر يك از آنها يك مجموعهP ARAMETER را كه شامل اشياء PA RAMETER مي باشد دارا هستند.

همچنين شئ CONNECTION شامل FIELD اشياء RECORDSET نيز مي گردد كه هريك از آنها يك مجموعه FIELDS در خود جاي مي دهند كه شامل اشياء مي باشند.
مدل شئ ADO همچنين يك مجموعه از خصوصيات را كه متعلق به اشياء CONNECTION COMMAND, RECORDESTوFIELD مي باشند شامل مي گردد، خصوصيات مجموعه ها و خواص اشياء در فصلهاي بعد شرح داده مي شوند.

ADO -2
1-2-شئ CONNECTION
شئ CONNECTION يك هدف اصلي دارد كه عبارت است از اينكه توانايي برقراري ارتباط با يك منبع داده رابراي شما فراهم مي سازد . يك شئ CONNECTION يك جلسه يكتا ( يك رابط OLEDB مشخص) را با يك منبع داده ارائه مي نمايد.توسط شئCONNECTION شما مي توانيد به منابع داده ساده از قبيل فايلها روي سرويس دهنده يا روي منابع بيشتري مانند سيستم RDBMS پيدا نماييد. شئ CONNECTION مجموعه اي عملكرد جزئي را به كمك تعداد كمي مجموعه ، خصوصيات و متدها پشتيباني مي كند. اكنون خواهيد ديدشئ CONNECTION براي شما بعنوان يك برنامه نويس شامل مزايايي به شرح زير مي باشد :
به شما اجازه مي ذهد كه يك اتصال به يك منبع داده با متد OPEN برقرار نماييد.
براي منابع داده SQL كه يك فراهم كننده OLEDB ندارد ارتباط ها مي توانند با استفاده از فراهم كننده OLEDB – ODBC براي برقرار شوند. براي منابع داده SQL و غير SQL كه يك فراهم كننده OLEDBخاص را دارا مي باشند نيز ارتباط ميتواند با استفاده از فراهم كننده آن منبع داده برقرار گردد.
به شما اجازه اجراي عبارت يا رويه ذخيره شده SQL را با متد EXECUTE مي دهد.
ـ به شما اجازه كار كردن روي تراكنشها را جهت بروز رساني داده از طريق استفاده ازمتدهاي تراكنش COMMIT, ROLLBACKTRANS, BEGINTRANS,TRANS ميدهد.
در كد مثال زير ، يك متد OPEN يك اتصال به پايگاه داده سرويس دهنده SQL از طريق يكODBC DSN را برقرار مي نمايد.
Sub ConnectionExample()
Dim objconn As ADODB.Connection
Set objconn = New ADOBDB.Connection

 

‘’open a connection
“,” ” objconn.Open ‘DSN=”ADOBook”,”sa
‘find out if the attempt to connect worked
If objconn.state = adstateopen Then
‘connection succceded
Else
‘ connection failed_handle appropriately
End If
‘close the connection and destroy it
objconn.Close
Set objconn = Nothing
End Sub
برقراري ارتباط
مراحل زير در هنگام ايجاد ارتباط شروع مي شوند.
۱-اتصال به يك منبع داده اي: به يك منبع داده اي با استفاده ازفراهم كنندة مناسب متصل شويد.
۲-اجراي اختياري يك فرمان: مي توان با استفاده از پارامترها و يا بدون استفاده از آنها فرماني را براي برگرداندن تعدادي سطر از جدول و يا به روزرساني آنها صادركنيد.
۳-بطور اختياري ايجاد يك مجموعه ركورد(مكان نما).
شئ CONNECTION به ما اجازه ميدهد كه يك اتصال فيزيكي را به منبع داده اي بوسيلة استفاده از واسطهايOLE DB ،جهت ايجاد جلسة OLE DB برقرار كنيد. وقتي ما از شئ اتصال استفاده مي كنيد، دائماً از يك فراهم كننده داده براي منبع داده اي كه ما سعي در دستيابي به آن داريم

استفاده مي كنيم. فراهم كنندة داده برنامه ها و واسطهاي كامپايل شده اي مي باشند كه چگونگي مديريت منبع داه را ميدا نند.وقتي كه ADO براي اولين بار ارائه شد تعداد بسيار كمي فراهم كننده وجود داشت،كه اولين آنها ICROSOFT OLE DB براي ODBC بود(MSDASQL) . اين فراهمكننده از واسطهاي OLE DB روي ODBC جهت دستيابي به منابع داده اي مورد قبول ODBC .
استفاده مي كرد.در حال حاضر بعضي از اين فراهم كننده ها عبارتند از:
‍Provider for ODBC Microsoft OLE DB
Provider for Microsoft jet Microsoft OLE DB

Provider for Microsoft Index Server Microsoft OLE DB
Provider for Oracle Microsoft OLE DB
Provider for Active Directory Server Microsoft OLE DB
Text Provider Microsoft OLE DB
2-2- ارتباطهايي بر پايه DSN
در مثال بعدي يك اتصالي كه از فراهم كنندة MSDASQL و يك DSN شرح داده مي شود . يك سيستم DSN در بخشODBC ايجاد مي شود و اطلاعات اصلي مربوط به برقراري ارتباط با بانك اطلاعات را تعريف و ذخيره مي كند .
Public Sub OpenWithDSN
Dim objcnn As New ADODB.Connection
Dim objrst As New ADOBDB.Connection

objcnn.ConnectionTimeout = 30
objcnn.CommandTimeout = 30
objcnn.Provider = “msdasql”
objcnn.Open “DSN=ADOBook” ‘add code to create a recordset from execute method’
Set objrst = objcnn.Execute(“select * from customers

“)

‘close the connection and destroy it
objcnn.Close
Set objcnn = Nothing

End Sub
3-2 تعريف متغيرهاي شئ
در مثال بعدي يك متغير شئ اتصال،objcnn تعريف و يك نمونه از آن ايجاد شده است.
Dim objcnn as ADODB.Connection
Set objcnn =NEW ADODB.Connection
در كد بالا كتابخانه CONNECTION در ADO بصورت Early Binding مورد استفاده قرارگرفته است. Early Binding ضرورتاً به اين معناست كه واسط يك جزء COM مي تواند در زمان طراحي رجوع شود.
مقداردهي خاصيتها قبل از باز شدن اتصال قبل از اينكه يك اتصال برقرار كنيم ،ما مي توانيم خصوصياتي را كه رفتار شئ CONNECTION را كنترل مكند مقداردهي كنيم كه اين خصوصيات شامل CommandTimeout, Connection Timeout فراهم كننده ميباشد.
ConnectionTimeout
مدت زماني را كه يك برنامه كاربردي منتظر مي ماند و سعي در برقراري اتصال به منبع داده از زماني كه متدد OPEN صادر شده است مي كند را معين مي كند. لازم نيست ما اين مشخصه را مقداردهي نماييم چون بصورت پيش فرض مقدار اوليه ۱۵ ميلي ثانيه به آن داده شده است.

CommandTimeout
زمان تعيين شده براي اجراي دستورات را با شئ اتصال متد Execute اداره كنيد. همچنين شئ ADO Command يك متد Execute و هم يك مشخصة CommandTimeout مخصوص خود دارد.
مقدار پيش فرض CommandTimeout ،۳۰ميلي ثانيه است.
Provider
ما ميتوانيم مقدار اين خاصيت را قبل از برقراري يك ارتباط مقداردهي نماييم.اگرما قصد استفاده از فراهم كننده MSDASQL را داريم مقدارهي اين مشخصه ارزش زيادي ندارد زيرا اين فراهم كننده ديگري استفاده نشده باشد استفاده ميشود همچنين فراهم كننده ميتواند در آرگومانهاي متدOPEN نيز مشخص شود.
استفاده از متد OPEN
ما متد OPEN جهت برقراري ارتباط استفاده ميشود.
Object.open [Connectionstring as string],[userID as string],[password as string],[options as long=-1]
مشخص كردن CONNECTION STRING
هريك از آرگومانهايي كه اين متد مي گيرند اختياري است. حتي آرگومان ConnnectionString نيز اختياري است ، چونكه ما مي توانيم مشخصه مذكور را قبل از متد open مقداردهي كنيم.
وقتي كه ما يك ارتباط را بر پايه يك فايل، كاربر يا سيستم DSN ، باز كنيم . مقدار رشته ارتباط همانطوريكه گفته شد بايد به اسم DSN اشاره كند. ساختار DSN براي منابع داده اي ODBC تفاوت مي كند.

مشخص كردن PASSWORD,USERID
در اغلب حالات اين آرگومانها احتياج نمي شوندچونكه DSN ممكن است آنها را تعريف كند.
مشخص كردن Option
ما مي توانيم آرگومانهاي OPTIONS را براي باز كردن اتصال اي كه از يك openoptionEnum استفاده مي كند ، بكار ببريم . بعنوان مثال اين به ما اجازة باز كردن يك اتصال را بصورت غيرهمزمان مي دهد.
۴-۲ اتصال بدون DSN
باز كردن يك اتصال بر پايه يك فايل براي كاربر يا سيستم DSN مي تواند براي بعضي برنامه هاي كاربردي نگهداري دشواري باشد .اگر ما يك برنامه كاربردي سرويس گيرنده مي نويسيم كه اتصالات را از ايستگاههاي كاري سرويس گيرنده باز مي كند، DSN اي كه به آن رجوع مي شود بايد در هر ايستگاه كاري سرويس گيرنده موجودباشدكه اين به معني سرباز براي نصب برنامه كاربردي است . حتي جايي كه اسكريپت يا شئ هاي تجاري در يك برنامه كاربردي تحت وب ارتباطات را بوجود آورند يك اتصال بر پايه DSN به اين معني است كهDSN بايد روي سرويس دهنده موجود باشد.
خوشبختانه ADO همانند اجداد خود DAO,RDO امكان ايجاد ارتباط بدون DSN براي يك منبع داده اي ODBC را فراهم مي كند .در يك ارتباط بدون DSN,ConnectionString كه ما تعريف مي كنيم تمامي اطلاعات لازم جهت ايجاد بجز اطلاعات registery يا فايل را دارا باشد.
Public sub openWithoutDSN()
Dim objcnn as ADODB.Connection
Dim strconnect as string

Set objcnn=NEW ADODB.Connection
‘set connection and command timeouts
objcnn.connectionTimeout=30
objcnn.commandTimeout=30
‘default connection string strconnect=”provider=MSDASQL;Driver={sqlserver};server=DALA;UID=sa;” & _
“DATABASE = ordermanager”

objcnn.open strconnect
End Sub
برقراري ارتباط بدون DSN براي دستيابي به منبع داده اي ODBC هيچگونه تاثير منفي اي ندارد حتي باعث پايين آمدن سرعت اجرا هم نمي شود.
۵-۲ برقراري ارتباط بوسيله JET Provider
از نقطه نظر كد نويسي ، ايجاد يك ارتباطي با استفاده از فراهم كنندة ديگري جز MSDASQL بسيار ساده وآسان است.اتصالي كه با يك پايگاه داده Microsoft JET باز ميشود OrderManager ناميده مي شود و مجموعه Fields از Recordset معين مي شود . برنامه هاي زير از فراهم كنندة Microsoft OLE DB براي Microsoft JET استفاده مي كند.
Public sub userjetprovider()

Dim objcnn As NEW ADODB.Connection
Dim objrst As NEW ADODB.Recordset

With objcnn
.CommandTimeout=15
.ConnectionTimeout=15 .Provider=”Microsoft.JET.OLEDB.3.51”
.Open “d:\book\code\Ordermanager.mdb”
End With

Objrst.Open “SELECT * FROM Customer”,objcnn

DO While Not objrst.EOF
Debug.Print objrst(i)
Objrst.movenext
Loop

Objrst.close
Set objrst=Nothing
Objcnn.close
Set objcnn=Nothing

End Sub
ما مشخصه فراهم كننده را Microsoft.jet.OLE DB.3.51 قرار مي دهيم .متد Openشامل دستيابي به فايل .mdb (براي آرگومانConnectionString) و JET را به عنوان مقدار پيش فرض رمز عبور admin براي آرگومان شناسنامه كاربري در اختيار دارد.

 

۶-۲ برقراري ارتباط بوسيلة SQL Server Provider ما مي توانيم از فراهم كنندة MSDASQL جهت متصل شدن به يك پايگاه داده اي SQL SERVER استفاده كنيم ، اما همچنين ميتوانيم از Microsoft SQL Server OLE DB هم استفاده كنيم. زمانيكه ما كد براي فراهم كنندة JET آزمايش مي كرديم مقدار دادن به فراهم كننده اشاره مي كند. ما هم
چنين مي توانيم با مقداردهي به آرگومان provider درConnectionstring آن را مقداردهي كنيم . ما به SQL Server Provider مشابه SQL OLE DB رجوع مي كنيم.آرگوما

ن Location نام سرويس دهنده را مشخص مي كند و آرگومان data source نام پايگاه داده را بيان مي كنيم.
Public Sub OpenWithSqlProvider()

Dim objcnn As NEW ADODB.Connection
Dim strconnect As String

Strconnect=”Provider=SQLOLEDB;Location=DALA;DataSource=ordermanager;” & _
USER ID=sa;Password=;”
Objcnn.Open strconnect
Objcnn.close
Set objcnn=Nothing

End Sub
خاتمه ارتباط زمانيكه ما از شئConnectionاستفاده مي كنيم بايد در انتها براي پايان دادن به ارتباط ازمتد close استفاده كنيم .يا همچنين ما مي توا نيم از متد close جهت استفاده مجدد از متغيرهاي شئ يكسان براي اتصالهاي مختلف استفاده نمائيم.به همين شكل شئ Recordset يك متد close داردودر سبكي مشابه استفاده مي شود. جهت مطمئن بودن از اينكه حافظه سربار اشياء ADO را آزاد نموده ايم بايد مقدار آن را هيچ قرار دهيم.
اجراي دستورات شئ Connection همچنين توانايي اجرا كردن دستورات SQL يا رويه هاي ذخيره شده بوسيلة متد Execute را به ما مي دهد. ما براي اين منظور هم مي توانيم از متد Execute شئ Command هم استفاده كرد. اما استاده از متد Execute موجود شئ Connection بسيار كاراتر ومناسبتر است.
اگر بخواهيم بطور كلي صحبت كنيم ما بايد بتوانيم كدي راكه احتياج داريم كاهش دهيم ، به همان صورتي كه مي توانيم نياز به يك يا تعداد بيشتري ازشئ Command كه از منابع استفاده مي كننداز بين ببريم .در نمونه كدهاي بعدي كه در زير مي آيند ،متد Execute جهت اجراي دستور INSERT در SQL ،يك رويه ذخيره شده و بالاخره براي يك دستور SELECT كه يك مجموعه ركورد را بر مي گرداند استفاده مي شود.
۷-۲ اجراي يك دستور SQL

استفاده از متد Execute در شئ Connection درنهايت به سه آرگومان نياز دارد. اول ،Command_ Text كه دستور SQLرا شناسايي ميكند ( يا نام رويه ذخيره شده ) . دوم آرگومان RecordsAffected كه اختياري است كه آرگومان خروجي دستور مي باشد. توسط آن ما مي توانيم بعد از پردازش عمليات بفهميم كه روي چه تعداد ركورد عمليات انجام شده است و بالاخره آرگومان Options كه اين هم اختياري است كه ماهيت عمل اجرا را بوسيلة يك يا تعداد باطني شناسايي مي كند . به طور مثال در اينجا يك دستور INSERT در SQL ،يك سطر به جدول Salesrep اضافه ميكند.

Public Sub ExecInsert()

 

Dim objcnn As NEW ADODB.Connection
Dim strconnect As String
Dim strinsert As String
Dim intrecsAffected As Integer

Strconnect=”Driver={SQLServer};Server=DALA;UID=sa;DataBase=OrderManager;”
StrInsert=”INSERT INTO Salesreps(srrepid,srfname,srlname,srmidinit,srssn,srcomm _
IssionRating) VALUES(20,’jon’,’smith’,’j’,’۵۵۵-۵۵-۵۵۵۵’,۳)”
With objcnn
.Open strconnect
.Execute strinsert,intrecsAffected,adcmdText
End With
Debug.print intrecsAffected & “records were processed ”
Objcnn.close
Set objcnn=Nothing

End Sub

آرگومان Options مي تواند به يك عدد از نوع عمومي Enum مقداردهي شود ،شامل adcmdText براي اجراي دستورات SQL adcmdStoredProc; براي اجراي يك CommandText كه نام يك رويه ذخيريه شده را مشخص مي كندو adAsyncExecute براي اجراي يك دستوربصورت غير همزمان.

۸-۲ اجراي يك رويه ذخيره شده
شئ استفاده از متد Execute جهت اجراي يك رويه ذخيره شده نسبتاً ساده و آسان است. يكي از ارزشهاي سودمند و مفيد تعريف رويه هاي ذخيره شده ، تعريف پارامترهايي است كه مي توانند بصورت پويا تهيه شوند كه به اين معناست كه رويه ها مي توانند يكبار تعريف شوند ، سپس با مقادير ورودي يا خروجي متفاوت بطور مكرر استفاده شوند. متد Execute شئ Connection هيچ ربطي به كار پارامترها ندارد اما CommandExecute چنين نيست.
مثال بعد ي اجراي يك رويه ذخيره شده را كه يك سطر به جدول Sales Repsاضافه ميكند توضيح مي دهد.
With objcnn
.Open strconnect
.Execute “AddSalesRep”,intrecsAffected,adcmdStoredProc

End With
Debug.print intrecsAffected & “records were processed

۹-۲ كار كردن با مجموعه ركوردها
در نهايت ما مي توانيم از متد Execute براي برگرداندن گروهي از Recordset ها استفاده كنيم.نكته :اصل موضوع اين است كه از اجراي يك دستور Select در SQL

برگردانده مي شود يك از نوع مكان نما رو به جلو دارد.مثال زير متغير شئ Recordset را توصيف مي كند و از آن بعنوان شئ برگردانده شده توسط متد Execute استفاده مي كند .
Public Sub ExecInsert()

Dim objcnn As NEW ADODB.Connection
Dim objrst As NEW ADODB.Recordset
Dim strconnect As String
Dim strSQL As String

Strconnect=”Driver={SQLServer};Server=DALA;UID=sa;DataBase=OrderManager;”
StrSQL=”Select * From Customers Where cuCustomerID<” & 1050 & “Order By” & _ “cuCustomerName”
With objcnn
.Open strconnect
Set objrst=.Execute(strSQL,adcmdText)
End With
Objrst.close
Set objrst=Nothing
Objcnn.close
Set objcnn=Nothing

End Sub 10-2 رويدادهاي ADO
چيزي كه براي ADO تازگي دارد توانايي استفاده از رخدادهاي اشياء و اجراي بعضي از عمليات غير همرماني است . برنامه نويسي با ويژوال بيسيك مبتني بر شنا خت رويدادهااست. بعضي از اشياء ADO 2.0 شامل رويدادهايي ميشوند كه در پا سخ به عمليات مشخصي بوقوع مي پيوندند.
دو طبقه بندي براي رويدادهاي ADO وجود دارد : آنهايي كه قبل از اينكه عمليات شروع بشود اتفاق مي افتند و يا آنهايي كه قبل از كامل شدن يك عمل واقع مي شوند . حتي يك يا دو رويداد سرگردان هم كه در طول پردازش يك عمليات اتفاق مي افتد نيز وجود دارد.رخدادهاي ADO براي شئ Connectionو شئRecordset استفاده مي شوند.اين رخدادهاADO خواه عملياتي موفقيت آميز باشد يا نباشد واقع مي شوند.
استفاده از رخداد WillConnect:
از اين رويداد براي نوشتن كدي كه ميتواند تصميم بگيرد كه آيا اتصالي كه در شرف برقرارشدن است مو فقيت آميز است يا نه ، استفاده ميشود واگر فرايندي برقراري ارتبا

ط موفقيت آميز نباشد آرگومانهاي ConnectionString را براي حل مشكل تغيير مي دهيم .
استفاده از رويداد RollbackTranscommplete:
از اين رويداد براي تصميم گيري اينكه چه زماني يك تراكنش كامل يا Ro

llback مي شود استفاده مي كنيم.در پاسخ ما ممكن است تراكنش ديگري را انتخاب نماييم.
استفاده از رويداد ExecuteComplete:
از اين رويداد براي تصميم گيري اينكه چه زماني اجراي يك فرمان به پايان مي رسد و اينكه آيا موفقيت آميز بوده است يا خير استفاده مي شود ،سپس پيش رفتن يا قطع شدن يا عملگرهاي ديگر را بر اساس نتيجه انتخاب مي كنيم.
۱۱-۲ خصوصيات پويا ADO
ADO داراي مشخصه هاي پويا و ذاتي مي باشد. مشخصه هاي ذاتي آنهايي هستند كه شما به تازگي مشاهده كرده ايد مثل CONNECTIONTIMEOUT يا COMMAND TIME OUT اما اشياء ADO همچنين از طريق مشخصه هاي پو ياي مجموعهPROPERTIES كه رفتارفراهم كننده اي كه شما از آن استفاده مي كنيد را توصيف و نشان مي دهد، استفاده مي كند. اشياء CONNECTION, COMMAND, PARAMETER, RECORDSET, FIELDهمگي يك مجموعه PROPERTIES دارند، هريك از مجموعه ها شامل صفات مشخص فراهم كننده مرتبط با شئ اي كه مجموعه را نگهداري مي كنند.پرسشي PROPERTYداراي خصوصاتي مثلNAME, TYPE, VALUE, ATTVIBUTES,
مي باشد، مشخصه NAME نام شناخته شده فراهم كننده را مشخص مي كند. مشخصه VALUE اطلاعات لازم در تصميم گيري رفتار مشخصه را شامل مي شود. بطور كلي زماني كه شما ميتوانيد از اشياء ADO استفاده مجدد نماييد ممكن است كه نياز به امتحان مشخصه هاي پويا بكار گرفته شده توسط فراهم كننده ، جهت تصميم گيري اينكه برنامه كاربردي شما ميتواند بطور مطمئني يك عمليات جهت دستيابي داده انجام دهد داشته باشيد .براي مثال يك شئ Connection مي تواند از طريق دو يا تعداد بيشترفراهم كننده براي دسترسي به داده استفاده مجدد بشود. اول شما مي بايست كه يك اتصال وارتباطي را برقرار كنيد وهر كدام از جملاتي را كه لازم بودند اجرا نماييد و سپس ارتباط راببنديد. اما براي اينكه شما بخواهيد از همان متغيير شئ CONNECTION جهت دستيابي به منبع داده ديگري استفاده نماييد ، بايد بعدا دوباره از همان نمونه شئ استفاده كنيد و دوباره ارتباط را به منبع داده دوم برقرار كنيد . اگر چه فراهم كننده اي كه اكنون از آن استفاده مي شود ممكن است بعضي عمليات را پشتيباني ننمايد . قطعه كد زير نشان مي دهد كه بوسيله فهميدن مقدار يك مشخصه پويا شما مي توانيد تصميم بگيريد كه چطور كدتان بايد اجراء شود.

With objcnn
.CommandTimeout=15
.ConnectionTimeout=15
.Provider=”Microsoft.jet.OLE.DB.3.51”
.Open “d:\book\code\ordermanager.mdb”,”admin”
End Sub
Objrst.Open “SELECT * FROM customers”,objcnn
Intcount=1
For Each ObjPrp in

Objcnn.Properties Debug.Print intcount & “)Name:” & ObjPrp.Name & “Value” & ObjPrp.Value \
Intcount=intcount +1
Next
3 اداره كردن خطاها

بطور يقين هر برنامه كاربردي كه شما مي نويسيدميخواهيد كه بطور صحيح خطاهاي زمان اجرا اداره شوند . وقتي شما با ADO كار مي كنيد بياد داشته باشيد كه شئ اتصال يك مجموعه ERROR است كه اشياء ERROR را نگهداري مي كند.
شئ ERROR مي تواند براي پرسش كرد از خطاهاي پاس داده شده به ADO از طريق فراهم كننده استفاده شود. شئ ERROR يك تعدادي مشخصه (نشان داده شده شكل ۵-۲) را دارد مثل NUMBER, DESCRIPTION, SOURCE, NATIVEERROR,HELPFILE, و HELP CONTEXT وSQLSTATE .
زمانيكه شما درحال انجام يك عمليات با شئ ADO هستيد اگر يك خطايي فراهم كننده اتفاق بيفتد، خطا ها به ADO پاس داده مي شوند و ADO يك يا بيشتر شئ ERROR را در مجموعه خطاها جايگزين مي كند . قبل از اينكه شما مثالهايي براي خطاها امتحان كنيد اجازه بدهيد نگاه نزديكتري به اطلاعاتي كه شما مي توانيد از مشخصه ها بدست آوريد بيندازيم :
NUMBER :
از اين مشخصه جهت شناسايي عدد منحصر بفردي كه شرط خطا را مشخص مي كند استفاده مي كنند.
DESCRIPTION :
از اين مشخصه جهت بيرون كشيدن اطلاعات توصيفي در مورد خطاها استفاده مي كنند.
SOURCE :
نام يك كلاس ياPROGID را كه منبع خطاهارا شناسايي مي كند باز مي گردانداگريك فراهم كننده خطايي را ايجاد و توليد كند SOURCE ممكن است شناسه اي براي ان فراهم كننده شامل شود. خطاهاي ايجاد شده در“ ADODB,” ADO را بعنوان قسمتي از مقداربازگشتي مشخصهSource باز مي گردانند .

NativeError:از اين مشخصه جهت بازيابي اطلاعات خطاي معيني از پايگاه داده استفاده ميشود.
براي مثال زماني كه از MSDASQL با يك پايگاه داده سرويس دهنده SQL استفاده ميشود خطا هاي محلي ازطريق ODBC فراهم كنندهMSDASQL ،به مشخصة NativeError ،ADO ارسال مي شود.