თავი 1. Access  2007-ის ობიექტური მოდელი

1.5. მართვის ელემენტების  მოვლენები (დასაწყისი)
Private Sub Form_Load() 
Me.Frame1.Value = 1 ’ ალამის <ნომერი> გაჩუმებით მონიშვნა
Me.Famorceva.Value = 1 ’ალამის <ამორჩევა> მონიშვნა
Me.Refresh ’ცხრილში ყველა ჩანაწერის გამოტანა
Me.FilterOn = False ’ამორჩევის ფილტრის გამოთიშვა
Me.Vsek.SetFocus ’ფოკუსის მიღება
With nomeri
.Enabled = True 
.Locked = True
 End With
 With gvari
.Enabled = True
.Locked = True
End With
With tariri
.Enabled = True
.Locked = True
End With
With adgili
.Enabled = True
.Locked = True
End With
Me.Ldamateba.Visible = False ’მართვის ელემენტის Label-ის გადამალვა. მასზედ გამოიტანება ინფორმაცია ჩანაწერის ამოშლის, დამატების, რედაქტირების შესახებ 
Me.Rnext.Enabled = False ’შემდეგ ჩანაწერზე გადაადგილების ღილაკზე წვდომადობის აკრძალვა
Me.Rpirveli.Enabled = False’ პირველ ჩანაწერზე გადაადგილების ღილაკზე წვდომადობის აკრძალვა
Me.Rbolo.Enabled = False ’ ბოლო ჩანაწერზე გადაადგილების ღილაკზე წვდომადობის აკრძალვა
Me.Rprevios.Enabled = False ’ღილაკზე წვდომადობის აკრძალვა
Me.Rsek.Enabled = True ’ წინა ჩანაწერზე გადაადგილების ღილაკზე წვდომადობის ნებართვა
Me.Rdamateba.Enabled = False 
End Sub
Private Sub adgili_Exit(Cancel As Integer) 
If IsNull(Me.adgili) Then ’ველში მონაცემების არსებობის შემოწმება
 DoCmd.OpenForm "Fsecdoma" ’ფორმა-ჩანართის გამოძახება შეცდომის შეტყობინების შესახებ
Form_Fsecdoma.Lsecdoma.Caption = "gTxovT CaweroT studentis dabadebis adgili"
Cancel = True ’კურსორის დატოვება ველში adgili
Exit Sub
End If
Me.nomeri.SetFocus
End Sub
Private Sub Famorceva_Click() 
Select Case Me.Famorceva.Value
Case 1 ’ამორჩევის რეჟიმში გადასვლა 
Me.Rsek.Enabled = True
Me.Rdamateba.Enabled = False
Me.Rnext.Enabled = True
Me.Rpirveli.Enabled = True
Me.Rbolo.Enabled = True
Me.Rprevios.Enabled = True
Me.Ldamateba.Visible = True
With nomeri
.Enabled = True
.Locked = True
 End With
 With gvari
.Enabled = True
.Locked = True
End With
With tariri
.Enabled = True
.Locked = True
End With
With adgili
.Enabled = True
.Locked = True
End With
Me.Ldamateba.Visible = False
Me.Vsek.SetFocus
Case 2 ’რედაქტირების რეჟიმში გადასვლა 
Me.Rsek.Enabled = True
Me.Rdamateba.Enabled = False
Me.Rnext.Enabled = True
Me.Rpirveli.Enabled = True
Me.Rbolo.Enabled = True
Me.Rprevios.Enabled = True
With nomeri
.Enabled = True
.Locked = True
 End With
’ 
With gvari
.Enabled = True
.Locked = False
End With
With tariri
.Enabled = True
.Locked = False
End With
With adgili
.Enabled = True
.Locked = False
End With
Me.Ldamateba.Visible = True
Me.Ldamateba.Caption = "Tqven SegiZliaT <nomeri>-is garda nebismieri monacemis redaqtireba." & _
" redaqtirebis Semdeg daaWireT Rilaks <tab> an <enter>"
Me.Vsek.SetFocus
Case 3 ’ჩანაწერების დამატების რეჟიმში გადასვლა 
With nomeri
.Enabled = True
.Locked = False
 End With
 With gvari
.Enabled = True
.Locked = False
End With
With tariri
.Enabled = True
.Locked = False
End With
With adgili
.Enabled = True
.Locked = False
End With
Me.Rsek.Enabled = False
Me.Rnext.Enabled = False
Me.Rpirveli.Enabled = False
Me.Rbolo.Enabled = False
Me.Rprevios.Enabled = False
Me.Rdamateba.Enabled = True
Me.Ldamateba.Visible = True
Me.Ldamateba.Caption = "CawereT: nomeri, gvari, saxeli da sxva monacemebi." & _
" ris Semdeg ganmorebiT daaWireT Rilaks <damateba>"
 Me.FilterOn = False
On Error Resume Next
DoCmd.GoToRecord Record:=acLast
DoCmd.GoToRecord Record:=acNext
End Select
End Sub
Private Sub Form_Load()
Me.Frame1.Value = 1
Me.Famorceva.Value = 1
Me.Refresh
Me.FilterOn = False
Me.Vsek.SetFocus
With nomeri
.Enabled = True
.Locked = True
 End With
 With gvari
.Enabled = True
.Locked = True
End With
With tariri
.Enabled = True
.Locked = True
End With
With adgili
.Enabled = True
.Locked = True
End With
Me.Ldamateba.Visible = False
Me.Rnext.Enabled = False
Me.Rpirveli.Enabled = False
Me.Rbolo.Enabled = False
Me.Rprevios.Enabled = False
Me.Rsek.Enabled = True
Me.Rdamateba.Enabled = False
End Sub
Private Sub Frame1_Click()
Me.Vsek.SetFocus
End Sub
Private Sub  gvari_Exit(Cancel As Integer) ’ მოვლენასთან Exit დაკავშირება უზრუნველყოფს ველში მონაცემის ჩაწერის აუცილებლობას
If IsNull(Me.gvari) Then
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "gTxovT CaweroT studentis gvari, saxeli"
Cancel = True
End If
End Sub

Private Sub nomeri_Enter()
Select Case Me.Famorceva.Value
Case 1, 2
Exit Sub
End Select
DoCmd.SetWarnings False ’სისტემის მიერ გამოტანილი შეტყობინების აკრძალვა
If IsNull(Me.nomeri) Then
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "gTxovT CaweroT studentis sadentifikacio nomeri"
 Cancel = True
Me.nomeri.SetFocus
Exit Sub
 End If
’ ჩანაწერის დამატებისას  ველში ჩაწერილი ნომრის - საიდენტიფიკაციო ნომრის შედარება ცხრილში არსებულ ნომერთან
 Dim can As New ADODB.Recordset ’ჩანაწერის ტიპის ობიექტის ეგზემპლარის შექმნა
 Dim dak As New ADODB.Connection ’ბაზასთან დაკავშირების ტიპის ობიექტის ეგზემპლარის შექმნა
 Set dak = CurrentProject.Connection
can.Open "tbstudenti", dak, adOpenKeyset, adLockPessimistic, adCmdTable
Dim i As String
s1 = Me.nomeri
i = "[nomeri] = " & s1 & ""
can.Find i ’ძებნის ფუნქციის გამოყენებით ერთი ველით ჩანაწერის ამორჩევა
If can.EOF = False Then
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "studenti am nomriT arsebobs. gTxovT CaweroT nomeri swore" & _
" Tu Tqven gadaifiqreT Canaweris damateba, daaWireT klaviSs <esc>"
 Cancel = True
End If
End Sub
Private Sub nomeri_KeyPress(KeyAscii As Integer) ’ველში ციფრების ჩაწერის აუცილებლობა
If Me.Frame15.Value = 1 Or Me.Frame15.Value = 3 Then
If KeyAscii < Asc("0") Or KeyAscii > Asc("9") Then
KeyAscii = 0
Beep
End If
End If
End Sub
Private Sub Rbolo_Click() ’ბოლო ჩანაწერზე გადასვლა
On Error Resume Next
DoCmd.GoToRecord Record:=acLast
End Sub
Private Sub Rdamateba_Click() ’ჩანაწერის დამატება
DoCmd.SetWarnings False
If IsNull(Me.nomeri) Then
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "gTxovT CaweroT studentis sadentifikacio nomeri"
 Cancel = True
Me.nomeri.SetFocus
Exit Sub
 End If
 Dim can As New ADODB.Recordset
 Dim dak As New ADODB.Connection
 Set dak = CurrentProject.Connection
can.Open "tbstudenti", dak, adOpenKeyset, adLockPessimistic, adCmdTable
Dim i As String
s1 = Me.nomeri
i = "[nomeri] = " & s1 & ""
can.Find i
If can.EOF = False Then
 DoCmd.OpenForm "Fsecdoma"
Form_Fsecdoma.Lsecdoma.Caption = "studenti am nomriT arsebobs. gTxovT CaweroT nomeri swore" & _
" Tu Tqven gadaifiqreT canaweris damateba, daaWireT klaviSs <esc>"
 Cancel = True
Me.nomeri.SetFocus
Exit Sub
End If
Me.FilterOn = False
Me.Refresh
On Error Resume Next
DoCmd.GoToRecord Record:=acLast
DoCmd.GoToRecord Record:=acNext
Me.nomeri.SetFocus
End Sub
Private Sub Rnext_Click() ’შემდეგ ჩანაწერზე გადასვლა
On Error Resume Next
DoCmd.GoToRecord Record:=acNext
End Sub

Private Sub Rpirveli_Click() ’პირველ ჩანაწერზე გადასვლა
On Error Resume Next
DoCmd.GoToRecord Record:=acFirst
End Sub
Private Sub Rprevios_Click() ’წინა ჩანაწერზე გადასვლა
On Error Resume Next
DoCmd.GoToRecord Record:=acPrevious
End Sub
Private Sub Rsek_Click()
Select Case Me.Frame1.Value
Case 1 ’ველის <ნომერი>  შეკითხვის რეჟიმში გადასვლა
Me.FilterOn = True
Me.Filter = " tbstudenti.nomeri = " & Val(Vsek) & ""
Case 2 ’ველის <გვარი>  შეკითხვის რეჟიმში გადასვლა
Me.FilterOn = True
Me.Filter = " tbstudenti.gvari Like '" & Vsek & "*'"
Case 3 ’ველის <დაბადების თვე>  შეკითხვის რეჟიმში გადასვლა
Me.FilterOn = True
Me.Filter = " month(tbstudenti.tariri) = " & Vsek & ""  'ცხრილის ველის tbstudenti.tariri ტიპია თარიღის ტიპი, ამიტომ შეგვიძლია გამოვიყენით თარიღის ფუნქციიდან დღის, თვის, წელის გამოყოფის ფუნქციები: Day(Date), Month(Date), Yser(date)
Case 4 ’ველის <დაბადების ადგილი>  შეკითხვის რეჟიმში გადასვლა
Me.FilterOn = True
Me.Filter = " tbstudenti.adgili Like '" & Vsek & "*'"
Case 5 ’ყველა ჩანაწერის ამორჩევა
Me.FilterOn = False
Me.Refresh
End Select
Me.Vsek = ""
Me.Vsek.SetFocus
End Sub

პროგრამაში Rsek_Click ძებნა ერთი ველით ხორციელდება. ხშირად საჭიროა ძებნა ორი და მეტი ველით განხორციელდეს. დაუშვათ ფორმაზე დატანილი ველების სახელებია V1, V2 და ორივე ველში ძებნისას არ ვიყენებთ Like ოპერატორს. ძებნის ოპერატორი ფორმის თვისების  Filter გამოყენებით შემდეგნაირად ჩაიწერება:
Me.Filter = " tbstudenti.nomeri >=  " & V1 & "" & " And tbstudenti.nomeri <= " & V2 & ""
ან 
Me.Filter = " tbstudenti.nomeri between  " & V1 & "" & " And " & V2 & ""
ჩაწერის ორივე სინტაქსი სწორეა და მუშაობს. ჩაწერის მეორე ფორმა უფრო მარტივია და რაც მთავარია მას VBA-ს რედაქტორი უფრო სწრაფად ამუშავებს, ამიტომ დიაპაზონიდან ამორჩევისას მიზანშეწონილია გამოყენებულ იქნეს მეორე ფორმა. 
დაუშვათ გვსურს ამორჩეულ იქნეს ყველა სტუდენტი რომლის გვარი იწყება ასოების გარკვეული თანმიმდევრებით (მაგალითად ”ლო”) და დაბადებულია გარკვეულ თვეს. ამორჩევის ოპერტორი შემდეგნაირად ჩაიწერება:
Me.Filter = " tbstudenti.gvari Like  '" & V1 & "*'" & " And  month(tbstudenti.tariri) = " & V2 & ""
მაგალითის და პროგრამის გაგრძელება იხ. შემდეგ გვერდზე