نكاتی در مورد برنامه نويسي در Visual Basic
ابتدا کار باADO رو می گم:
برای استفاده از تکنولوژی ADO باید Refrence اون رو به پروژه اضافه کنید. روش:
Project - Refrence - Microsoft Actixiv Data Object
نحوه ارتباط پایگاه داده 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
ConnectionString: اتصال به انواع مختلف بانک اطلاعاتی هستش. مثل Access - SQL - Oracle - ODBC و...
حالت کلی:
Provider="Provider Code" ; DataSource = "DataSource"
Data Source: رشته ای هستش حاوی آدرس بانک اطلاعاتی تویه حافظه جانبی.
CommandType: نوع جستجو در بانک اطلاعاتی رو مشخص می کنه که خاصیت مهمش adCmdTable هستش که جهت اتصال به جدول هستش. برای جستجوی SQL باید این مقدار رو با ثابت adCmdText مقدار دهی کنیم.
DataBaseName: نام بانک اطلاعاتی
TableName: نام جدول
ثابت adCmdTable : یک جدول
ارتباط بانک اطلاعاتی با Visual Basic
نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:
* شی ADODB :
برای این کار باید یک رابط ایجاد کنیم تا با بانک اطلاعاتی وصل بشیم. رابطهامون متغیرهامون هستن.
Dim Cnn As New ADODB.Connection
متغیر Cnn رابط ما شد. با استفاده شی Connection می تونیم با پایگاه داده وصل بشیم. حالا باید با دستور Open بانک رو باز کنیم:
Cnn.Open(ConnectionString)
Cnn: متغیر رابط
ConnectionString :اتصال به انواع مختلف بانک اطلاعاتی هستش. مثل Jet- SQL Server - Oracle - ODBC و...
حالا باید به جداول یانک ارتباط برقرار کنیم. یه متغیر برای اتصال به اسم Rst.
Dim Rst As New ADODB.Recordset
باز کردن جدول با دستور Open صورت میگیره:
Rst.Open(TableName,Connection,CursorType,LockType, Option)
*** نکته: حتماً هر فایلی یا هر بانکی که باز میشه حتماً باید بسته بشه. دستور بستن :
Close
اتصال به بانک:
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,adLockOptimis tic,adCmdTable
.
.
.
Rst.Close
Cnn.Close
Set Rst = Nothing
Set Cnn = Nothing
با Source و ConnectionString آشنا شدیم. حالا Cursor Type.
CursorType: نوع دسترسی شما به Recordset رو بیان می کنه که با یکسری ثابت مقداری دهی میشه.
- adOpenForwardOnly: فقط Recordset خواندنی
- adOpentStatic : یک Recordset استاتیک در اختیار شماست یعنی هر تغییری که انجام بدین در بانک اعمال نمیشه!
- adOpenDynamic: یه Recordset کامل و پویا رو در اختیارتون قرار می ده.
LockType: یک نوع Permission برای Recordset اختیار می کنین.
- adLockReadOnly: اجازه ایجاد رکورد جدید رو ندارید. فقط مشاهده.
- adCmdtext: تویه پست قبلی توضیح دادم.
- adCmdTable : تویه پست قبلی توضیح دادم.
- adLockOptimistic: هنگام Update کردن Recordset رو قفل می کنه.
ارتباط بانک اطلاعاتی با Visual Basic
نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:
متدهای Recordset:
متدهایی هستن که به شما امکان پردازش رویه رکوردها رو می ده.
* شی Adodc :
اضافه کردن رکورد جدید:
Adodc1.Recordeset.AddNew
رفتن به رکورد دلخواه:
Adodc1.Recordset.Move (RecordNumber)
حذف:
Adodc1.Recordset.Delete
اولین رکورد :
Adodc1.Recordset.MoveFirst
رکورد قبلی:
Adodc1.Recordset.MovePrevious
رکورد بعدی :
Adodc1.Recordset.MoveNext
آخرین رکورد :
Adodc1.Recordset.MoveLast
رسیدن به اولین فیلد - {Begin Of File} :
Adodc1.Recordset.BOF
رسیدن به آخرین فیلد - {End Of File} :
Adodc1.Recordset.EOF
ذخیره یک رکورد جدید:
Adodc1.Recordset.Update
ذخیره اطلاعات رکورد به صورت فایل :
Adodc1.Recordset.Save
جستجو :
Adodc1.Recordset.Find(Criteria As String,SkipRecords As Long,Search Direction As SearchDirectionEnum=adSearchForward,[Start])
- Criteria As String: عبارت مورد جستجو
- SkipRecord: شروع از رکورد شماره N (پرش از رکورد)
- SearchDirection: مسیر جستجو
ارتباط بانک اطلاعاتی با Visual Basic
نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:
متدهای Record Set
* شی ADODB :
بعد از باز کردن Recordset جهت پردازش رکورد ها از روش های زیر استفاده می کنیم:
اضافه کردن رکورد جدید:
Rst.Delete
رفتن به رکورد دلخواه:
Rst.Move (RecordNumber)
اولین رکورد :
RST.MoveFirst
رکورد قبلی:
RST.MovePrevious
رکورد بعدی :
Rst.MoveNext
آخرین رکورد :
Rst.MoveLast
رسیدن به اولین فیلد - {
Begin
Of
File} :
Rst.BOF
رسیدن به آخرین فیلد - {
End
Of
File} :
Rst.EOF
ذخیره یک رکورد جدید:
Rst.Update
ذخیره اطلاعات رکورد به صورت فایل :
Rst.Find(Criteria As String,SkipRecords As Long,Search Direction As SearchDirectionEnum=adSearchForward,[Start])
- Criteria As String: عبارت مورد جستجو
- SkipRecord: شروع از رکورد شماره N (پرش از رکورد)
- SearchDirection: مسیر جستجو
ارتباط بانک اطلاعاتی با Visual Basic
نحوه ارتباط پایگاه داده Access با Visual Basic از طریق کد نویسی:
ویرایش :
برای ویرایش یک رکورد ابتدا باید رکورد مورد نظر رو جستجو کنیم و سپس مقادیر اون در فیلدهای مختلف رو تغییر بدیم.
Dim Cnn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
.
.
.
Do While Not (Rst.EOF)
If Rst!FirstName = Trim(FirstNameTxt.Text) Then
Rst!LastName = Str(LastName.Text)
Rst!Telephone = Val(PhoneNumberTxt.Text)
End If
Wend
Rst.Close
Set Rst = Nothing
ارتباط بانک اطلاعاتی با Visual Basic
ذخیره عکس در پایگاه داده Access
Private Sub CmdNew_Click()
Adodc1.Recordset.AddNew
End Sub
Private Sub CmdNew_Click()
CommonDialog1.Filter = "(*.JPG)|*.JPG"
If CommonDialog1.Filename <> "" Then
Image1.LoadPicture = (CDMain.Filename)
End If
End Sub
Private Sub CmdSave_Click()
Call CmdOpen
Adodc1.Recordset.Update
Adodc1.Refresh
End Sub
ذخیره عکس در پایگاه داده باعث بالا رفتن حجم پایگاه داده میشه و از سرعت دسترسی به اطلاعات یک رکورد کاسته میشه. پس توصیه میشه که عکس رو در پایگاه داده ذخیره نکنید!
1 ضمیمه
تعیین حدود دسترسی کاربران
برای دسترسی کاربران به یک سری فعالیت ها باید یک روال بسازیم تا تمام امکانات را در اختیار کاربران قرار دهد.
مثال:
- مدیر : اجازه ثبت نام، ویرایش، اخراج دانش آموزان را دارد.
- معاون: اجازه ثبت نام، ویرایش دانش آموزان را دارد.
- دفتردار : اجازه ویرایش دانش آموزان را دارد.
Option Explicit
Public AddNew As Boolean
Public Delete As Boolean
Public Edit As Boolean
Public GroupTypeName As String
Public Sub GroupType()
'Access Type
If GroupTypeName = "Admin" Then
AddNew = True
Delete = True
Edit = True
End If
If GroupTypeName = "Assistant" Then
AddNew = True
Edit = True
Delete = False
End If
If GroupTypeName = "BookKeeper" Then
AddNew = False
Edit = True
Delete = False
End If
End Sub
یک مثال برای فهم بیشتر.
چگونه مي توانيم Index را در بانك اطلاعاتي اعمال كنيم؟
مسير زير:
Add-Ins - Visual Data Manager
در پنجره Visual Data Manager مسير:
File - Open DataBase - Microsoft Access
و بانك اطلاعاتي رو انتخاب مي كنيم.
حالا جدول مورد نظر رو Select و بعدش روش RC مي كنيم(RC=Right Click) و از منوي ظاهر شده Design رو كليك مي كنيم. حالا از اينجا به بعد آسونه فيلدهايي رو كه مي خواين ايندكس بشن رو انتخاب مي كنيم.
در Index كردن ما مي توانيم Index را براساس چند فيلد انجام دهيم.
- ابتدا Index براساس فيلد اول و بعد فيلد دوم و تا آخرين فيلد Index شده.
http://www.barnamenevis.org/im...cons/icon4.gif هر جدول بيشتر از 10 Index نمي تونه داشته باشه!!
1 ضمیمه
بررسي چند شرط در جدول بانك اطلاعاتي
:گیج:شايد سوال خيلي ها باشه. مي تونيد ازش به صورت هاي مختلفي استفاده كنيد.
مثل نام و نام خانوادگي ، نام كلاس و نام مدرسه و ...
مي تونيد اين برنامه رو با برنامهاي كه در پست تعیین حدود دسترسی کاربران گذاشته شده تلفيق كنيد و يه طرح نو با ابتكار خودتون بسازين.
*برگرفته از تايپيك:https://barnamenevis.org/showthread.php?t=96352
1 ضمیمه
ثبت ساعت و تاريخ ميلادي سيستم در بانك اطلاعاتي
ثبت ساعت و تاريخ ميلادي سيستم در بانك اطلاعاتي
1 ضمیمه
فیلترسازی یک بانک اطلاعاتی
نكته: از فيلترسازي ميشه براي جستجو هم استفاده هم كرد اما هميشه جواب 100درصد رو به ما نميده و باعث به نمايش درومدن گروهي ركوردها ميشه
اين برنامه اطلاعات رو بر حسب نام فيلتر مي كنه
1 ضمیمه
مرتب سازی ركورد هاي یک بانک اطلاعاتی
شما به وسيله مرتب سازي مي تونيد ركوردهاتون رو بر اساس يكي از فيلدها مرتب كنيد. دستورش خيلي ساده هستش:
Adodc1.Recordset.Sort = "FieldName"
FieldName: نام فيلد جدول بانك اطلاعاتي
بازكردن بانك Password دار
براي باز كردن يك بانك Password دار فقط و فقط احتياج به يك خط كد هستش. به كد زير دقت كنيد:
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" DataBase Address ; Password=DataBasePassword"
DataBase Address : آدرس بانك اطلاعاتي شما هستش
DataBasePassword: نام رمزي هستش كه شما براي بانكتون اعمال كردين.
باز كردن فايل ترتيبي و تصادفي - دستور Open
شكل كلي دستور:
Open FilePath For Mode Access AccessType As FileNumber Len = Width
Open: كلمه كليدي جهت باز كردن فايل
FilePath: آدرس دقيق فايل (با پسوند) كه اشاره گر جهت پيدا كردن موقعيت فايل به آدرس فايل ميره.
For: كلمه كليدي
Mode: حالات دسترسي به فايل
Access: كلمه كليدي
AccessType: نوع دسترسي به فايل با مشخصات زير:
- Shared: در شبكه كاربران مي توانند همزمان يك فايل رو باز كنند.
- Lock Read: كاربر فايل رو فقط مي تونه بخونه
- Lock Write: كاربر اجازه ويرايش يا تغييرات رو در فايل دارند.
- Lock Read Write: كاربر مي تونه فايل رو بخونه بنويسه
AS: كلمه كليدي
FileNumber: شماره فايل كه بوسيله تابع ()FreeFile بدست مياد ( توضيحات:مفهوم فايل - File)
Len: كلمه كليدي
Width: طول يك ركورد از فايل رو تعيين مي كنه.
http://www.barnamenevis.org/im...cons/icon4.gif به هر سطر در فايل ركورد مي گن.
باز كردن يك فايل ترتيبي جهت خواندن:
Open "C:\Student.txt" For Input As #FreeFile Len = 7
اين فايل قبلاً در مسير "C:\Student.txt" وجود داشته در غير اينصورت پيغام خطا صادر ميشه و يك ركورد به طول 7 رو مي خونه.
باز كردن يك فايل ترتيبي جهت نوشتن (پاك شدن اطلاعات قبلي):
Open "C:\Student.txt" For Output As #FreeFile Len = 7
اگر فايلي با اين نام از قبل بوده اطلاعاتش رو پاك مي كنه و اشاره گر رو در ابتداي فايل نگه مي داره و اجازه نوشتن يك ركوردي به طول 7 رو صادر مي كنه.
باز كردن يك فايل ترتيبي جهت نوشتن (بدون پاك شدن اطلاعات قبلي):
FileNumber = FreeFile
Open "C:\Student.txt" For Append As #FileNumber Len = 7
Print #FileNumber, "Obalit"
Close #FileNumber
http://www.barnamenevis.org/im...cons/icon4.gif من در اينجا يك متغير FileNumber از نوع Integer تعريف كردم و مقدارش رو برابر تابع ()FreeFile قرار دادم.
فايل Student.txt رو باز مي كنه و بدون اينكه اطلاعات قبلي اون رو پاك كنه اون رو باز مي كنه و اجازه نوشتن ركوردي به طول 7 رو صادر مي كنه و بوسيله دستور Print درون فايل كلمه Obalit رو مي نويسه. و در انتها بوسيله دستور Close فايل رو ميبنده.
باز كردن يك فايل تصادفي:
براي باز كردن يك فايل تصادفي بايد حالات دسترسي به فايل به صورت Random باشه. فايل تصادفي زماني به د مي خوره كه دسترسي ما به فايل به صورت مستقيم باشه يعني بوسيله آدرس دقيق فايل (آدرس + ركورد مورد نظر) ما بخواهيم يه فايل رو باز كنيم.
Open "C:\Student.txt" For Random As #FreeFile Len = RecordWidth
بوسيله اين دستور ميشه اطلاعات فايل tudent.txt به صورت تصادفي خواند.
http://www.barnamenevis.org/im...cons/icon4.gif معمولاً براي نوشتن (ثبت ركورد) از اين حالت استفاده مي شه.
پردازش فايل ترتيبي - دستورات نوشتن
هر فايلي كه باز ميشه براي پردازش اون دو حالت وجود داره:
- يا براي خوندن اطلاعاتش باز شده
- يا براي نوشتن اطلاعات جديد باز شده
http://www.barnamenevis.org/im...cons/icon4.gif اطلاعات = ركورد
خواندن فايل
براي خواندن فايل بايد حالت دسترسي به فايل Input باشه تا بشه اطلاعاتش رو خوند. دستوري كه ميشه باهاش اطلاعاتش رو خوند دستور Line Input هستش.
شكل كلي اين دستور:
Line Input #FileNumber , InputString
Line Input: كلمه كليدي جهت خواندن فايل
FileNumbe: شماره فايل
InputString: رشته اي هستش كه قراره خونده بشه.
http://www.barnamenevis.org/im...cons/icon4.gif چون فايل ما ترتيبي هستش نميشه به يك ركورد خاصي اشاره كرد اگر فايل 500 ركورد داشت و ما بخواهيم به ركورد 239 بريم بايد 500 ركورد رو خوند پس براي خوندن اطلاعات يك ركورد تمامي ركورد ها بايد خونده بشن. عيب اين نوع فايل سنگيني و كندي اون هستش كه علتش همين هستش.
http://www.barnamenevis.org/im...cons/icon3.gif حالا من مي خوام اطلاعات فايل Student.txt رو بخونم و در يه متغير به اسم strInput قرار بدم و سپس در يك TextBox اونا رو بريزم:
Dim strInput As String
Dim FileNumber As Integer
FileNumber = FreeFile
Open "C:\Student.txt" For Input As #FileNumber
Do While Not EOF(FileNumber)
Line Input #FileNumber, strInput
Loop
Close #FileNumber
PassageTxt.Text = strInput
نوشتن فايل
براي نوشتن فايل دو راه وجود داره:
- استفاده از دستور Print
- استفاده از دستور Write
دستور Print:
از دستور Print براي نوشتن تويه فايل ترتبي استفاده ميشه.
شكل كلي دستور:
Print #FileNumber , OutputString
Print: كلمه كليدي جهت نوشتن در فايل ترتيبي
FileNumber: شماره فايل ترتيبي
OutputString: رشته يا عبارتي كه قرار نوشته بشه در فايل ترتيبي
http://www.barnamenevis.org/im...cons/icon3.gif حالا من مي خوام اطلاعات يه TextBox رو در يه متغير به اسم strOutput قرار بدم و سپس در فايل Student.txt اونا رو بريزم:
Dim strOutput As String
Dim FileNumber As Integer
FileNumber = FreeFile
Open "C:\Student.txt" For Output As #FileNumber
strOutput = PassageTxt.Text
Print #FileNumber, strOutput
Close #FileNumber
دستور Write:
از دستور Write هم ميشه براي نوشتن اطلاعات در يك فايل متني هم استفاده كرد و دقيقاً مثل دستور Print هست با يكسري تفاوت كه فيلدها در دستور Write با كاما (,) از هم جدا ميشن و درون دوتا دبل كوتيشن (" ") و مقادير تاريخ و منطقي درون دوتا علامت شارپ (#) قرار ميگيرن.
String Value : " Barnamenevis.ORG "
DateValue : #10/3/1387#
Boolean : #True# OR #False#
شكل كلي دستور:
Write #FileNumber , OutputString
Write: كلمه كليدي جهت نوشتن در فايل ترتيب
FileNumber: شماره فايل ترتيبي
OutputString: ليست خروجي ها كه قراره در فايل ترتيبي نوشته بشن.
بستن فايل ترتيبي - دستور Close
هر فايلي كه باز ميشه حتماً بايد بسته بشه حالا چه بخواد پردازش بشه چه بخواد نشه حتماً بايد بسته بشه.
با استفاده از دستور Close ميشه يك فايل ترتيبي و تصادفي رو بست.
شكل كلي دستور:
Close #FileNumber
Close: لمه كليدي جهت بستن فايل ترتيبي يا تصادفي
FileNumber شماره فايل
در برنامه اي ممكن هست كه ما 4 تا 5 تا فايل ترتيي يا تصادفي رو باز كنيم شايد هم در برخي مواقع 20 تا فايل. براي بستن تك تك اين فايل ها شايد معقول به نظر نرسه كه n تا دستور Close نوشت. براي همين اگر بخواهيم تمامي فايل هاي ترتيبي يا تصادفي رو ببنديم از دستور Close به صورت تنها استفاده مي كنيم:
Close
اون موقع تمام فايل ها بسته مي شن.
پردازش فايل تصادفي - دستورات خواندن و نوشتن
http://www.barnamenevis.org/im...cons/icon4.gif جهت كار با فايل تصادفي بايد ما طول ركورد و شماره ركورد فايل مورد نظر را بدونيم در غير اينصورت ما نمي تونيم فايل رو پردازش كينم به دليل اينكه برنامه با اين فرمول مي تونه ابتداي يك ركورد رو حدس بزنه:
طل ركورد * شماره ركورد
دستور Get:
براي خواندن از فايل تصادفي بايد از دستور Get استفاده كنيم.
شكل كلي دستور:
Get #FileNumber , RecordNumber,InputString
Get: دستور خواندن در فايل تصادفي
FileNumber: شماره فايل تصادفي
RecordNumber: شماره ركورد كه قراره اطلاعات از اونجا خونده بشه.
InputString: متغيري كه قراره اطلاعات درون فايل توش ريخته بشه.
خواندن اطلاعات يك فايل:
Open "C:\Student.txt" For Random As #FileNumber Len = 3
For Counter = 1 To 3
Get #FileNumber, Counter, strInput
Next Counter
Close #FileNumber
دستور Put:
براي نوشتن در يك فايل تصادفي ما از دستور Put استفاده مي كنيم.
شكل كلي دستور:
Put #FileNumber , RecordNumber , OutputString
Put: دستور جهت نوشتن در فايل به صورت تصادفي
Filenumber: شماره فايل تصادفي
RecordNumber: شماره ركوردي كه قراره توش اطلاعات نوشته بشه
Outputstring: متغير يا رشته اي هستش كه قراره جايه RecordNumber جايگزين بشه.
نوشتن اصلاعات در يك فايل:
Open "C:\Student.txt" For Random As #FileNumber Len = 15
Put#FileNumber, 3, "Barnamenevis.ORG"
Close #FileNumber
عبارت Barnamenevis.ORG در ركورد شماره 3 نوشته ميشه.
1 ضمیمه
استفاده از UDT در فايلهاي تصادفي
استفاده از UDT در فايلهاي تصادفي.
1 ضمیمه
استفاده از UDT در فايلهاي ترتيبي
استفاده از UDT در فايلهاي ترتيبي.
1 ضمیمه
DriveListBox, DirectoryListBox, FileListBox
DriveListBox
يه Object كه براي نمايش و تغيير درايو از طريف برنامه استفاده ميشه براي تغيير درايو فعلي يا نمايش يه درايو ديگه بايد از خاصيت Drive اين كنترل استفاده كنيم.
مثال:
Private Sub CmdChange_Click()
Drive1.Drive = "E"
End Sub
DirectoryListBox
از اين كنترل براي نمايش يا تغير پوشه ها از طريف برنامه استفاده ميشه. مهمترين خاصيت ها:
- Path: آدرس دقيق پوشه مورد نظر رو برميگردونه. مثال:
Private Sub CmdPath_Click()
MsgBox Dir1.Path
End Sub
FileListBox
عنصري هستش كه ميشه باهاش فايلها رو مشاهده كرد. مهمترين ويژگي:
- Pattern: مانند Filter تويه CommonDialog كار مي كنه يعني فايلهايي كه داراي شرايط خاصي هستن رو نشون مي ده. مثال:
FileListBox1.Pattern = "*.txt"
- Hidden: فايلهايي كه به صورت مخفي هستن رو نشون مي ده در صورتي كه با True مقدار دهي بشه(پس منطقي هستش)
- System: اگر با True مقدار دهي بشه فايلهاي سيستمي رو نشون مي ده
- Path: آدرس دقيق فايل مورد نظر رو اعلام مي كنه.
Private Sub CmdPath_Click()
MsgBox File1.Path & File1.List(File1.ListIndex)
End Sub