თავი 2. ADO-ს ობიექტური მოდელი

სიობრივ  მართვის ელემენტებში ამორჩევის შედეგების გამოტანა

Access 2007-ის ობიექტებს: ფორმებს, ანგარიშგებებს, მართვის ელემენტებს ListBox-ს და ComboBox-ს გააჩნიათ თვისება Recordset. ამის გამო ეს ობიექტები შეიძლება უშუალოდ დაკავშირებულნი იქნენ გარკვეული კრიტერიუმით ამორჩეულ მონაცემების ერთობლიობასთან.
განვიხილოთ ფორმის და სიობრივი მართვის ელემენტების (ListBox, ComboBox) თვისების Recordset გამოყენებით მონაცემების ბაზიდან  მონაცემების ამორჩევის მაგალითები.
სიობრივი მართვის ელემენტების თვისებებით Row Source Type (სტრიქონების წყაროს ტიპი) და Row Source (სტრიქონების წყარო) პროგრამულად ხორციელდება ამ ელემენტების მონაცემებით შევსების მართვა. Row Source Type-ში მიეთითება მონაცემების წყაროს ტიპი, კერძოდ/ცხრ. 2.9/:


  • თუ Row Source Type-ში მითითებულია “Table/Query”, მაშინ Row Source-ში უნდა იქნეს ჩაწერილი ცხრილის სახელი, შეკითხვა ან SQL-ის ინსტრუქცია;
  • თუ Row Source Type-ში მითითებულია “Value List”, მაშინ Row Source-Si უნდა იქნეს ჩაწერილი სიის სტრიქონების მნიშვნელობები. სიაში მნიშვნელობები გამოყოფილ უნდა იქნენ სიმონაცემთა ბაზაოლოთი “;” (წერტილ-მძიმე). მაგ. ლომია; ლომიძე და ა. შ.;
  • თუ Row Source Type-ში მითითებულია “Table/Query”, მაშინაც Row Source-ში უნდა იქნეს ჩაწერილი ცხრილის სახელი, შეკითხვა ან SQL-ის ინსტრუქცია. ამ ტიპის გამოყენებას აზრი არ აქვს, მაგრამ იგი გათვალისწინებულია სისტემაში, იმიტომ, რომ ზოგიერთი პროგრამა ,,ოსტატის” მუშაობის საფუძველი ეს ტიპია.

მაგალითი 2.3 - სიობრივ მართვის ელემენტში ListBox-ში ცხრილში არსებული ყველა ჩანაწერების გამოტანა
დააპროექტეთ ფორმა, დაიტანეთ მასზედ მართვის ელემენტები და მიანიჭეთ სახელები: ListBox-ს - Lsia,  CommandButton-ს - Rgan. ფორმის მოდულში ჩაწერეთ პროგრამა:

Private Sub Rgan_Click() ’პროგრამა დაკავშირებულია CommandButton-ის მოვლენასთან Click
Dim kit As String 
kit = “select * From tbstudenti”
With Me.Lsia
.ColumnCount = 5 ’სიაში გამოსატანი სვეტების რაოდენობა
.ColumnHeads = True
.ColumnWidths = „1in;1.5in;1.2in;0.5in;0.5in“ ’ სიაში სვეტების სიგანის დაყენება. ზომა მითითებულია დიუმში (1დიუმი=2,54სმ)
.RowSourceType = “Table/Query”
.RowSource = kit
End With
End Sub   
პროგრამის მუშაობის შედეგი ნაჩვენებია სურათზე 2.2

 მონაცემების წყარო        

  მონაცემების წყაროს შესასიტყვი VBA-ს სტრიქონი
ცხრილი ან შეკითხვა
“Table/Query”
მნიშვნელობების სია
“Value List”
ველების სია
“Field List”
                                                                  სურ. 2.2 ცხრილიდან tbstudenti ამორჩეული მონაცემები
მაგალითი 2.4 - სიობრივ მართვის ელემენტში ListBox-ში ჩანაწერების გამოტანა ამორჩევით
პირველ მაგალითში ცხრილიდან ამორჩეულ იქნა ცხრილში არსებული ყველა ჩანაწერი. ახლა ცხრილიდან ამოარჩიეთ მონაცემები მხოლოდ იმ სტუდენტების შესახებ, რომელთა გვარია ”ლომიძე”. ფორმაზე დამატებით დაიტანეთ TextBox სახელით Vsek. ამ ველში ჩაწერეთ ,,ლომიძე”, ხოლო ფორმის მოდულში კი – პროგრამა:
Private Sub Rgan_Click()
Dim kit As String
kit = "select * From tbstudenti Where gvari = " & Vsek & ""
With Me.Lsia
.ColumnCount = 5
.ColumnHeads = True
.ColumnWidths = „1in;1.5in;1.2in;0.5in;0.5in“
.RowSourceType = „Table/Query“
.RowSource = kit
End With
End Sub  
ამოირჩევა მონაცემები სტუდენტების შესახებ გვარით ”ლომიძე”.
მაგალითი 2.5 - სიობრივ მართვის ელემენტში ListBox-ში ჩანაწერების გამოტანა ამორჩევით დაკავშირებული ცხრილებიდან განსხვავებული სიტუაციების გათვალისწინებით 
ზევით განხილულ მაგალითში 2.1-ში დაპროექტებულ ცხრილებს დავამატოთ ორი ცხრილი სახელებით tbsawyobi და tbsaqoneli, რომლებიც ორი სვეტისგან ნუმრისა და დასახელებისგან შედგება. ფორმაზე დავიტანოთ დამატებით ალმები და ჩარჩო Famor1 ამორჩევების განსახორციელებლად. ფორმის მოდულში ჩავწეროთ ამორჩევის პროგრამა, რომელიც გამოძახებული იქნება ფორმაზე დატანილ ღილაკზე Ramor-ზე დაწკაპუნებით.

Private Sub Ramor_Click()
Dim kit As String
Select Case Me.Famor1.Value
Case 1 ’ ამორჩევა საწყობში მიღებული საქონლის დასახელებით
kit = " SELECT tbsawyobi.dasaxeleba, tbsaqoneli.das, tbmireba.tariri, tbmireba.raodenoba," & _
" tbmireba.fasi" & _
" FROM tbsawyobi INNER JOIN (tbsaqoneli INNER JOIN tbmireba" & _
" ON tbsaqoneli.nomeri = tbmireba.saq_nomeri) ON tbsawyobi.nomeri = tbmireba.saw_nomeri" & _
" WHERE tbsaqoneli.das Like '" & V1 & "*'"
With Me.Lsia ’ ამორჩევის შედეგის გამოტანა ListBox-ზე
.ColumnHeads = True
.ColumnCount = 5
.ColumnWidths = "2in;2in;1,4in;1,4in;1,5in"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
'
Case 2 ' საწყობიდან ყველა დასახალების საქონლის ამორჩევა გარკვეული ნომრის მქონე საქონლის გარდა
Me.Lsia.RowSource = ""
kit = " SELECT tbmireba.saw_nomeri AS[sawyobis nomeri], tbmireba.saq_nomeri AS[saqonlis kodi], tbmireba.tariri AS[miRebis TariRi]," & _
" tbmireba.raodenoba AS[miRebuli raodenoba], tbmireba.fasi AS[SeZenis fasi] FROM tbmireba" & _
" WHERE tbmireba.saw_nomeri =  " & V1 & "" & " AND NOT(tbmireba.saq_nomeri = " & V2 & ")"
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 8
.ColumnWidths = "1,5in;1,5in;1,4in;1,8in;1,2in;1,8in;1,8in;1,5in"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
Case 3 ’გაანგარიშებითი ველების შექმნით ამორჩევა
Me.Lsia.RowSource = ""
kit = " SELECT tbmireba.saw_nomeri AS[sawyobis nomeri],tbmireba.saq_nomeri AS [saqonlis kodi], tbmireba.tariri AS[miRebis TariRi]," & _
" tbmireba.raodenoba AS[miRebuli rao-ba], tbmireba.fasi AS[SeZenis fasi], Round([tbmireba]![fasi]*0.2+[fasi],2) AS [real-is fasi]," & _
" round([raodenoba]*[fasi],2) AS [SeZenis Rir-ba], Round(([tbsaq_mireba]![fasi]*0.2+[tbmireba]![sez_fasi])*[tbmireba]![raodenoba],2) AS [real-is Rir-ba]" & _
" FROM tbmireba" & _
" WHERE tbmireba.saw_nomeri =  " & V1 & "" & " AND NOT(tbmireba.saq_nomeri = " & V2 & ")"
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 8
.ColumnWidths = "1,3in;1,3in;1,3in;1,4in;1,2in;1,2in;1,2in;1,2in"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
Case 4 ' ფორმაზე დატანილ V2 ველში ჩაწერილი საქონლის ნუმრების ჩამონათვალის მიხედვით ამორჩევა. ამავე დროს ამორჩეულ ჩანაწერებში tbsaqoneli.das და tbsawyobi.dasaxeleba ველების მნიშვნელობებს შორის სიტყვების ”ინახება საწყობში” დაწერა. შეგახსენებთ, რომ  V2 ველში ჩამონათვალი იწერება შემდეგნაირად <(><საქონლის ნუმერი><,><საქონლის ნუმერი>….<)>
Me.Lsia.RowSource = ""
kit = "SELECT tbsaqoneli.nomeri, tbsaqoneli.das+'  '+'inaxeba sawyobSi'+' '+tbsawyobi.dasaxeleba AS [dasaxeleba], tbmireba.TariRi,tbmireba.raodenoba" & _
" FROM tbsawyobi RIGHT JOIN (tbsaqoneli RIGHT JOIN tbmireba ON tbsaqoneli.nomeri=tbmireba.saq_nomeri) ON tbsawyobi.nomeri=tbmireba.saw_nomeri" & _
" WHERE tbsaqoneli.nomeri IN " & V2 & ""
With Me.Lsia
.ColumnHeads = True
.ColumnCount = 4
.ColumnWidths = "1,5in;5in;1,5in;1,4in;"
.RowSourceType = "Table/Query"
.RowSource = kit
End With
End Select
End Sub
შემდეგ გვერდზე იხ. სიობრივ მართვის ელემენტებში ამორჩევის შედეგების გამოტანა (მაგალითები)