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

نام تاپیک: طریقه برخورد با Connection در ADO

  1. #1

    طریقه برخورد با Connection در ADO

    درست اینه که هیچ وقت هیچ کانکشنی رو باز نگه نداشت و هر زمان که لازم داشتید همون زمان Connection رو باز کنید و همون زمان هم ببندید شاید بگید این روش کند میشه ولی در اصل اینطور نیست و OLEDB یا ODBC از تکنیکی استفاده می کنند به نام Connection Pooling که این کاهش سرعت رو جبران میکنه. هر زمان نیاز به یک Recordset یا انجام یک دستور SQL داشتید میتونید مثل روش زیر اونو بگیرید


    Option Explicit
    Private connectionString As String

    Public Function GetRecordSet(ByRef rsResult As ADODB.Recordset, ByVal CommandText As String) As Long
    '

    Dim cn As ADODB.Connection

    Set cn = New ADODB.Connection
    With cn
    .connectionString = connectionString
    .CursorLocation = adUseClient
    .Open
    End With

    If rsResult Is Nothing Then rsResult = New ADODB.Recordset
    If rsResult.State = adStateOpen Then rsResult.Close

    rsResult.Open CommandText, cn
    If Not (rsResult.EOF Or rsResult.BOF) Then
    GetRecordSet = rsResult.RecordCount
    End If

    'Unmark this line if you don't need connected recordsets
    'rsResult.ActiveConnection = Nothing

    cn.Close
    Set cn = Nothing
    '
    End Function

    Public Function ExecuteSQL(ByVal CommandText As String) As Long
    '

    Dim cn As ADODB.Connection
    Dim lngTemp As Long

    Set cn = New ADODB.Connection
    With cn
    .connectionString = connectionString
    .CursorLocation = adUseClient
    .Open
    End With

    Call cn.Execute(CommandText, lngTemp)
    ExecuteSQL = lngTemp

    cn.Close
    Set cn = Nothing
    '
    End Function

  2. #2
    کاربر دائمی آواتار کم حوصله
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    ایران - مشهد
    پست
    962
    سلام
    استاد عزیز آقای اذیش با عرض معذرت من چند تا مشکل با زیربرنامه های شما داشتم که اگر حمل بر جسارت نباشد عرض می کنم
    1 در خط 8 برنامه شما چنین نوشتید

    If rsResult Is Nothing Then rsResult = New ADODB.Recordset

    که چنین خطایی می دهد

    invalid use of the property

    که فکر می کنم علتش نداشتن کلمه set باشد

    If rsResult Is Nothing Then Set rsResult = New ADODB.Recordset

    2 زمانی که من می خواهم رکوردست بازشده توسط این زیربرنامه را بخوانم چنین پیغامی می دهد

    operation is not allowed when the object is closed

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

    cn.Close
    Set cn = Nothing

    که فکر می کنم منطقی نباشد
    3 زیر برنامه دوم شما را اصلا متوجه نشدم چه کار می کند اگر ممکن است مختصر توضیحی بدهید
    4 علت استفاده از این خط را هم نفهمیدم

    If Not (rsResult.EOF Or rsResult.BOF) Then
    GetRecordSet = rsResult.RecordCount
    End If

    و نهایتا چرا شما از function استفاده کرده و مقدار long را برمیگردانید مگر از تابع sub نمی شود استفاده کرد
    در ضمن واقعا من را ببخشید چون خیلی کند ذهنم و اصلا نمی فهمم که چه جوری می شود و گرنه مزاحم شما نمی شدم :(
    مرسی و متشکرم :oops:

  3. #3
    دوست عزیز از چند باگ کوچیکی که داخل کدها بود عذر خواهی میکنم و از کد زیر استفاده کنید. من از Function استفاده میکنم و تعداد رکورد برگشتی توسط کانکشن رو برمیگردونم تا نیاز نباشه تو برنامه چک کنیم که آیا رکوردی وجود داره یا نه. یک مثال پائین زدم که موضوع رو مشخص میکنه


    Option Explicit
    Private connectionString As String

    Public Function GetRecordSet(ByRef rsResult As ADODB.Recordset, ByVal CommandText As String) As Long
    '

    Dim cn As ADODB.Connection

    Set cn = New ADODB.Connection
    With cn
    .connectionString = connectionString
    .CursorLocation = adUseClient
    .Open
    End With

    If rsResult Is Nothing Then Set rsResult = New ADODB.Recordset
    If rsResult.State = adStateOpen Then rsResult.Close

    rsResult.Open CommandText, cn
    If Not (rsResult.EOF Or rsResult.BOF) Then
    GetRecordSet = rsResult.RecordCount
    End If

    rsResult.ActiveConnection = Nothing

    cn.Close
    Set cn = Nothing
    '
    End Function

    Public Function ExecuteSQL(ByVal CommandText As String) As Long
    '

    Dim cn As ADODB.Connection
    Dim rsTemp As ADODB.Recordset

    Set cn = New ADODB.Connection
    With cn
    .connectionString = connectionString
    .CursorLocation = adUseClient
    .Open
    End With

    Set rsTemp = cn.Execute(CommandText)

    If Not (rsTemp.EOF Or rsTemp.BOF) Then
    ExecuteSQL = rsTemp.RecordCount
    End If

    cn.Close
    Set cn = Nothing
    '
    End Function

    Sub main()
    '
    connectionString = "your connection string here"
    Form1.Show
    '
    End Sub


    Option Explicit

    Private Sub Form_Load()
    '

    Dim rsTemp As ADODB.Recordset


    If GetRecordSet(rsTemp, "select * from tblTest") Then
    MsgBox rsTemp.Fields(0)
    End If

    If ExecuteSQL("Update tblTest Set FName = 'something'") Then MsgBox "test"
    '
    End Sub



  4. #4
    کاربر دائمی آواتار کم حوصله
    تاریخ عضویت
    مرداد 1382
    محل زندگی
    ایران - مشهد
    پست
    962
    سلام
    دوست عزیز آقای آذیش
    مشکلات خطا دهی برنامه حل شد ولی حالا دوتا مشکل دیگه دارم اگر جسارت نباشه
    1 زمانی که رکوردستی با این حالت باز بشه دیگر امکان ویرایشی نداره یعنی نمیشه اضافه و یا حذف کرد ولی عملا در دیتابیس هیچ اتفاقی نمی افتد یعنی رکوردست ما ارتباطش را با دیتابیس از دست میدهد خوب این خیلی بده چون من می خواهم عملیات ویرایشی روی اطلاعاتم انجام بشه
    2 این فانکشن ExecuteSQL کارش چیه میشه مختصر توضیحی بدین
    با تشکر :oops:

  5. #5
    کلآ دو نوع Recordset وجود داره 1. Connected یا متصل به دیتابیس 2. Disconnected یا بدون اتصال به دیتابیس. Recordset های Connected توصیه نمیشن چراکه همیشه باید Connection رو برای اونا باز نگه داشت و زمانی که تعداد کاربرها بالا میره میتونه مشکل ساز باشه. بهتر همیشه طوری برنامه نویسی دیتابیس کنید که نیازی به این نوع Recordset نداشته باشید. بهر حال اگر نیاز به این نوع Recordset دارید خط های زیر رو حذف کنید


    rsResult.ActiveConnection = Nothing

    cn.Close
    Set cn = Nothing


    گاهی اوقات هست شما فقط نیاز دارید یک دستور SQL رو اجرا کنید و نیازی به یک Recordset ندارید مثل دستور های Update, Delete یا Insert برای این منظورها از ExecuteSQL استفاده کنید.

تاپیک های مشابه

  1. مشکل در connection
    نوشته شده توسط adhami در بخش ASP.NET Web Forms
    پاسخ: 4
    آخرین پست: سه شنبه 04 اردیبهشت 1386, 10:30 صبح
  2. is connection?
    نوشته شده توسط benyamin_pc در بخش C#‎‎
    پاسخ: 3
    آخرین پست: پنج شنبه 14 دی 1385, 04:24 صبح
  3. مشکل باقی ماندن connection پس از بستن
    نوشته شده توسط leily2000 در بخش MySQL
    پاسخ: 3
    آخرین پست: سه شنبه 28 آذر 1385, 09:24 صبح
  4. بهترین نوع Connection
    نوشته شده توسط m1975b در بخش مطالب مرتبط با بانکهای اطلاعاتی در VB6
    پاسخ: 4
    آخرین پست: پنج شنبه 04 اسفند 1384, 19:30 عصر
  5. DSN connection
    نوشته شده توسط saeedkhan در بخش Classic ASP
    پاسخ: 2
    آخرین پست: یک شنبه 11 اردیبهشت 1384, 14:53 عصر

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

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