• توجه: در صورتی که از کاربران قدیمی ایران انجمن هستید و امکان ورود به سایت را ندارید، میتوانید با آیدی altin_admin@ در تلگرام تماس حاصل نمایید.

نكات برنامه نويسي Visual Basic

شی ADODC




  • icon3.gif
    nload="NcodeImageResizer.createOn(this);" border="0"> اتصال به شی ADODC
ابتدا کار باADO رو می گم:

برای استفاده از تکنولوژی ADO باید Refrence اون رو به پروژه اضافه کنید. روش:

كد:

Project - Refrence - Microsoft Actixiv Data Object</pre>



نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:

* شی Adodc



كد:

Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DataBaseName.mdb"
Adodc1.CommandType = adCmdTable
Adodc1.RecordSource = "TableName"
Adodc1.Refresh</pre>

ConnectionString: اتصال به انواع مختلف بانک اطلاعاتی هستش. مثل Access - SQL - Oracle - ODBC و...

حالت کلی:



كد:

Provider="Provider Code" ; DataSource = "DataSource"</pre>

Data Source: رشته ای هستش حاوی آدرس بانک اطلاعاتی تویه حافظه جانبی.

CommandType: نوع جستجو در بانک اطلاعاتی رو مشخص می کنه که خاصیت مهمش
adCmdTable هستش که جهت اتصال به جدول هستش. برای جستجوی SQL باید این
مقدار رو با ثابت adCmdText مقدار دهی کنیم.

نمونه کد برای ثابت adCmdText یا جستجو از طریق SQL:



كد:

Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DataBaseName.mdb"
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = "Select * FORM TableName"
Adodc1.Refresh</pre>

DataBaseName: نام بانک اطلاعاتی

TableName: نام جدول

ثابت adCmdTable : یک جدول
 
  • متدهای Recordset
نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:

متدهای Recordset:





متدهایی هستن که به شما امکان پردازش رویه رکوردها رو می ده.

* شی Adodc :

اضافه کردن رکورد جدید:





كد:

Adodc1.Recordeset.AddNew</pre>



رفتن به رکورد دلخواه:



كد:

Adodc1.Recordset.Move (RecordNumber)
حذف:</pre>







كد:

Adodc1.Recordset.Delete</pre>



اولین رکورد :





كد:

Adodc1.Recordset.MoveFirst</pre>



رکورد قبلی:





كد:

Adodc1.Recordset.MovePrevious</pre>



رکورد بعدی :





كد:

Adodc1.Recordset.MoveNext</pre>



آخرین رکورد :





كد:

Adodc1.Recordset.MoveLast</pre>



رسیدن به اولین فیلد - {Begin Of File} :





كد:

Adodc1.Recordset.BOF</pre>



رسیدن به آخرین فیلد - {End Of File} :





كد:

Adodc1.Recordset.EOF</pre>



ذخیره یک رکورد جدید:





كد:

Adodc1.Recordset.Update</pre>



ذخیره اطلاعات رکورد به صورت فایل :





كد:

Adodc1.Recordset.Save</pre>



جستجو :









كد:

Adodc1.Recordset.Find(Criteria As String,SkipRecords As Long,Search Direction As SearchDirectionEnum=adSearchForward,[Start])</pre>




  • Criteria As String: عبارت مورد جستجو
  • SkipRecord: شروع از رکورد شماره N (پرش از رکورد)
  • SearchDirection: مسیر جستجو
 
شی ADODB




  • اتصال به شی ADODB


نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:

* شی ADODB :

برای این کار باید یک رابط ایجاد کنیم تا با بانک اطلاعاتی وصل بشیم. رابطهامون متغیرهامون هستن.

کد:

كد:

Dim Cnn As New ADODB.Connection</pre>

متغیر Cnn رابط ما شد. با استفاده شی Connection می تونیم با پایگاه داده وصل بشیم. حالا باید با دستور Open بانک رو باز کنیم:

کد:

كد:

Cnn.Open(ConnectionString)</pre>

Cnn: متغیر رابط

ConnectionString :اتصال به انواع مختلف بانک اطلاعاتی هستش. مثل Jet- SQL Server - Oracle - ODBC و...

حالا باید به جداول یانک ارتباط برقرار کنیم. یه متغیر برای اتصال به اسم Rst.

کد:

كد:

Dim Rst As New ADODB.Recordset</pre>

باز کردن جدول با دستور Open صورت میگیره:

کد:

كد:

Rst.Open(TableName,Connection,CursorType,LockType,Option)</pre>

*** نکته: حتماً هر فایلی یا هر بانکی که باز میشه حتماً باید بسته بشه. دستور بستن :

کد:

كد:

Close</pre>

اتصال به بانک:

کد:

كد:

Dim Cnn As New ODODB.Connection
Dim Rst As New ODODB.Recordset
Cnn.Open ( "Provider=Microsoft.Jet.OLEDB.4.0 ; DataSource= & App.Path & \DataBaseName")
Rst.Open(TableName,Cnn,addOpenKeyset,adLockOptimistic,adCmdTable
.
.
.
Rst.Close
Cnn.Close
Set Rst = Nothing
Set Cnn = Nothing</pre>

با Source و ConnectionString آشنا شدیم. حالا Cursor Type.

CursorType: نوع دسترسی شما به Recordset رو بیان می کنه که با یکسری ثابت مقداری دهی میشه.


  • adOpenForwardOnly: فقط Recordset خواندنی
  • adOpentStatic : یک Recordset استاتیک در اختیار شماست یعنی هر تغییری که انجام بدین در بانک اعمال نمیشه!
  • adOpenDynamic: یه Recordset کامل و پویا رو در اختیارتون قرار می ده.
LockType: یک نوع Permission برای Recordset اختیار می کنین.
  • adLockReadOnly: اجازه ایجاد رکورد جدید رو ندارید. فقط مشاهده.
  • adCmdtext: تویه پست قبلی توضیح دادم.
  • adCmdTable : تویه پست قبلی توضیح دادم.
  • adLockOptimistic: هنگام Update کردن Recordset رو قفل می کنه.
 
  • متدهای Recordset


نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:

متدهای Record Set


* شی ADODB :




بعد از باز کردن Recordset جهت پردازش رکورد ها از روش های زیر استفاده می کنیم:​




اضافه کردن رکورد جدید:​




کد:

كد:

Rst.AddNew</pre>

حذف:​




کد:

كد:

Rst.Delete</pre>

رفتن به رکورد دلخواه:​




کد:

كد:

Rst.Move (RecordNumber)</pre>

اولین رکورد :​




کد:

كد:

RST.MoveFirst</pre>

رکورد قبلی:​




کد:

كد:

RST.MovePrevious</pre>

رکورد بعدی :​




کد:

كد:

Rst.MoveNext</pre>

آخرین رکورد :​




کد:

كد:

Rst.MoveLast</pre>

رسیدن به اولین فیلد - {Begin Of File} :​






کد:

كد:

Rst.BOF</pre>

رسیدن به آخرین فیلد - {End Of File} :​






کد:

كد:

Rst.EOF</pre>

ذخیره یک رکورد جدید:​




کد:

كد:

Rst.Update</pre>

ذخیره اطلاعات رکورد به صورت فایل :​




کد:

كد:

Rst.Save</pre>

جستجو :​






کد:

كد:

Rst.Find(Criteria As String,SkipRecords As Long,Search Direction As SearchDirectionEnum=adSearchForward,[Start])</pre>


  • Criteria As String: عبارت مورد جستجو
  • SkipRecord: شروع از رکورد شماره N (پرش از رکورد)
  • SearchDirection: مسیر جستجو
 
نکاتی در باره توابع ، متغيرها و نحوه استفاده آنها


ارسال متغير بصورت ByRef و ByVal


اگر موقع تعريف يک تابع قبل از نام متغير از عبارت ByRef
استفاده نماييم هنگام فراخوانی تابع با قراردادن متغيری در تابع که دارای
مقدارميباشد ، پس از محاسبات ، مقدار متغير نيز تغيير ميکند. در ضمن مقدار
تابع با آخرين مقدار متغير محاسبه ميگردد:



Function Use_ByRef(ByRef intVar As Integer)
intVar = intVar + 1
Return intVar
End Function
Dim intMyVar As Integer
intMyVar = 1
Response.Write(intMyVar & "-----" & Use_ByRef(intMyVar))

پاسخ : 2-----3


ولی اگر در مثال فوق ازByVal استفاده کنيم ، پس از محاسبات مقدار متغير تغيير نميکند و نيز مقدار تابع با مقدار اوليه متغير محاسبه ميشود:

FunctionUse_ByVal(ByVal intVar As Integer)
intVar = intVar + 1
Return intVar
End Function
Dim intMyVar As Integer
intMyVar = 1
Response.Write(intMyVar & "-----" & Use_ByVal(intMyVar))

پاسخ : 1-----2


متغير Static

اگر درون تابعی متغيری را بصورت Static
تعريف نماييم و مقدار اين متغير طي عمليات تابع تغيير نمايد در هرفراخوانی
متغير ياد شده با آخرين مقدارخود در محاسبات شرکت ميکند.

اين مورد بر خلاف تعريف متغيير بوسيله دستور Dim است . چون در Dim متغيير بمحض تعريف شدن دوباره ، مقدار قبلي خود را از دست ميدهد.

FunctionUse_Static()

Static intCount As Integer

intCount = intCount+1

Return intCount

End Function



Response.Write( "

" & Use_Static)


Response.Write( "

" & Use_Static)


Response.Write( "

" & Use_Static)


1 پاسخ :


2


3


تعريف توابع بصورت OverLoads


در نظر بگيريد كه در جايي از برنامه خود احتياج داشته باشيد كه يك فانكشن
را فراخواني و پارامترهاي ورودي آنرا كه استرينك است به آن پاس نماييد.
حال اگر شما مجبور باشيد در مواقعي خاص به اين فانكشن بجاي استرينگ ، عدد
يا يك متغيير از نوع ديگري پاس كنيد ، چكار بايد كرد؟ آيا بايد دو تا
فانكشن با نامهاي متفاوت و نوع عملكرد متفاوت تعريف نمود ؟ آيا راه حل
ديگري وجود ندارد؟


در اينجا راه حل ديگري نيز وجود دارد كه اگر دو يا چند تابع را با يک نام
ثابت ولی تعداد يا نوع متغير متفاوت در يک کلاس تعريف نماييم ميتوانيم از
هر کدام برحسب نياز استفاده کنيم:

Function Use_OverLoads(ByVal strVar1 As String, ByVal strVar2 As String)As String
Return strVar1 & strVar2
EndFunction
Function Use_OverLoads (ByVal intVar As Integer) As Integer
Return intVar + intVar
EndFunction
Response.Write(Use_OverLoads (5))
Response.Write("

" & Use_OverLoads("Over", "Loads"))

 
بالا