نمایش نتایج 1 تا 33 از 33

نام تاپیک: پایگاه داده در ویژوال بیسیک - شروع تا پایان

Hybrid View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

    Lightbulb شي Connection

    از اسمش پيداست. براي برقراري ارتباط با بانك اطلاعاتي مورد استفاده قرار ميگيره. براي همين بايد يه متغير از جنس Connection بسازيم تا بتونيم ازش در برنامه براي اتصال به بانك اطلاعاتي استفاده كنيم:

    Dim Conn As ADODB.Connection
    چند تا ويژگي مهم داره كه براي ايجاد ارتباط بايد مقداردهي بشن.
    خاصيت Provider:
    اين خصيصه مشخص مي كنه كه تهيه كننده بانك اطلاعاتي كيه(!) (چي شد...) چندين تدارك بيننده يا تهيه كننده براي اين خاصيت وجود داره كه احتياج به دونستن همه اونها نيست. معمولاً از تهيه كننده OLEDB استفاده مي كنن كه خودش به چندين تهيه كننده براي كار با بانك هاي اطلاعاتي مختلف تقسيم بندي ميشه. مثل:

    Microsoft.JET.OLEDB.3.51
    SQLOLEDB
    and more ...
    براي همين بايد مشخص بشه كه تدارك بيننده بانك اطلاعاتي چي هست. به عنوان مثال براي كار با MS Access از اين تدارك بيننده استفاده مي كنيم:

    Conn.Provider= "Microsoft.JET.OLEDB.4.0"
    اين Provider ها به ما كتابخانه هايي رو از اشيا و كلاس ها مي دن كه مي تونيم باهاشون برنامه هاي پايگاه داده رو بنويسيم. اين Provider چندين آرگومان ديگه داره مثل Remote Server, Remote Provider و ... كه براي دسترسي از راه دور به هنگام باز كردن بانك اطلاعاتي استفاده ميشه كه من نحوه كار كردن باهاش رو بلد نيستم.
    خاصيت ConnectionString:
    اگر بخوايم به صورت جزئي نگاهش كنيم تمامي خاصيت ها رو مثل Provider, DB Path, UserName,Password و ... در خودش مي تونه نگه داره اما براي خوانايي بيشتر كد ميان اين مشخصه ها رو جدا جدا مي نويسن. ما چون provider رو مشخص كرديم ديگه احتياجي به نوشتن اون در اين خاصيت نيست و فقط آدرس بانك اطلاعاتي رو توش مي نويسيم:

    Conn.ConnectionString = App.Path + "\DataBase.mdb"
    در واقع كد فوق همون آرگومان Data Source رو مقدار دهي مي كنه.
    خاصيت CursorLocation - نشانه گذاري سمت سرور، سمت كلاينت:
    گفتيم كه منابع يا تدارك دهنده هاي ما يه سري اشيا و كلاس هايي رو در اختيار ما قرار مي دن كه يكي از اونها يه Libary از Sign ها يا نشانه هاست كه مشخص مي كنه كه سيستم اين نشانه ها رو از سمت Server يا Client تدارك بيننده ها بگيره:

    Server:
    Conn.CursoreLocation = adUseServer
    Client:
    Conn.CursorLocation = adUserClient
    متد Open:
    بعد از ايجاد و برقراري اتصال ما بايد اين پايگاه داده رو باز كنيم كه متد Open اين كار رو انجام مي ده. اشنايي بيشتر با اين متد:

    https://barnamenevis.org/showpost.php...73&postcount=3

    خاصيت State:
    وضعيت موجود و فعلي Connection رو مشخص مي كنه. البته زياد به اين گزينه اعتماد نكنيد چون به هرحال VB6 يا كلي تر بگيم ADO به صورت Connect با بانك اطلاعاتي كار مي كنه و شايد به ظاهر شما فكر كنيد اتصال بسته ولي اينجوري نيست و اتصال از لحاظ منطقي باز هستش. ولي خوب دونستنش ضرري نداره.
    معمولاً در جواب يك شرط از اين ويژگي استفاده مي كنن تا ببينن اگر اتصال باز هستش اتصال قبلي رو ببندن و دوباره باز كنن:

    If Conn.State = adStateOpen Then Conn.State = adStateClosed

    ثابت adStateOpen از لحاظ عددي مقدار 1 و ثابت adStateClosed از لحاظ عددي مقدار 0 رو مشخص مي كنه.
    اگر مي خواين ببينيد كه وضيعيت اتصال به چه صورت هست مي تونيد از اين ويژگي استفاده كنيد:

    MsgBox Conn.State
    آخرین ویرایش به وسیله vbhamed : پنج شنبه 18 مهر 1392 در 14:55 عصر

  2. #2

    Lightbulb شي Command

    شي Command دستورات مربوط به SQL رو اجرا مي كنه. متد ها و خاصيت هاي مختلفي داره كه به وسيله اونها ميشه يك دستور SQL رو به اجرا درآورد. درواقع كار اصلي رو اين شي انجام مي ده. براي استفاده از اين شي بايد يه متغير از جنس Command بسازيم:

    Dim Cmd As ADODB.Command
    وقتي ما مي خوايم عملياتي رو در بانك اطلاعاتي به اجرا در بياريم احتياج به چندين مورد داريم كه خودشون به چندين زير عمليات تقسيم بندي ميشن. بستگي داره كه كدومشون رو انتخاب كرده باشيم:

    1. مسير اتصال بانك اطلاعاتي
    2. نوع اجراي عمليات
      • استفاده از دستور SQL
        • نوشتن دستور SQL - مثل Insert,Update,Join,...
        • ارسال Parameters در صورت نياز

      • استفاده از جدول يا Table
      • استفاده از رويه ذخيره شده (Store Procedure)
        • فراخواني رويه مورد نظر
        • ارسال Parameters در صورت نياز

      • و غيره


    خاصيت ActivatedConnection:
    اين خاصيت مسير اتصال به بانك اطلاعاتي رو مشخص مي كنه كه اين دستور SQL يا S.P مجا بايد اجرا بشه. تنها مقداري كه بايد بهش بديم همون متغير Conn در بخش قبل هستش چون بسياري از ويژگي هاي Command و Connetion با هم يكسان هستند:

    Cmd.ActivatedConnetion = Conn

    خاصيت CommandType:

    اينم از اسمش پيداست. نوع دستور يا عمليات رو بايد اينجا مشخص كنيم. مثلاً اگر بخوايم يه S.P رو به اجرا در بياريم بايد با ثابت adCmdStoredProc مقداردهي كنيم. اگر بخوايم از يك دستور SQL مشخص استفاده كنيم بايد خاصيت adCmdText رو انتخاب كنيم و ديگر مواردي كه با يه نگاه جزئي ميشه فهميد كه چه كاري انجام مي دن.

    cmd.CommandType = adCmdText
    cmd.CommandType = adCmdTable
    cmd.CommandType = adCmdStoredProc
    and more ...
    خاصيت CommandText:
    اگر ما خاصيت CommandType رو با adCmdText مقدار دهي كرده باشيم بايد در اينجا دستور SQL رو بنويسيم. اگر بخوايم Store Procedure رو اجرا كنيم بايد نامش رو اينجا به صورت رشته قيد كنم:

    Cmd.Commandtext = "Insert Into Table (Code,FName,Age) Values (1254,'Barnamenevis',18)
    .
    Cmd.CommandText = "Select * From tblClass"
    ....
    آخرین ویرایش به وسیله اوبالیت به بو : پنج شنبه 24 بهمن 1387 در 18:43 عصر دلیل: ويرايش عنوان

  3. #3

    Lightbulb ايجاد Parameters - مقدمه

    ايجاد Parameters:
    فرض كنيد كه مي خواين يه دستور SQL رو بنويسيد كه مي خواد عمل حذف كردن يك ركورد رو بر اساس تست يك شرط انجام بده. خوب طبيعتاً مي نويسيم:

    Delete From TblTest WHERE ID = 5
    اين دستور ركورد شماره پنجم جدول tblTest رو پاك مي كنه. حالا در برنامه ما نمي دونيم كه كدوم ركورد بايد پاك بشه و مي خوايم اين امكان در برنامه قرار داده بشه كه كاربر خودش يك مقداري رو دلخواه وارد كنه و ركورد مورد نظر پاك بشه. اين ورودي مي تونه از طريق نوشتن در يك TextBox باشه، مي تونه انتخاب يك گزينه از ComboBox يا ListBox باشه، مي تونه انتخاب يك سطر از DataGrid يا MSFlexGrid باشه يا هر كنترل ورودي ديگه اي كه اين مقدار رو به شرط دستور SQL مي ده. مي نويسيم:

    "Delete From TblTest WHERE ID = " + Val(Trim(Text1.Text))
    حالا فرض كنيد مي خوايم يه دستور Update بنويسيم كه قراره فيلدها رو با يك Select تودر تو مقدار دهي كنه و اين Select تودر تو با كنترل هاي ورودي برنامه فيلدهاش مقداردهي ميشه و دوباره در پايان دستور Update يه شرط وجود داره كه اون هم بايد از يه TextBox يا DataGrid گرفته بشه. آيا به نظر شما بازهم بايد به روش بالا كد نوشت؟ يعني بيايم اين رشته ها رو تيكه تيكه به هم بچسبونيم؟؟
    اين روش خيلي خيلي اشتباه هستش به چند دليل:

    1. خوانايي كد بسيار پايين مياد
    2. امكان اشتباه نوشتن و خطاي ديد بسيار بالا ميره
    3. خطايابي يا اشكالزدايي دستور خيلي سخت ميشه
    4. استاندارد نيست

    چي كار بايد كرد؟ درستش اينه كه از خود Syntax دستور SQL استفاده كنيم. يعني بنويسيم:

    Insert Into tblTest (Field1,Field2) Values (@Field1,@Field2)
    ...
    More SQL Command's....
    در دستور SQL علامت @ يا آقا دورت بگردم مياد يه متغير ايجاد مي كنه. حالا ما بايد اين Syntax دستورات SQL رو در Visual Studio پياده سازي كنيم. چي جوري؟ اينجا مساله هستش كه چي جوري ميشه يه زبان ديگه رو با يه زبان ديگه ادغام كرد؟ ADODB اين امكان رو به ما مي ده كه اين متغيرهاي به جا مانده از دستورات SQL رو به صورت Parameters از VB6 به SQL پاس بديم.
    در كل به 3 روش (شايد بيشتر) ميشه اين parameters ها رو مقداردهي كرد.

    نكته اي كه شايد باعث بشه اين پست كمي گمراه كننده به نظر بياد اين هستش كه اشيا ADODB خيلي از خاصيت هاشون با هم مشترك هستش يعني با هم هيچ فرقي نمي كنن براي همين برنامه هاي پايگاه داده رو ميشه به چندين چند روش نوشت. ما بايد از تمامي امكانات برنامه نويسي استفاده كنيم.
    آخرین ویرایش به وسیله اوبالیت به بو : پنج شنبه 24 بهمن 1387 در 18:57 عصر

  4. #4

    Lightbulb ايجاد Parameters - روش اول {استفاده از ADODB.Command}

    روش اول - استفاده از ADODB.Command:
    شي ADODB.Command كه ما ازش يه متغير به اسم Cmd ساختيم يك خاصيت داره به اسم Parameters. اين خاصيت به اين صورت استفاده ميشه:

    Cmd.CommandText = "Insert Into tblTest (Field1)Values(@Field1)"
    Cmd.Parameters.Refresh
    Cmd.Parameters.Item(0).Value = ValueMember...

    دستور SQL كه واضح هست چي كار مي كنه.
    @Field1: همون متغيري هستش كه قراره مقدارش درون ستون يا فيلد Field1 در جدول tblTest بانك اطلاعاتي ريخته بشه.
    اما اون صفر سبز رنگ كه زيرش خط كشيده شده چيه؟ اگر دقت كرده باشيد من فقط و فقط يك متغير بيشتر ندارم. من تويه دستورات SQL مي تونم چندين و چند متغير داشته باشم (فكر كنم تا 255 تا) كه اينها همشون يه انديس دارن كه از صفر شروع ميشه. فكر كنم كه تا آخرش رو با اين توضيح متوجه شدين. براي اينكه متغيرها مقدار دهي بشن بايد با انديس هاشون جداگانه مقداردهي بشن. يعني:

    Cmd.CommandText = "Insert Into tblTest (Field1,Field2,Field3)Values(@Field1,@Field2,@Fiel d3)"
    Cmd.Parameters.Refresh
    Cmd.Parameters.Item(0).Value = ValueMember...
    Cmd.Parameters.Item(1).Value = ValueMember...
    Cmd.Parameters.Item(2).Value = ValueMember...

    به همين راحتي. حالا با Execute كردن Command مي تونيد Recordset رو پر كنيد.
    آخرین ویرایش به وسیله vbhamed : پنج شنبه 28 اردیبهشت 1396 در 09:23 صبح

برچسب های این تاپیک

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •