تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 4 از 4

نام تاپيک: آموزش ActiveX Data Object

  1. #1
    Banned
    تاريخ عضويت
    Sep 2008
    پست ها
    33

    پيش فرض آموزش ActiveX Data Object

    بخش اول
    تاریخچه :
    برای آسانتر شدن کار برنامه نویسان و یکسان کردن روش های ذخیره و بازیابی ، استاندارد ODBC پایه گذاری شد . ODBC توابع و روش­های پیچیده­ای را برای اتصال به پایگاه داده و استفاده از آن را در اختیار برنامه نویسان قرار میداد . شرکت مایکروسافت مدل برنامه نویسی DAO را ارائه داد . DAO مخفف DatabaseAccessObjects میباشد . DAO بر پایه موتور Jet بود ولی با استفاده از اشیا داده ای که ارائه کرده بود اتصال به بانک و کار با آن را آسانتر کرده بود. پس از آن شرکت مایکروسافت مدل OLEDB را ارائه کرد که از ODBC پیشرفته تر بود و امکان اتصال به منابعی مانند Email و منابع غیر SQL را نیز داشت. کار کردن با توابع OLEDB بسیار سخت و پیچیده بود . بنابراین مایکروسافت ADO را که بر مبنای OLEDB است ارائه کرد . ADO مخفف ActiveX Data Object میباشد و همه امکانات OLEDB را از طریق Object ها ارائه میکند . ADO در مقابل با DAO اشیا کمتری دارد و دارای امکانات بیشتری است .
    استفاده از ADO :
    در این مقاله سعی شده است تا در حد ممکن مطالب به صورت خلاطه شده و مفید ارائه شود . بنابراین هدف توضیح امکانات پیشرفته ADO نیست و یا حداقل فعلا قصد آموزش مقدماتی ADO را داریم .
    برای استفاده از ADO دو راه داریم . راه اول استفاده از ADODC یا استفاده از کنترل داده ADO میباشد . راه دوم استفاده از ADODB یا استفاده از توابع و اشیا ADO است . در این مقاله به دلیل انعطاف بیشتر و امکان استفاده حرفه­ای تر ، از روش دوم استفاده میکنیم .
    اشیای ADO :
    در ADO سه شی اصلی وجود دارد :
    Connection : برای اتصال به بانک اطلاعاتی به کار میرود .
    Recordset : رکوردست مورد نظر از یک بانک اطلاعاتی را در خود دارد .
    Command : برای Stored-Procedure ها بکار میرود .
    Connection یک زیر مجموعه به نام Erro دارد که خطاهای اتصال به بانک در آن قرار میگیرد . Comman هم یک زیر مجموعه به نام Paramete دارد که پارامترهای ارسالی به ProcedureStored ها را در خود دارد . Recordse یک زیر مجموعه به نام Fields دارد که بیانگر فیلدهای یک رکوردست است . همه این اشیا و زیر مجموعه­های آنها دارای کلکسیونی به نام Properties هستند که خواص را در خود دارند .
    برای کار با ADO در VB باید ابتدا Refrence آنرا به پروژه اضافه کنید . برای این کار با استفاده از گزینه Refrence در منوی Project پنچره Refrences را مشاهده میکنید که از لیست درون آن باید گزینه Microsoft Activex Data Objects را انتخاب کنید .
    شی connection :
    اولین شی که در کار با بانک اطلاعاتی به آن نیازمندیم شی connection میباشد . این شی یک اتصال بین برنامه شما و بانک اطلاعاتی برقرار میکند . برای اینکه از شی connection در برنامه استفاده کنیم باید نمونه­ای از آن را ایجاد کنیم .

    Dim cnn As New ADODB.Connection

    با استفاده از متد open اتصال شی connection را با پایگاه داده برقرار میکنیم . در اینجا ذکر یک نیکته لازم است و آن انعطاف پذیری بیش از حد اشیا داده ADO است به نحویکه برای استفاده از امکانات آن راه­های متنوعی وجود دارد . در اینجا در مورد متد open دو روش را مثال خواهیم زد اما در قسمتهای دیگر به ذکر یک روش اکتفا خواهیم کرد که لزوما بهترین روش نیست .
    حال کلی متد open به صورت زیر است :

    connection. Open ConnectionString,UserID,Password,Options

    در این متد مهمترین پارامتر آن ConnectionString است . حالت کلی ConnectionString به صورت زیر است :

    Provider=<Provider Name> ;Data Source=<Source>


    اگر با ADO نسخه 2.0 و یا 2.1 کار میکنید از Provider Name زیر برای اتصال به بانک اطلاعاتی اکسس استفاده کنید .

    Provider=Microsoft.Jet.OLEDB.3.51

    و اگر از نسخه 2.5 و بالاتر استفاده میکنید رشته زیر را بکار ببرید :

    Provider=Microsoft.Jet.OLEDB.4.0

    رشته زیر به عنوان ConnectionString برای اتصال به یک بانک اطلاعاتی اکسس به نام test.mdb بکار میرود .

    Provider=Microsoft.Jet.OLEDB.3.51 ;Data Source=c:\test.mdb

    لیست ProviderName برای Provider های مختلف به شرح زیر است .

    Provider=SQLOLEDB;DataSource=serverName;"InitialCa talog=databaseName; SQLServer

    User ID=userName;Password=userPassword;


    Provider=MSDAORA;Data Source=serverName;User ID=userName; Oracle

    Password=userPassword;


    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=databaseName;User Microsoft Jet

    ID=userName;Password=userPassword;



    Provider=MSDASQL;DSN=dsnName;UID=userName;PWD=user Password; ODBC


    جزئیات بیشتر درباره هرکدام از پارامترهای آن را میتوانید در MSDN بیابید .
    Last edited by TKNC; 29-08-2010 at 07:14. دليل: اضافه کردن

  2. 2 کاربر از TKNC بخاطر این مطلب مفید تشکر کرده اند


  3. #2
    Banned
    تاريخ عضويت
    Sep 2008
    پست ها
    33

    پيش فرض آموزش ActiveX Data Object ( بخش دوم )

    ( بخش دوم )
    برای مثال قبل اگر بخواهیم یک اتصال برقرار کنیم به صورت زیر عمل میکنیم :
    Dim cnn As New ADODB.Connection

    cnn.Open "Provider=Microsoft.jet.oledb.3.51;Data Source=C:\test.mdb"


    به همین سادگی یک اتصال با بانک اطلاعاتی برقرار کردیم .
    شی Recordset :
    برای تشکیل یک رکوردست بااستفاده از داده­های ذخیره شده در یک بانک استفاده میشود . برای تشکیل یک رکوردست از متد Open شی Recordset استفاده میشود . حالت کلی آن به این شکل است :

    Open (Source, ActiveConnection, CursorType, LockType, Options)

    در ساده ترین حالت پارامتر Source برابر نام جدولی است که میخواهیم اطلاعات را از آن استخراج کنیم . ActiveConnection هم نام شی Connection است که در حال حاضر فعال میباشد ( بوسیله متد Open اتصال برقرار شده است ) . در حالتیکه Source نام یک جدول باشد پارامتر Option برابر adCmdTable است . دو پارامتر CursorType و LockType را هم در بخش بعدی مفصلا توضیح خواهیم داد و همچنین حالت­های دیگر پارامتر Option و پارامتر Source .
    در اینجا اگر فرض کنیم که Test.mdb دارای جدولی است به نام Person با استفاده از کد زیر میتوان یک رکوردست از آن را تشکیل داد :
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.3.51 ;Data Source=c:\test.mdb"
    rst.Open "Person", cnn, adOpenKeyset, adLockOptimistic, adCmdTable
    .
    .
    .
    cnn.Close
    rst.Close
    Set cnn = Nothing
    Set rst = Nothing
    در این مثال به دو نکته باید دقت کنید .
    1-پارامترهای CursorType و LockType را به همین ترتیب مقدار دهی کنید تا در بخش بعد با آنها بیشتر آشنا شویم .
    2-پس از اتمام عملیات روی داده­های رکوردست باید هم Connection و هم Recordset را ببندیم . برای این کار هر دو شی متدی به نام Close دارند . اما برای اطمینان از ، از بین رفتن اشیا آنها را برابر Nothing قرار میدهیم .
    اگر فرض کنیم که در جدول Person از بانک Test.mdb یک فیلد با نام Name وجود دارد ، کد زیر تمام نام­ها را استخراج کرده و در یک ListBox با نام LstName قرار میدهد . در این کد از متد MoveNext از شی Recordset استفاده شده است که باعث میشود یک رکورد در Recordset حرکت کنیم .
    Private Sub Form_Load()
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.Jet.OLEDB.3.51 ;Data Source=c:\test.mdb"
    rst.Open "Person", cnn, adOpenKeyset, adLockOptimistic, adCmdTable
    Do While Not rst.EOF
    lstName.AddItem rst!Name
    rst.MoveNext
    Loop
    cnn.Close
    rst.Close
    Set cnn = Nothing
    Set rst = Nothing
    End Sub
    Rst.EOFبیانگر انتهای رکوردست است . برای دسترسی به مقدار یک فیلد از نام رکوردست به همراه علامت ! و نام فیلد استفاده میکنیم .
    علاوه بر متد MoveNext از متدهای MoveFirst که به اولین رکورد میرود Move Previous که به رکورد قبلی میرود ،MoveLast به آخرین رکورد میرود . Move به رکورد مورد نظر میرود ، میتوانید استفاده کنید .
    برای تمرین شما میتوانید یک DataBase برای دفترچه تلفن درست کنید و بتوان بوسیله برنامه ای که توسط VB نوشته اید به این بانک متصل شد و بنا بر تنظیمات ، ابتدا همه نام ها را در لیست به شما نشان بدهد و سپس با کلیک کردن بر روی هر نام مشخصات کامل آن فرد را نمایش دهد .
    Last edited by TKNC; 29-08-2010 at 08:03. دليل: تصحیح

  4. 2 کاربر از TKNC بخاطر این مطلب مفید تشکر کرده اند


  5. #3
    Banned
    تاريخ عضويت
    Sep 2008
    پست ها
    33

    پيش فرض آموزش ActiveX Data Object ( بخش سوم )

    پارامتر Source و ActiveConnection را قبلا به اندازه کافی توضیح داده­ایم اما پارامتر CursorType مقادیر زیر را می­پذیرد :
    adOpenForwardOnly : رکوردستی به صورت یک طرفه رو به جلو میسازد . در مواردیکه یک رکوردست فقط یک بار پیمایش میشود به دلیل سرعت بالا این نوع رکوردست مناسب است .
    adOpenKeySet: یک رکوردست با امکان تغییرات بوسیله کاربران و به صورت دو طرفه ایجاد میکند . شما قادر نیستید به رکوردهایی که توسط کاربران دیگر اضافه شده­اند دسترسی پیدا کنید .
    adOpenDynamic: شبیه به گزینه قبلی است با این تفاوت که رکوردهای تغییر داده شده و یا اضافه شده بوسیله سایر کاربران توسط شما هم در دسترس هستند .
    :adOpenStatic رکوردستی که با این گزینه ساخته میشود به صورت ایستا خواهد بود . یعنی تغییرات در این رکوردست اثری ندارد .
    پارامتر بعدی در متد Open پارامتر LockType است که میتوانید گزینه­های زیر را برای آن استفاده کنید :
    adLockReadOnly: اجازه دستکاری رکوردست را به شما نمیدهد .
    adLockOptimistic: رکوردها هنگام Update رکوردست قفل میشوند .
    adLockPessimistic : رکوردها هنگام آغاز ویرایش قفل میشوند .
    adLockBatchOptimistic : وقتی متد UpdateBetch روی رکوردست اجرا شود ، همه دسته ، قفل میشود .
    برای پارامتر Option هم ، گزینه­های زیر را استفاده کنید :
    adCmdText : مقدار پارامتر Source متن فرمان مورد نظر میباشد مثلا یک دستور SQL است .
    adCmdTable : مقدار پارامتر Source نام جدولی است که همه فیلدهای آن برگردانده خواهد شد .
    اضافه کردن و حذف رکورد از رکوردست :
    به طور خلاصه برای اضافه کردن رکورد ابتدا متد AddNew از رکوردست را فراخوانی میکنیم و سپس فیلدها را مقدار میدهیم و در آخر متد Update را فراخوانی میکنیم . بهتر است قبل از همه این کارها کرسر را با استفاده از متد MoveLast به آخرین رکورد انتقال دهیم .
    rst.MoveLast
    rst.AddNew
    rst!strName = txtName.Text
    rst!strFamily = txtFamily.Text
    rst!iAge = Val(txtAge.Text)
    rst.Update
    برای حذف رکورد از رکوردست ابتدا باید کرسر را به رکورد مورد نظر منتقل کنیم برای این کار از حلقه­ها استفاده میکنیم . پس از رسیدن به رکورد مورد نظر متد Delete از رکوردست را فراخوانی میکنیم و برای اعمال تغییرات رکوردست روی بانک متد Update را فراخوانی میکنیم :
    Do While Not rst.EOF
    If rst!strName = "mAm" And rst!strFamily = "BlackGhost" Then
    rst.Delete
    rst.Update
    Exit Do
    End If
    Loop

    استفاده از SQL :
    یادگیری SQL به عهده خودتان میباشد . ما در اینجا فقط از یک select ساده استفاده خواهیم کرد . زمانیکه بخواهیم رکوردستی از فیلدهای انتخابی از یک جدول تشکیل دهیم . میتوانیم از SQL استفاده کنیم . برای این کار دستور SQL را به صورت یک رشته و یا متغیر رشته­ای به عنوان پارامتر Source از متد Open ارسال میکنیم و پارامتر آخر آن را هم برابر adCmdText قرار میدهیم . به عنوان مثال :
    rst.Open "SELECT strName,strFamily FROM tblPerson", cnn, adOpenKeyset, adLockOptimistic,
    adCmdText

    و یا بدین صورت :
    Dim strSQL As String
    strSQL = "SELECT strName,strFamily FROM tblPerson"
    rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic, adCmdText

    که روش دوم از خوانایی بیشتری برخوردار است . این مثال­ها رکوردستی حاوی دو فیلد strName و strFamily تشکیل میدهند .
    یک مثال دیگر
    Dim strSQL As String
    strSQL = "SELECT * FROM tblPerson WHERE Age=20
    rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic, adCmdText

    در این مثال رکوردستی حاوی مشخصات همه افرادیکه سن آنها 20 سال است تشکیل داده­ایم که همه فیلدهای جدول با استفاده از * در این رکوردست انتخاب شده­اند .
    اگر فرض کنیم که در برنامه­ای بخواهیم اطلاعات مثال قبل را بدست آوریم اما سن مورد نظر را از کاربر بپرسیم از طریق زیر عمل میکنیم .
    Dim strSQL As String
    rst.Open strSQL, cnn, adOpenKeyset, adLockOptimistic, adCmdText

    اگر دقت کرده باشید در این مثال­ها فرض بر این بوده است که فیلدی که در قسمت شرط در WHERE بکار رفته است از نوع عددی است . اما اگر بخواهیم از فیلدهای رشته­ای استفاده کنیم بازهم باید تغییر کوچکی در آن بدهیم و از کدهای زیر استفاده کنیم :
    strSQL = "SELECT * FROM tblPerson WHERE strName=' " & txtName.Text & " ' "

    دراستفاده از دستورات SQL باید به این نکته توجه کرد که در قسمت شرط Where باید مقدار بعد از تساوی را بین علامتهای محصور کنید بنابراین از روش بالا برای این کار استفاده کرده­ایم . البته برای اینکه این علامت کوچک به راحتی دیده شود دو طرف آن را علامت فاصله قرار داده­ایم که این کار را شما نباید انجام دهید .

  6. این کاربر از TKNC بخاطر این مطلب مفید تشکر کرده است


  7. #4
    Banned
    تاريخ عضويت
    Sep 2008
    پست ها
    33

    پيش فرض آموزش ActiveX Data Object ( بخش چهارم )

    بخش پایانی

    ویرایش رکورد :
    ما درباره حذف و اضافه کردن رکوردها در بخش گذشته بحث کردیم و حالا میخواهیم ویرایش رکورد را بررسی کنیم . برای ویرایش رکورد کافی است ابتدا رکوردست مورد نظر را تشکیل دهیم و سپس رکورد را در آن جستجو کنیم و پس از پیدا کردن رکورد فیلدهای آن را به مقدار جدید ست و در آخر رکوردست را Update کنیم . به مثال زیر بدون توجه به منطق آن توجه کنید :
    Dim cnn As ADODB.Connection
    Dim rst As New ADODB.Recordset
    .
    .
    .
    Do While Not rst.EOF
    If rst!strName = txtName.Text Then
    rst!Family = txtFamily.Text
    rst!No = txtNo.Text
    rst.Update
    Exit Do
    End If
    rst.MoveNext
    Loop
    rst.Close
    Set rst = Nothing
    روال های ذخیره شده ( StoredProcedure ) :
    روال­های ذخیره شده در حقیقت دستورات SQL هستند که در قالب Query در بانک اطلاعاتی ذخیره شده­اند . یعنی در این روش ما Query های موجود در بانک اطلاعاتی را اجرا میکنیم . این روش نسبت به روش استفاده از رشته SQL در متد Open چندین مزیت دارد :
    1-برای ساختن روال­های ذخیره شده میتوانید از ابزار ویزارد بانک اطلاعاتی استفاده کنید . بدین ترتیب میتوانید دستورات SQL پیچیده را ظرف مدت زمان کوتاهی ایجاد کنید .
    2-سرعت اجرای روال­های ذخیره شده بیشتر است زیرااین روال­ها به صورت داخلی اجرا شده و نتیجه آن به عنوان رکوردست برگردانده میشود . در صورتیکه روش قبلی در حقیقت فیلتر گذاشتن روی خروجی یک رکوردست میباشد .
    3- خوانایی سهولت استفاده از دستورات SQL پارامتریک که این امر باعث کاهش حجم کد شما خواهد شد .
    4- خوانایی برنامه که از نظر مهندسی نرم افزار امر بسیار مهمی است بسیار بیشتر خواهد بود .
    برای اجرای روال­های ذخیره معمولی باید از شی Command و نوع پارامتریک آنها از اشیای Command و Parameter استفاده کرد . بهتر است روش استفاده از شی Command را با استفاده از یک مثال توضیح دهیم .
    پس به مثال زیر توجه کنید :
    Dim cnn As New ADODB.Connection
    Dim cmd As New ADODB.Command
    Dim rst As New ADODB.Recordset
    cnn.Open "Provider=Microsoft.jet.oledb.3.51;Data source=" & App.Path & "\Site.mdb"
    cmd.ActiveConnection = cnn
    cmd.CommandText = "qryInDatabase"
    cmd.CommandType = adCmdStoredProc
    Set rst = cmd.Execute
    Do While Not rst.EOF
    Print rst!AddressName
    rst.MoveNext
    Loop
    rst.Close
    cnn.Close
    Set rst = Nothing
    Set cmd = Nothing
    Set cnn = Nothing
    در این مثال همه چیز گویاست به جز CommandType و CommandText و Execute . خاصیت CommandType نوع دستور را تعیین میکند که در اینجا قصد استفاده از روال ذخیره شده را داریم .
    خاصیت CommandText را وقتی مه مقدار خاصیت قبلی را برای استفاده از روال ذخیره شده تعیین کنیم باید برابر نام Query در بانک اطلاعاتی قرار گیرد . متد Execute برای اجرای دستور مورد نظر بکار میرود .
    خروجی متد Execute یک شی رکوردست است که با استفاده از دستور Set به یک شی رکوردست نسبت میدهیم . این مثال برای یک Query بدون پارامتر میباشد . برای استفاده از Query های پارامتریک باید از شی Parameter استفاده کنیم .
    استفاده از شی Parameter :
    با یک مثال استفاده از شی parameter را بررسی میکنیم .
    Dim cnn As New ADODB.Connection
    Dim rst As New ADODB.Recordset
    Dim cmd As New ADODB.Command
    Dim prm As New ADODB.Parameter
    Dim strCon As String
    strCon = "Provider=Microsoft.Jet.Oledb.3.51;Data Source=" + App.Path + "\db1.mdb"
    'Debug.Print strCon
    cnn.Open strCon
    cmd.ActiveConnection = cnn
    cmd.CommandType = adCmdStoredProc
    cmd.CommandText = "qryFamily"
    prm.Name = "Family"
    prm.Type = adBSTR
    prm.Value = "safdel"
    cmd.Parameters.Append prm
    Set rst = cmd.Execute
    Do While Not rst.EOF
    lstTest.AddItem rst!Name
    rst.MoveNext
    Loop
    rst.Close
    cnn.Close
    در این مثال فقط قسمت­های مربوط به شی prn جدید میباشند . خاصیت Name از شی prm نام فیلدی است که بصورت پارامتریک میباشد . Type نوع فیلد را تعیین میکند . خاصیت Value مقدار ارسالی به پارامتر مورد نظر میباشد .
    پس از تنظیم خواص لازم از شی Prm بااستفاده از متد Append از شی Command این پارامتر را به شی Command متصل میکنیم و در نهایت با فراخوانی متد Excute از شی Command رکوردست را تحویل میگیریم .
    بدست آوردن اطلاعات از ساختار بانک اطلاعاتی :
    با استفاده از متد OpenSchema از شی Connection میتوانیم لیستی از جداول موجود در یک بانک اطلاعاتی را به صورت یک رکوردست بدست آوریم .
    Public Function OpenSchemaX() As String
    Dim Cnxn As ADODB.Connection
    Dim rstSchema As ADODB.Recordset
    Dim strCnxn As String
    Dim strStruct As String
    Set Cnxn = New ADODB.Connection
    strCnxn = "Provider=Microsoft.Jet.Oledb.3.51;Data Source=" + App.Path + "\db1.mdb"
    Cnxn.Open strCnxn
    Set rstSchema = Cnxn.OpenSchema(adSchemaTables)
    Do Until rstSchema.EOF
    strStruct = strStruct + "Table name: " & rstSchema!TABLE_NAME & "Table type: " &
    rstSchema!TABLE_TYPE + vbCrLf
    List1.AddItem strStruct
    rstSchema.MoveNext
    Loop
    OpenSchemaX = strStruct
    rstSchema.Close
    Cnxn.Close
    Set rstSchema = Nothing
    Set Cnxn = Nothing
    End Function
    Private Sub Form_Load()
    Text1.Text = OpenSchemaX
    End Sub
    تابع OpenSchemaX لیستی از اجزای بانک اطلاعاتی را به صورت یک رشته برای شما بر میگرداند . شما میتوانید با استفاده از متد Save از شی رکوردست یک رکوردست را در فایل ذخیره کنید .
    مباحث ADO را همینجا تمام میکنیم . منتظر نظرات شما هستم .
    باتشکر Tknc

  8. این کاربر از TKNC بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •