თავი 6.  მონაცემების დამატება,  განახლება,  წაშლა,  ასლის აღება

მონაცემებში ცვლილებების შეტანა (განახლება) და ამოშლა
 
ჩანაწერების ამოშლა
      შესაძლებელია ცხრილიდან შერჩეული სტრიქონების ამოშლა ან ყველა სტრიქონის ამოშლა. ამოშლის ინსტრუქცია იწყება ოპერატორით DELETE. თუ მოცემული ცხრილი დაკავშირებულია სხვა ცხრილთან კავშირით 1:M და ამოშლას ვახორციელებთ კავშირის მხრიდან ერთი, მაშინ კავშირის მხრიდან MMარსებული ცხრილიდან ამოიშლება ამ ჩანაწერთან დაკავშირებული სხვა ჩანაწერებიც. მაგალითში ნაჩვენებია ამორჩევით სტრიქონების ამოშლა. ცხრილთან tbstudenti დაკავში-რებულია ცხრილი tbsaati  ბაზის მთლიანობის და კასკადური განახლების თვისებების მითითებით, ამიტომ ცხრილიდან tbsaati   ამოშლილი იქნება ჩანაწერები რომელთა მნიშვნელობები ველში nomeri 12-ის და 18-ის ტოლია. 
 
DELETE tbstudenti.nomeri, tbstudenti.gvari, tbstudenti.saxeli, tbstudenti.kursi, tbstudenti.jgufi
FROM tbstudenti
WHERE (((tbstudenti.nomeri) In (12,18)))
 
ცვლილებების შეტანა
     ცვლილებების შეტანა შესაძლებელია: ამორჩეული ჩანაწერების ცალკეულ ველებში ან ჩანაწერების ყველა ველში. შესაძლებელია ანალოგიური ცვლილებების განხორციელება ცხრილის ყველა სტრიქონისათვის. ცვლილებები ხორციელდება ოპერატორით UPDATE. მისი ჩაწერის სინტაქსი შემდეგია: UPDATE<ცხრილის სახელი, რომელშიც ცვლილებები ხორციელდება><Set> <სვეტების სახელები და მათი შეცვლილი მნიშვნელობები> <ამორჩევის პირობა, რომელიც გვიჩვენებს იმ ჩანაწერებს, რომლებშიც ცვლილება უნდა გახორციელდეს> 
UPDATE tbstudenti
Set saxeli='giorgi'
WHERE nomeri =13
ცხრილში tbstudenti ჩანაწერში ნომრით 13 არსებული სახელი "გოგა" შეიცვლება სახელით "გიორგი"
UPDATE tbstudenti
Set saxeli='giorgi', kursi=2
WHERE nomeri =13
ცხრილში tbstudenti ჩანაწერში ნომრით 13 არსებული სახელი "გოგა" შეიცვლება სახელით "გიორგი" და კურსის მნიშვნელობა 1 შეიცვლება 2-ით.
UPDATE tbstudenti
Set  kursi=NULL
WHERE nomeri =13
ცხრილში tbstudenti ჩანაწერში ნომრით 13 კურსის მნიშვნელობაში არაფერი არ ჩაიწერება.
აქ მოტანილ მაგალითებში ყველგან გამოიყენება ამორჩევის ოპერატორი WHERE, ამიტომ ცვლილებების შეტანა, ამოშლა ხორციელდება ამორჩევის პირობების გათვალისწინებით. თუ არ იქნება მითითებული ამორჩევის ოპერატორი  WHERE, მაშინ ცვლილების დროს ცვლილება განხორციელდება ცხრილში არსებულ ყველა ჩანაწერში, ხოლო ამოშლისას - ამოიშლება ცხრილში არსებული ყველა ჩანაწერი. 
პროგრამაში ამ თავში განხილულ ინსტრუქციების გამოყენაბის თავისებურებანი ნაჩვენებია მაგალითზე. გამოვიყენოთ მეხუთე თავში მოტანილი ბაზა, რომელიც ოთხი ურთიერთდაკავშირებული ცხრილებისგან შედგება/სურ. 17/.

სურ. 17. დაკავშირებული ცხრილები                                             სურ. 18. ფორმა დაპროექტების რეჟიმში
  1. ცხრილში tbmoduli მოცემულია ფაკულტეტზე არსებული მოდულების ნუსხა. ცხრილში გასაღებია ველი სახელით modulinom;
  2. ცხრილი tbsagani შეიცავს ინფორმაციას მოდულში შემავალი საგნების ნუსხას. ცხრილში გასაღებია ველი სახელით saganinom;
  3. ცხრილი tbsaganinum გვიჩვენებს სტუდენტების მიერ საგნების არჩევას. ცხრილში გასაღებია ველები: saganinom, studentinom;
  4. ცხრილში tbstudenti წამოდგენილია მონაცემები სტუდენტის შესახებ - გასაღებია ველი nomeri.  
დავპროექტოთ ფორმა. ფორმაზე დატანილი მართვის ელემენტების სახელები და დანიშნულება მოცემულია ცხრილში 6. 

მართვის ელემენტი და მისი სახელი ფორმაზე
მართვის ელემენტის დანიშნულება
TextBox-nomeri
მონაცემების ჩაწერა
TextBox-gvari
მონაცემების ჩაწერა
TextBox-tariri
მონაცემების ჩაწერა
TextBox-adgili
მონაცემების ჩაწერა
Button- Rsek
პროგრამის გამოძახება
TextBox-Vsek
შეკითხვის მიცემა
Frame-Frame0
ოპერაციის რეჟიმის შერჩევა
ListBox-Lsia
შედეგის დათვალიერება
ფორმა დაპროექტების რეჟიმში შემდეგია/სურ. 18/
ფორმაზე/სურ.. 18/ დატანილი მართვის ელემენტებით ხორციელდება ჩანაწერების დამატება, რედაქტირება და ამოშლა ცხრილში tbstudenti.  ამ ოპერაციების შესრულებას უზრუნველყოფს პროგრამა ჩაწერილი ფორმის მოდულში, რომლის აქტივიზაცია ხორციელდება ფორმაზე დატანილ ღილაკზე Rsek  დაწკაპუნებით. 
Private Sub Form_Load() ’ ფორმის ჩატვირთვის შემდეგ ListBox-ში, რომლის სახელია Lsia  გამოიტანება ცხრილში tbstudenti არსებული ჩანაწერები
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 4
.ColumnWidths = "1,5in;2,5in;1,4in;2,2in;"
.RowSourceType = "Table/Query"
.RowSource = "tbstudenti"
End With
End Sub

Private Sub Rsek_Click()
Select Case Me.Frame0.Value
Case 1 ’ჩანაწერების დამატების რეჟიმი
DoCmd.SetWarnings False 
If IsNull(Me.nomeri) Then ’შემოწმება ველში nomeri მონაცემების არსებობის შესახებ
 DoCmd.OpenForm "Fsecdoma" ’ ველში nomeri მონაცემების არარსებობისას შეტყობინების გამოტანა მონაცმების ჩაწერის აუცილებლობის შესახებ
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  ’ცხრილში tbstudenti  მოცემული გასაღების მნიშვნელობის მქონე ჩანაწერის მოძებნა. გასაღებია ველი სახელით   nomeri. იგივე სახელი ქვია ფორმაზე დატანილ ველს
’ 
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
DoCmd.RunSQL "Insert Into tbstudenti(nomeri,gvari,tariri,adgili)"  Values(" & nomeri & ", '" & gvari & " ',  '" & tariri & " ' , '" & adgili & "')"
 ' ცხრილში ახალი ჩანაწერის დამატება
ყურადღება მიაქციეთ ფორმაზე დატანილ ველებში ცხრილში tbstudenti მნიშვნელობების ჩაწერის სინტაქსს. Values-ს შემდეგ ფრჩხილებში ნაჩვენებია ფორმაზე დატანილი ველების სახელები. თუ შეიტანება ტექსტური ან თარიღის ტიპის მონაცემი, მაშინ ამ ველის სახელი მოთავსებულია აპოსტროფებში (მაგ. '" & gvari & "') 
Case 4
’ ცხრილიდან tbstudenti ჩანაწერების ამოშლა 
ამოიშლება პირობაში მითითებული ჩანაწერები. ამოშლა ხორციელდება გასაღების მნიშვნელობის მითითებით. ცხრილი tbstudenti დაკავშირებულია ცხრილთან tbstusagani 1:M კავშირით, ამიტომ ცხრილიდან tbstudenti ჩანაწერის ამოშლა ავტომატურად იწვევს მასთან დაკავშირებული ცხრილიდან tbstudenti ამოშლილ ჩანაწერთან დაკავშირებულ ყველა ჩანაწერის ამოშლას
DoCmd.RunSQL "Delete tbstudenti.nomeri, tbstudenti.gvari, tbstudenti.tariri, tbstudenti.adgili" & _
" FROM tbstudenti" & _
" WHERE tbstudenti.nomeri In " & Me.Vsek & ""
Case 5
' ცვლილებების შეტანა
DoCmd.RunSQL "Update tbstudenti Set gvari= '" & gvari & "'", tariri = " & tariri &   WHERE nomeri = " & Me.Vsek & ""
End Select
’ შედეგის ვიზუალიზაცია ListBox-ზე
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 4
.ColumnWidths = "1,5in;2,5in;1,4in;2,2in;"
.RowSourceType = "Table/Query"
.RowSource = "tbstudenti"
End With
End Sub