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

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

  1. #1

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

    سلام خدمت دوستان عزيز تالار VB
    راستش هدف از احداث اين تايپيك آموزش برنامه نويسي پايگاه داده هستش. شايد براي بعضي از دوستان برنامه نويسي پايگاه داده در VB6 مشكل دارن.
    اين تايپيك با حمايت و كمك دوستان بايد راه اندازي بشه تا هم سوالات تكراري از بين برن و هم مطلب جديدي رو ياد گرفته باشيم.

    مطالبي كه دربارش اين دوستان خواستن راجبش صحبت بشه اينها هستن:

    • كار با ADODB از ابتدا تا انتها با obalitjoOon
    • كار با Crystal Report و چاپ با mpmsoft
    • ايجاد يك Setup براي برنامه با vbhamed
    • بازي با Interface با ؟؟؟
    • امنيت برنامه با ???
    • گسترش برنامه با ؟؟؟؟
    من خودم در ابتدا به عنوان نمونه چند مثال رو با توضيح براي دوستاني كه مشكل دارن پست مي كنم تا به اميد خدا بقيه دوستان با نحوه كار آشنا بشن و اونها هم در اين تايپيك شركت كنن.

    اين تايپيك براي همه كاربران تالار VB هستش پس مثل هميشه مي گم "اميدوارم تنهاش نذارين"

    جا داره از دوستان عزيز mpmsoft و vbhamed كه در ادامه كار اين تايپيك اعلام همكاري كردند تشكر كنم. همچنين از مدير محترم تالار جنابmbt925كه اجازه فعاليت در اين تالار رو مي دهند تشكر مي كنم.
    آخرین ویرایش به وسیله اوبالیت به بو : دوشنبه 19 مرداد 1388 در 12:39 عصر دلیل: ايندكس

  2. #2

    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 در 13:55 عصر

  3. #3

    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 در 17:43 عصر دلیل: ويرايش عنوان

  4. #4

    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 در 17:57 عصر

  5. #5

    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 در 08:23 صبح

  6. #6

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

    روش دوم - استفاده از ADODB.Command:


    با استفاده از شي ADODB.Command مي شه به روش ديگه اي يه Parameters رو به دستور SQL پاس داد:

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

    در اين روش بعد از متد Cmd.Parameters بايد نام Parameters مورد نظر رو به صورت رشته اي بنويسيم و با خاصيت Value مقدار دهي كنيم. در واقع نحوه استفاده از دستور به اين صورت هستش:

    Cmd.parameters ("ParametersName").Value = Value

    كد واضح هستش فكر نمي كنم توضيح اضافه ديگه اي رو بخواد.

    Cmd.CommandText = "Insert Into tblTest (Field1,Field2)Values(@Field1,@Field2)"
    Cmd.Parameters.Refresh
    Cmd.Parameters("@Field1").Value = ValueMember...
    Cmd.Parameters("@Field2").Value = ValueMember...
    .
    .
    .
    آخرین ویرایش به وسیله vbhamed : پنج شنبه 28 اردیبهشت 1396 در 08:26 صبح

  7. #7

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

    روش سوم- استفاده از ADODB.parameter:
    اين روش درواقع يه جورهايي به دو روش قبلي مربوط ميشه يعني ADODB.Command اما به
    طور غير مستقيم. يكم اين روش نياز به دقت داره وگرنه سخت نيست. اول بايد ببينيم كه دستور SQL مورد نظر ما چند تا Parameters نياز داره و به همون تعداد متغير از نوع ADODB.Parameter تعريف مي كنيم. به عنوان مثال من مي خوام يك دستور Update رو بنويسم و اين دستور من حداقل دو تا parameters نياز داره:

    Public Parameters1 As ADODB.Parameter
    Public Parameters2 As ADODB.Parameter
    حالا دستور مورد نظر رو مي نويسيم. مثلاً:

    Cmd.CommandType = adCmdText
    Cmd.CommandText = "Update tblTest SET Field1=@Field1 WHERE Field2=@Field2"
    حالا بايد parameters رو به متغيرمون Set كنيم:

    Set Parameters1 = Cmd.CreateParameter("@Field1", adInteger, adParamInput)
    Set Parameters2 = Cmd.CreateParameter("@Field2", adInteger, adParamInput)
    حالا دوباره بر مي گرديم سراغ ADODB.Command و از خاصيت Parameters اون دوباره استفاده مي كنيم با اين تفوت كه از متد Append اون استفاده مي كنيم:

    Cmd.Parameters.Append Parameters1
    Cmd.Parameters.Append Parameters2
    مقداردهي Parameters هاي ساخته شده:
    اما حالا نوبت به مقدار دهي Parameters ميشه. از تابع Array كه همه باهاش آشنايي دارن استفاده كنيم.



    Set Rst = Cmd.Execute(, Array(Value1, Value2))
    به طور مستقيم اينجا مقادير رو وارد Cmd.Execute مي كنيم. درواقع شكل كلي دستور به اين صورت هستش:

    Cmd.Execute (RecordAffected,Parameters,Option As Long=-1)
    كه هر سه آرگومان اختياري هستن.

    Cmd.CommandType = adCmdText
    Cmd.CommandText = "Update tblTest SET Field1=@Field1 WHERE Field2=@Field2"


    Set Parameters1 = Cmd.CreateParameter("@Age", adInteger, adParamInput)
    Cmd.Parameters.Append Parameters1
    Set Parameters2 = Cmd.CreateParameter("@Code", adInteger, adParamInput)
    Cmd.Parameters.Append Parameters2
    .
    .
    .
    Set Rst = Cmd.Execute(, Array(Value1, Value2))
    آخرین ویرایش به وسیله vbhamed : پنج شنبه 28 اردیبهشت 1396 در 08:29 صبح

  8. #8

    Lightbulb ايجاد اشيا نمونه در حافظه

    كلمه كليدي New اين عمل رو انجام مي ده. اين كلمه كليدي كه واقعاً خيلي كليدي هستش يك از متغير در حافظه يك شي مي سازه كه در ابتدا همه مقاديرش با Null مقداردهي ميشه. اگر ما ليست متغيرهامون اينها باشن:

    Public Conn As ADODB.Connection
    Public Cmd As ADODB.Command
    Public Rst As ADODB.Recordset
    public Param as ADODB.Parameter



    و براي ايجاد شي نمونه اونها رو Set مي كتيم:

    Set Conn = New ADODB.Connection
    Set Cmd = New ADODB.Command
    Set Rst = New ADODB.Recordset
    Set Param = New ADODB.Parameter

  9. #9

    Lightbulb شي Recordset

    اين شي بهترين نوع در بين اشيا VB6 براي كار با مجموعه ركورد يا در اصطلاح Recordset هستش. متدهاي نسبتاً قوي تر و كاملتري نسبت به اشيا ديگه داره. مثلاً شما مي تونيد يك ركورد رو جوري فراخواني كنيد كه به صورت فقط خواندني باشه يا در اصطلاح مي گن به صورت قفل ركورد كار كنيد.
    با متد هاي شي RecordSet مي تونيد در اين پست و در اين پست آشنا بشيد اما يك شكل كلي از اين دستور رو مي نويسم و يه توضيح كوچكي راجبشون مي دم:

    Dim Rst As ADODB.Recordset
    Set Rst = New ADODB.Recordset
    .
    .
    .
    Rst.Open strQuery, ActiveConnection, CursorType, LockType, Optimize
    اگر يادتون باشه در اين پست تمام آرگومان هاي متد Conn.Open به صورت جدا جدا توضيح داده شد. عرض كردم كه روش هاي مختلفي براي نوشتن برنامه هاي پايگاه داده وجود داره. شما مي تونيد تمام اين مشخصه ها رو در يك خط مقداردهي كنيد يا اينكه به صورت جدا جدا dddمقداردهي كنيد دركل فرقي نمي كنه.
    خاصيت strQuery:
    دستور SQL مورد نظرتون رو به صورت رشته در اين قسمت مي نويسيد. مثلاً:

    Dim strQuery As String
    strQuery = "Select * From tblTest"
    Rst.Open strQuery,...
    يا اينكه اينجوري بنويسيد:

    Rst.Open "Select * From tblTest",...
    در كل زياد فرقي نمي كنه.
    خاصيت ActiveConnection:
    بعد از اينكه دستور SQL خودتون رو مشخص كردين حالا بايد مسير منبع داده رو هم به Recordset بديم تا بدونه كه از كجا بايد اين درخواست رو اجرا كنه. خوب مي تونيد بر اساس همون متغير Conn كه قبلاً ايجاد كرديم اين خاصيت رو مقدار دهي كنيم. مثلاً:

    Rst.Open strQuery, Conn, ...
    يا اينكه:

    Set Rst.ActiveConnection = Conn
    تقريباً دستور انتساب اين خاصيت مشابه Command هستش.
    خاصيت CursorType:
    اين خاصيت اختياري هستش و مقاديري كه به صورت ثابت هاي VB6 مي پذيره اينها هستن:
    adOpenForwardOnly: شي Recordset به صورت روبهجلو و فقط خواندني باز مي شه.
    adOpenDynamic : شي Recordset به صورت دايناميك باز مي شود.
    adOpenKeyset: نمي دونم...!!!!!!
    adOpenStatic: شي Recordset به صورت ايستا باز مي شود.
    مي تونيد اين مقادير رو وقتي اين خطوط رو مي نويسيد ببينيد:

    Rst.Open ...,..., CursorTypeValues,...
    OR
    Rst.CursorType = CursorTypeValues
    اما براي استفاده از اين سرويس ها بايد يه سري نكاتي رو بهش توجه كنيم. قبل از اينكه بخوايم مشخص كنيم كه يك Recordset چي جوري باز بشه بايد اول نشانه گذاري سمت سرور و سمت كلاينت رو مشخص كنيم. علت بسياري از خطاهايي كه در هنگام باز كردن Recordset رخ مي ده همين توجه نكردن به اين موضوع هستش. مثلاً شخصي كدي رو نوشته ظاهر كد درست هستش و هرچقدر كه دنبال خطي كه توش خطا داشته باشه مي گردي پيدا نمي كني اما بعداً متوجه ميشي كه خطا از مقداردهي يك خاصيت پدر صورت گرفته.
    خاصيت CursorLocation:
    براي تكميل توضيح فوق بايد نشانه گذاري رو مشخص كنيم. دقيقاً اين خاصيت مانند شي Connection هستش:

    Server:
    Rst.CursorLocation = adUseServer


    Client:
    Rst.CursorLocation = adUseClient
    خاصيت LockType:
    اين خاصيت درواقع يه حاشيه امنيت در هنگام كار با داده براي ما فراهم مي كنه. مثلاً وقتي كه درحال Update يك ركورد هستيم ركورد رو قفل مي كنه و ... من زياد باهاش كار نكردم براي همين نمي تونم توضيحي راجب اين خاصيت بدم فقط در اين حد مي دونم كه وقتي مي خوام ركوردهام رو فقط نمايش بدم(مثلاً در يك Grid) از مقدار adLockReadOnly استفاده كنم و اگر بخوام داده هام رو به روزرساني كنم از خاصيت adLockOptimistic استفاده كنم:

    Rst.LockType = adLockReadOnly
    Rst.LockType = adLockOptimistic
    more...
    يا:

    Rst.Open ...,...,...,adLockReadOnly,...
    Rst.Open ...,...,...,adLockOptimistic,...
    more...
    خاصيت Optimize:
    متاسفانه نمي دونم چي هستش.
    آخرین ویرایش به وسیله vbhamed : پنج شنبه 28 اردیبهشت 1396 در 08:48 صبح

  10. #10

    Lightbulb بازيابي اطلاعات از منابع - با استفاده از Connection

    براي بازيابي اطلاعات يك جدول از پايگاه داده ميشه از خود شي Connection استفاده كرد. شي Connection يك متدي رو در اختيار ما قرار مي ده به اسم Execute كه از اسمش پيداست يعني اجرا كن. اين متد از ما يك دستوري رو براي بازيابي اطلاعات مي خواد كه مي شه از Store Procedure ها هم در اينجا استفاده كرد.
    با اين دستور هم ميشه از Recordset استفاده كرد هم استفاده نكرد. همون طور كه مي دونيد Recordset يك حافظه Forward Only هستش يعني روبه جلو كه در خودش يك مجموعه ركورد رو ذخيره مي كنه.
    شكل كلي كار به اين صورت هستش:

    Set Rst = Conn.Execute (SQLStatment, Recordaffected, Option)

    Recordaffected يك آرگومان اختياري هستش كه فكر مي كنم اكثر شما وقتي در داخل نرم افزار بانك اطلاعاتي كه باهاش يك Query اجرا مي كنيد (Access, SQL Server,...) ديده باشيد كه تعداد ركوردهاي درگير شده از اون دستور SQL رو به شما مي ده.
    آرگومان Option مشخص مي كنه كه شما چگونه مي خواين اطلاعات رو بازيابي كنيد. درواقع همون CommandType در شي Command هستش با كمي تغييرات.

    و اگر از Recordset هم استفاده نكرديد هيچ ايرادي نداره:

    Conn.Execute SQLStatment, Recordaffected, Option


    يك مثال:

    Public Sub LoadAll_1()
    Set Conn = New ADODB.Connection
    Set Rst = New ADODB.Recordset

    Conn.Provider = "Microsoft.JET.OLEDB.4.0"
    Conn.ConnectionString = App.Path + "\Data Base\Test.mdb"
    Conn.CursorLocation = adUseClient
    Conn.Open

    SQLQuery = "Select * From tblTest"
    Set Rst = Conn.Execute(SQLQuery, , adCmdText)

    Set frmMain.DataGrid1.DataSource = Rst
    frmMain.DataGrid1.Refresh
    End Sub

  11. #11

    Lightbulb بازيابي اطلاعات از منابع - با استفاده از Command

    شي Command كارش اجرا كردن فرامين SQL يا اجرا كردن روال هاي ذخيره شده (S.P) هستش. در كل براي انجام هر كاري استفاده از اين روش توصيه ميشه چون

    1. بر اساس يك الگوريتم كار مي كنه
    2. منظم هستش
    3. خواناي بالايي داره

    با شي Command در پست هاي قبلي آشنا شديم و توضيح اضافه اي رو نمي دم.
    مثال:

    Public Sub LoadAll_2()
    Set Conn = New ADODB.Connection
    Set Cmd = New ADODB.Command
    Set Rst = New ADODB.Recordset

    Conn.Provider = "Microsoft.JET.OLEDB.4.0"
    Conn.ConnectionString = App.Path + "\Data Base\Test.mdb"
    Conn.CursorLocation = adUseClient
    Conn.Open

    SQLQuery = "Select * From tblTest"

    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = SQLQuery

    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    Set Rst = Cmd.Execute

    Set frmMain.DataGrid1.DataSource = Rst
    frmMain.DataGrid1.Refresh


  12. #12

    بازيابي اطلاعات از منابع - با استفاده از Recordset

    بعضي ها هم دوست دارن كه مستقيم Recordset خودشون رو Open كنن و اونجوري اطلاعات رو بازيابي كنن:

    Public Sub LoadAll_3()
    Set Conn = New ADODB.Connection
    Set Rst = New ADODB.Recordset

    Conn.Provider = "Microsoft.JET.OLEDB.4.0"
    Conn.ConnectionString = App.Path + "\Data Base\Test.mdb"
    Conn.CursorLocation = adUseClient
    Conn.Open

    SQLQuery = "Select * From tblTest"

    Rst.ActiveConnection = Conn
    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    Rst.Open SQLQuery

    Set frmMain.DataGrid1.DataSource = Rst
    frmMain.DataGrid1.Refresh
    End Sub


  13. #13

    Lightbulb متد Connect

    حال براي اينكه از نوشتن كد هاي اضافي پرهيز كنم ميام يك روال به اسم Connect مي سازم كه كارش اتصال و باز كردن بانك اطلاعاتي هستش و در هر جا كه خواستم ازش استفاده مي كنم:

    Public Conn As ADODB.Connection
    .
    .
    .
    Public Sub Connect()
    Set Conn = New ADODB.Connection

    Conn.Provider = "Microsoft.JET.OLEDB.4.0"
    Conn.ConnectionString = App.Path + "\Data Base\Test.mdb"
    Conn.CursorLocation = adUseClient
    Conn.Open
    End Sub

  14. #14

    Lightbulb متد LoadAll

    در اين پست و اين پست و اين پست با نحوه بازيابي اطلاعات يك جدول آشنا شديم. هر سه روش يك كار رو انجام مي دن اما من از روش دوم يعني استفاده از Command رو پيشنهاد مي كنم. عرض كردم كه هيچ فرقي نمي كنه شما مي تونيد يك برنامه پايگاه داده رو به روش ها و شكل هاي مختلفي بنويسيد.
    متد LoadAll من به اين شكل خواهد بود:

    Public Sub LoadAll()
    Set Cmd = New ADODB.Command
    Set Rst = New ADODB.Recordset

    Connect

    SQLQuery = "Select * From tblTest"

    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = SQLQuery

    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    Set Rst = Cmd.Execute

    Set frmMain.DataGrid1.DataSource = Rst
    frmMain.DataGrid1.Refresh
    End Sub

    من از اين روش براي درج، حذف و ويرايش نيز استفاده خواهم كرد.

  15. #15

    Lightbulb متد Insert

    اين متد كارش درج كردن يك ركورد در يك جدول هستش. همچنين براي ارسال Parameters از اين روش استفاده شده:

    Public Sub Insert(ByRef َArgum...)
    Set Cmd = New ADODB.Command
    Set Rst = New ADODB.Recordset

    Connect

    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = "Insert Into tblTest (Field1)Values(@Field1)"
    Cmd.Parameters.Refresh
    Cmd.Parameters.Item(0).Value = Argum...

    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    Set Rst = Cmd.Execute
    End Sub


  16. #16

    Lightbulb متد Update

    اين روال كارش ويرايش كردن يك ركورد هستش. براي ارسال Parameters از اين روش استفاده شده:

    Public Sub Update(ByRef strArgum As String, ByRef NumericField As Integer,....)
    Set Cmd = New ADODB.Command
    Set Rst1 = New ADODB.Recordset
    Set Rst2 = New ADODB.Recordset

    Connect

    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = "Update tblTest SET Field1=@Field1 WHERE NumericField=@NumericField"

    Set Parameters1 = Cmd.CreateParameter("@Field1", adInteger, adParamInput)
    Cmd.Parameters.Append Parameters1
    Set Parameters2 = Cmd.CreateParameter("@NumericField", adInteger, adParamInput)
    Cmd.Parameters.Append Parameters2


    Set Rst = Cmd.Execute(, Array(strArgum, NumericField))
    End Sub


  17. #17

    Lightbulb متد Delete

    كار اين روال حذف يك ركورد هستش. براي ارسال Parameters از اين روش استفاده كردم:

    Public Sub Delete(ByRef NumericValue As Integer, and more....)
    Set Cmd = New ADODB.Command
    Set Rst = New ADODB.Recordset
    Set Param = New ADODB.Parameter

    Connect

    Cmd.ActiveConnection = Conn
    Cmd.CommandType = adCmdText
    Cmd.CommandText = "Delete From tblTest WHERE NumericField=@NumericField"
    Cmd.Parameters.Refresh
    Cmd.Parameters("@NumericField").Value = NumericValue

    Rst.CursorType = adOpenKeyset
    Rst.CursorLocation = adUseClient
    Set Rst = Cmd.Execute
    End Sub


  18. #18

    Arrow پروژه شماره 1

    تمامي مطالبي كه تا كنون آموزش داده شد در اين برنامه گنجانده شده.

    • از هر سه روش براي ارسال Parameters استفاده شده
    • هر پنج متد آموزش داده شده در اين پروژه وجود دارند
    • اتمام اشيا Connection، Command، Recordset و parameters در اين پروژه استفاده شده
    • و...
    فایل های ضمیمه فایل های ضمیمه
    • نوع فایل: rar prj.rar‏ (16.1 کیلوبایت, 2402 دیدار)

  19. #19

    چرا کریستال ریپورت ؟

    خوب دوستان خیلی سریع شروع به کار می کنیم من خیلی خوشحال هستم از بابت این که می تونم اطلاعات و تجربیات کاری خودم رو در زمینه کریستال در اختیار جامعه برنامه نویسان ایرانی به اشتراک بذارم.

    من سعی می کنم که این درسهارو خیلی مختصر ولی در عین حال کاربردی توضیح بدم.دوستان اگر سوالی داشتن می تونن مطرح کنند و بنده پاسخ می دم.


    خوب دوستان بنده طی تجربیاتی که با انواع نرم افزار های گزارش ساز همچون DataReport - Crystal Report - Active Report - Fast Report و ... داشته ام به این نتیجه رسیدم که کریستال نسخه 10 جهت طراحی گزارشات بهترین آیتم برای وی بی 6 هست. البته نرم افزار های دیگر هم قابلتهای بسیار خوبی دارند ولی در کل سرعت عمل و منابع موجود جهت کریستال بسیار بیشتر از سایر نرم افزارهاست و از طرفی مورد تایید شرکت ماکروسافت هم هست.

  20. #20

    درس 1 - طراحی اولین گزارش بصورت ساده

    خوب دوستان ابتدا برنامه کریستال ریپورت 10 رو اجرا کنید.

    و سپس گزینه New را جهت ایجاد گزارش جدید انتخاب کنید

    در پنجره بعدی جهت درک بیشتر مطالب ساخت گزارش گزینه As a Blank report را انتخاب کنید

    در این پنجره باید پایگاه اطلاعاتی رو به کریستال معرفی کنیم.

    خوب دوستان کریستال تقریبا می تونه به تمامی بانکهای اطلاعاتی با پروتوکل های مختلف وصل بشه.

    بنده هم نحوه اتصال به بانک Access و هم نحوه اتصال به بانک SQL Server را توضیح خواهم داد

    به تصویر زیر دقت کنید....

    جهت ایجاد ارتباط با بانک گزینه Create New Connection را انتخاب کرده و سپس گزینه OLE DB ADO را انتخاب کنید.

    در شکل زیر جهت ارتباط با بانک Access گزینه Microsoft Jet OLE DB 4.0 Provider و جهت ارتباط با بانک SQL Server گزینه Microsoft OLE DB Provider For SQL Server را انتخاب می کنیم.


    در مثالهای این دروس بنده از بانک SQL Server استفاده کردم.

    در پنجره زیر تنظیمات مربوط به ارتباط با بانک اطلاعاتی را مشخص می کنیم.

    نکته
    دوستان به این نکته دقت کنید که در این قسمت ما فقط زمان طراحی گزارش این ارتباط را برقرار می کنیم و زمانی که نرم افزار رو روی سیستم دیگری نصب می کنید این ارتباط از طریق برنامه مجدد توسط کد نویسی انجام می شه.پس نگران این نباشید که اگر برنامه رو جایی کپی کنید دوباره باید این تنظیمات رو دستی عوض کنید !!!
    آخرین ویرایش به وسیله mpmsoft : دوشنبه 14 اردیبهشت 1388 در 22:48 عصر

  21. #21

    نقل قول: پايگاه داده در ويژوال بيسيك - شروع تا پايان

    ممنون که آموزش رو برای کریستال شروع کردید.
    اگه ممکنه قبل از شروع مباحث مبتنی بر SQl Server ، یه راهنمای مختصر برای راه اندازی SQL Server همراه با نسخه مناسب برای ویندوز XP معرفی کنید.
    با تشکر

  22. #22
    دوستان در این قسمت من هم تعداد زیادی نمونه سورس کار با بانک اطلاعاتی معرفی کردم

    https://barnamenevis.org/showthread.php?t=37168&page=16
    آخرین ویرایش به وسیله vbhamed : پنج شنبه 05 تیر 1393 در 06:02 صبح

  23. #23
    کاربر تازه وارد آواتار rasoul babadi
    تاریخ عضویت
    فروردین 1392
    محل زندگی
    تهران
    پست
    30

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

    درود بر همه دوستان خوبم. من دارم یه برنامه با اکسس 2010 و ویژوال بیسیک 6 می نویسم بانکم رو ساختم برنامه رو هم تا حدودی طراحی کردم. می خواستم صاحب نظران عزیز بانک من رو با خواسته هام مورد ارزیابی قرار بدن ببینم درست هست یا نه
    1- من قصد دارم با وارد کردن مشخصات فرم لاگین نام کاربری و وضعیت کاربر مثلا مدیر یا کاربر است در فرم اصلی نمایش داده شود. ماننده تصویر زیر
    2- قصد دارم یک سند رو توی صندق خودم ذخیره کنم و توی فرم اصلی جمع برداشت از صندوق و جمع واریزی یا دریافت های صندوق و همچنین موجودی واقعی صندوق رو نمایش بده
    3- توی فرم سند اگر کمبو باکس دریافت رو انتخاب کرد به موجودی اضافه شود و اگر برداشت رو انتخاب کرد از موجودی کم شود.
    4 - اگر بانک نیاز به اصلاح داره من رو همراهی کنید با سپاس بیکران
    تصویر زیر شامل جداول بانک است
    ضمیمه 125810
    تصویر زیر فرم اصلی و فرم سند.
    ضمیمه 125811

  24. #24

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

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

  25. #25

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

    سلام به دوستان و اساتید گرامی
    بنده قصد اخذ گزارش به کریستال ریپورت رو در vb6 برای اولین بار دارم که پس از تعریف بانک اطلاعات و ایجاد فرم گزارش پیغام "server dad not yet been opened " صادر میشه لطفا در صورت امکان راهنمایی فرمایید.

  26. #26

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

    سلام دوست عزیز ممنون از تایپیک خوبتون
    یه سوال ؟؟؟ من میخوام یه نرم افزار طراحی کنم که به دیتا بیس سایت متصل بشه و اطلاعات وارد کنم یا اطلاعات رو ویرایش کنم و تو اون جدول ها جستجو کنم ولی نمی تونم چجوری به دیتا بیس سایت وصل بشم خواهش میکنم جواب بدین خیلی واجبه

  27. #27
    کاربر تازه وارد آواتار A.ardalan far
    تاریخ عضویت
    دی 1391
    محل زندگی
    Kerman
    پست
    54

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

    دوستان این روش ها برای دیتابیس mysql هم کاربرد دارد یا فقط برای sql serevr هست؟

  28. #28

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

    سلام منم مانند دوستانی که بالا گفتن می خوام از پایگاه داده تو سایتم استفاده کنم. چیکار باید بکنم.
    یه پروژه نوشتم و الان می خوان این امکان رو تو دستور کار قرار بدن که فرد برای گرفتن نوبت تو تاریخ معیین از سایت استفاده کنه و نوبت بگیره . راهی هست که بتونم برنامه خودم رو به پایگاه داده توی اینترنت وصل کنم و اون اطلاعات رو بگیرم نمی خوام چیز جدیدی بهش اضافه کنم و یا پایگاه داده سایت رو تغییر بدم .
    اطلاعات مورد نیاز رو از فرد توی سایت بگیره تو پایگاه داده سایت ذخیره کنه . بعد من از طریق برنامه اطلاعات پایگاه داده سایت رو بخونم و اونا رو بریزم تو پایگاه داده برنامم


    اگه کمکم کنین ممنون می شم
    فقط زود و سریع

    مرسی همه دوستان

  29. #29

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

    دوست عزیز فکر کنم شما نیاز به یک هاست ویندوزی دارید که داخل هاست چایگاه داده رو بسازید و از طریق اون این کار رو انجام بدید اینجوری نمیشه که یه بانک خود بسازی و اونو اپلود کنی جایی و به عنوان پایگاه داده انلاین ازش استفاده کنی ....

    توی سایت ها بگردی هاست ویندز که قابلیت اتصال به پایگاه داده اکسس و sql و غیره زیاد هست .. کد نویس هم فرقی با افلاین نداره فقط بجای ادرس بانک ای پی سایتی که بهت میدن رو میزنی و بقیه کار مثل قبلی هست . فقط از لحاظ امنیت باید دقت کنی اطاعات مهمی اگه هست اینکارو نکنی بهتره

  30. #30
    کاربر جدید
    تاریخ عضویت
    آذر 1397
    محل زندگی
    یزد
    پست
    1

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

    سلام
    یه سوال داشتم ممنون میشم کمکم کنین...
    برای ضرب یک عدد در ستونی از داده در ویژوال بیسیک چطوری باید عمل کنم ؟؟

    در واقع در یک Form ، یک textbox وجود دارد که توسط کاربر عدد وارد میشود. و یک ستون داده ای از access داخل ویژوال بیسیک دارم که میخوام عدد داخل textbox در تک تک سطر های این ستون ضرب بشه و حاصل نمایش داده بشه. با چه دستوری میشه اینکارو کرد ؟؟

  31. #31
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    محل زندگی
    بندر عباس
    پست
    11

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

    سلام دوستان من میخواستم از طریق کد نویسی نام یک تیبل رو عوض کنم خیلی ضروریه بانکم اسکیو ال هست ممنون

  32. #32

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

    سلام در ویژوال بیسیک 6 ار قسمت References تیک گزینه Microsoft DAO 3.6 را بزنید
    بعد از طریق کد زیر می توانید نام یک تیبل را تغییر دهید.

      Dim dbSS As Database 
    Dim strDbName As String
    strDbName = "c:\temp\test.mdb"

    Set dbSS = OpenDatabase(strDbName)

    dbSS.CreateTableDef
    dbSS.TableDefs("R2").Name = "Org_R2"

    dbSS.Close
    Set dbSS = Nothing


  33. #33
    کاربر جدید
    تاریخ عضویت
    تیر 1387
    محل زندگی
    بندر عباس
    پست
    11

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

    نقل قول نوشته شده توسط vblink مشاهده تاپیک
    سلام در ویژوال بیسیک 6 ار قسمت References تیک گزینه Microsoft DAO 3.6 را بزنید
    بعد از طریق کد زیر می توانید نام یک تیبل را تغییر دهید.

      Dim dbSS As Database 
    Dim strDbName As String
    strDbName = "c:\temp\test.mdb"

    Set dbSS = OpenDatabase(strDbName)

    dbSS.CreateTableDef
    dbSS.TableDefs("R2").Name = "Org_R2"

    dbSS.Close
    Set dbSS = Nothing

    ممنونم از وقتی که گذاشتید اما این کد فقط در مورد بانک اکسس جواب میده و در واقع نمیتونه نام تیبل اسکیو ال رو عوض کنه

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

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

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