Интегрированная среда VB 6.0 обработки баз данных

Элемент управления Data. Основные свойства 

Элемент управления  Data обеспечивает связь проекта VB (его программы) с Базой Данных, позволяя получить доступ к записям одной таблицы БД. Несколько элементов Data позволят обеспечить доступ ко всем таблицам многотабличной БД.
Элемент Data Элемент управления Data. Основные свойства  вызывается обычным образом из панели элементов управления Toolbox на форму (рис. 6.1):
Элемент управления Data. Основные свойства          





Кнопка Last позволяет сразу
переходить к последней записи
таблицы БД

Элемент управления Data. Основные свойства  Элемент управления Data. Основные свойства 





  Кнопка  First                 Кнопка Previous                            Кнопка Next
вызывает                

 позволяет сразу              вызывает переход                           переход к следующей записи           
Элемент управления Data. Основные свойства  переходить к                    к  предыдущей записи                        таблицы БД             
 первой записи                  таблицы БД                                   
Элемент управления Data. Основные свойства  таблицы  БД                                                                            
Элемент управления Data. Основные свойства                                     Рис. 6.1. Экранная форма с элементом Управления Data
Указатель (внутренняя переменная) БД позволяет выбрать текущую запись и текущее поле в записи. При просмотре на форме в режиме проектирования указатель по записям можно перемещать с помощью кнопок элемента Data, по элементам (полям) – с помощью мыши.
При работе программы VB перемещение по записям (и полям) осуществляется специальными командами.
Совместно с элементом Data используются и совокупность других элементов управления Label, TextBox или ListBox. Каждый из совокупности этих элементов (объектов) связывается с определенным полем таблицы БД, показывая содержание поля. Поэтому их называют связанными объектами.
Связанных объектов может быть столько, сколько полей в таблице (или меньше, если не все поля нас интересуют).
При перемещении указателя таблицы с помощью кнопок Data связанные объекты обновляют свое содержание.
Свойства элемента Data:
            Caption -  Имя объекта данных (имя таблицы базы данных, например, Postavka).
            Name  –  Имя элемента в программе. По умолчанию Data1, Data2, ¼

Font - выбор шрифта для текста, размещаемого на элементе Data.

            Connect – указывает тип формата Базы данных (например, формат системы

                             Access устанавливается по умолчанию).

           *DataBaseName – устанавливает полный путь к файлу, где записана База Данных 

                                                (например, H:\SKLAD, где  H – имя рабочего диска, SKLAD

                                                 имя БД).

 RecordSource – устанавливает источник Данных:

Элемент управления Data. Основные свойства Элемент управления Data. Основные свойства        

                                        имя таблицы БД (источник записей)     

        RecordSource =    Text1.Text (имя элемента, в котором         источник

                                                            записан Запрос)                       Данных

                                                        Запрос (SQL - оператор)

               Свойство RecordSource (Источник записей) позволяет использовать операторы языка SQL), обеспечивающие выделение подмножества записей, удовлетворяющих заданным условиям, например:

               RecordSource = “Select  *  From Postavka Where NameIzd = ‘Дисплей’ ” 

 RecordSetTypeустанавливает тип источника (набора) данных:

Элемент управления Data. Основные свойства Элемент управления Data. Основные свойства                                      0 – Table (из таблицы - работа с полной таблицей );

    RecordSetType =     1 – Dynaset (из динамического набора, полученного в

                                                          результате выполнения  SQL - запроса;

                                     2 – Snapshot (из моментального списка (копия данных) –

                                                              только чтение.

Для примера разместим на форме (рис. 6.1) массив из нескольких связанных элементов Text1(0), Text1(1), … Text1(k).

Далее  зададим указанные выше свойства элемента данных, которые свяжут его с БД, и свойства связанных элементов, определяющие источники информации.

Свойства связанных элементов:

          Name = Text1(0)

          DataSource = Data1        ‘источник данных (записей)

          DataField = поле1 таблицы

          Name = Text1(1)

          DataSource = Data1        ‘источник данных (записей)

          DataField = поле2 таблицы

Напоминаем, DataSource (устанавливает источник Данных для метки Label, текстового поля TextBox или списка ListBox)  и  DataField (устанавливает связь метки Label, текстового поля TextBox или списка ListBox с интересующим полем таблицы Базы Данных)  -  это свойства элементов Label, TextBox, ListBox

Методы элемента Data

Элемент Управления Data имеет большой набор методов (напоминаем, методы – это системные подпрограммы, расширяющие функциональные возможности элементов Управления) для непосредственной работы с записями таблиц БД. Методы вызываются из раскрывающегося Меню
в момент
указания свойства Name элемента Data (Data1) при  написании Программного кода и записываются с использованием разделительного символа  “.”  в виде:
       Data1.RecordSet.AddNew               – добавление новой записи в таблицу;
     *Data1.RecordSet.MoveLast             – переход к последней записи;
     *Data1.RecordSet.MoveFirst            – переход к первой записи;
     *Data1.RecordSet.MoveNext            – переход к следующей записи;
     *Data1.RecordSet.MovePrevious     – переход к предыдущей записи;
       Data1.RecordSet.Delete                   – удаление текущей записи;
       Data1.RecordSet.Edit                       – переход к редактированию записи;
 Data1.RecordSet.Update                 – передача в текущую запись введённых или
                                                                изменённых данных;
 значений;                                         Data1.RecordSet.RecordCount       – количество записей в текущей таблице;
       Data1.RecordSet.Fields (K).Value  – передача значения K-го поля текущей записи;
       Data1.RecordSet.Fields (K).Name– передача значения имени K-го поля текущей таблицы;
       Data1.RecordSet.Fields.Count        – количество столбцов текущей таблицы;
    Data1.RecordSet.Refresh      – обновление содержимого всех элементов Экранной формы,
              связанных с текущей таблицей, в соответствии с её текущим физическим состоянием;
       Data1.RecordSet.Eof                       – метка конца текущей таблицы.
Действия методов, отмеченных “*”, аналогичны действиям кнопок элемента Data.
Пример 1. Фрагмент вычисления среднего значения третьего по порядку числового поля таблицы:          . . .
         S=0
         Data1.RecordSet.MoveFirst                                 ‘первая запись стала текущей
         For I=1 To Data1.RecordSet.RecordCount         ‘по записям текущей таблицы
                S=S + Data1.RecordSet.Fields(3).Value
                Data1.RecordSet.MoveNext                          ‘к следующей записи таблицы
         Next I
         S=S/ Data1.RecordSet.RecordCount                    ‘искомое среднее значение
              . . .

Обработка двухтабличной БД с помощью элемента DATA

         Пусть созданы поквартальная таблица поставок  комплектующих изделий Postavka
(см. п. 6.3) и таблица комплектующих изделий Izd.





 Таблица  комплектующих изделий (Izd)

    Шифр
   изделия
    (ShIzd)
Наименование
    (NameIzd)
Цена (руб.)
   (Cena)
Вес (кг.)
  (Ves)
С15
Принтер
     27000
   3.5
Д84
Клавиатура
       7500
   1.7
IS22
Сканер
       1550
   1.4
А16
Дисплей
     67000
   7.5
BJ
Картридж
         875
   0.25
SDR
Дисковод
         175
   0.25
I18
Источник питания
           75
   0.2
B11
Батарея
         100 
   0.25
IS16
Сканер
         175
   0.2
SDRU
Дисковод
         200
   0.2

В таблице Izd 10 записей.
Требуется определить и вывести на элементы  формы совокупную стоимость изделий, поставленных в 1- 4 кварталах, а также общий вес годовых поставок. Таблица Postavka может содержать меньше изделий, чем таблица Izd. Порядок размещения записей в таблицах произвольный.

Обработка однотабличной БД с помощью элемента Data

      Пусть имеется поквартальная таблица поставок  Postavka комплектующих (объём поставки в рублях):
        Таблица поставок комплектующих (Postavka)                               

 Шифр изделия
 (ShIzd)
    Наименование
         изделия
        (NameIzd)
Поставка
в 1-м кв.
 (Pkv1)
 Поставка
во 2-м кв.
  (Pkv2)
Поставка
в 3-м кв.
  (Pkv3)
Поставка
В 4-м кв.
  (Pkv4)
  IS22
Сканер
30
20
40
35
  Д84
Клавиатура
60
20
50
44
  BJ
Картридж
115
212
100
90
  B11
Батарея
20
21
34
37
  I18
Источник питания
30
28
15
14
  A16
Дисплей
16
27
32
5
  C15
Принтер
5
32
27
16
  SDR
Дисковод
45
50
40
35

    Таблица создана средствами Visual Data Manager. В ней 8 записей. Необходимо напечатать наименования изделий, объёмы поставок которых по кварталам монотонно падают.

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ

             Шаги:
1. В секции General Declaration модуля объявить динамические глобальные двумер-
ные массивы, соответствующие таблицам Postavka  и  Izd, и глобальные  переменные:
             Public P () As Variant
             Public Iz () As Variant
             Public I%, J%, KztP%, KztI%, L%, F%
2. На форме Form1 расположить:
- массив элементов TextBox(Text1(0)Text1(5)) для полей записей таблицы  Postavka (связанные объекты);
- элемент данных Data1;
- кнопки : Cmd1 – для запуска процедуры передачи значений полей записей
                               таблицы  Postavka  в массив P и в сетку Flp;
                                              Cmd2 – для запуска решения задачи;
                                              Сmd3 – для перехода на форму 2;
                                              Cmd4 – для выхода из Проекта;
- метку надписи ”Стоимость” над элементом ListBox (с именем Lbl1);
- метку для указания искомого веса или сообщения “Таблицы не  согласованы”  (с именем Lbl2);
- элемент ListBox (с именем Lst1);
- элемент MSFlexGrid (с именем Flp) для отображения таблицы Postavka;
Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ                                                                                                                            Связанные элементы TextBox
Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ Элемент управления Data1
Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ                                                                                                                                                    
Lbl2(Указание искомого веса
 или сообщения – “Таблицы не
согласованы”)
Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ
  Надпись над  элементом
  ListBox (элемент Lbl1)
Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ
ListBox (для вывода определяемых

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ     заданием сведений

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособКомандная кнопка Cmd4

 выхода из  Проекта

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособКомандная кнопка Cmd3

      перехода на  форму Form2

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ
Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ


Командная кнопка Cmd1

запуска                                 программы передачи значений полей


таблиОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способцы Postavka в массив P и  в

 MSFlexGrid – Гибкая сетка с именем Flp                                                   сетку Flp

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ                                                                                                                                Командная кнопка Cmd2

                                                                                                                                      запуска решения задачи

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ Рис. 6.3.  Экранная форма для работы с БД с таблицей (Postavka)    

                                                                                                                        

                      

3. Установить свойства объекта Data1:

                  Name = Data1

                  Caption = Tаблица Postavka

                  Connect = Access

                  DataBaseName =  “H:\ . . . . .” – полный путь к файлу

                  RecordSource = Postavka – имя таблицы – источник записей

                  RecordSetType = 0

4. Установить свойства связанных элементов :

                  Name = Text1(0)

                  DataSource = Data1   - источник записей

                  DataField = ShIzd  - поле таблицы

                  Name = Text1(1)

                  DataSource = Data1

                  DataField = NameIzd

                     .  .  .

                  Name = Text1(5)

                  DataSource = Data1

                  DataField = Pkv4

5. Установить основные свойства сетки MSFlexGrid, элементов ListBox и Label :

                        Name = Flp;          Name

= List1;           Name = Lbl1;       Name = Lbl2.

                       - элемент данных Data2;


6. Создать Form2. На ней расположить:

- массив элементов TextBox (Text2(0) …Text2(3)) для полей записей

      таблицы Izd  (связанные объекты);



Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособСвязанные элементы

 TextBox       

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ



Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособЭлемент управления Data2

Командная кнопка Cmd5 для

запуска процедуры передачи

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способзначений полей записей табли-

цы Izd в массив Iz и в сетку Fli

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособКомандная кнопка  Cmd6 для

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способперехода  на форму  Frm1

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособОбработка таблиц с использованием массивов, в которые переносятся элементы таблиц (СпособMSFlexGrid – гибкая сетка

        с именем FLi

Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ




             Рис. 6.4. Экранная форма для работы с БД  (с таблицей Izd

                          - кнопки:

                            Cmd5 – для запуска процедуры передачи значений полей записей

                                          таблицы  Izd в  массив Iz и в сетку Fli;

                            Сmd6 – для перехода на форму Form1;

- элемент MSFlexGrid (с именем Fli) для отображения нужных полей

- таблицы Izd.

7. Установить свойства объекта Data2:

                 Name = Data2

                 Caption = Tаблица Izd

                 Connect = Access

                 DataBaseName = “H:\ . . . . .”  – полный путь к файлу

                 RecordSource = Izd  – имя таблицы – источник записей

                 RecordSetType = 0

8. Установить свойства связанных элементов:

                 Name = Text2(0)

                 DataSource = Data2   - источник записей

                 DataField = ShIzd  - поле таблицы

                 Name = Text2(1)

                 DataSource = Data2 

                 DataField = NameIzd

                 Name = Text2(2)

                 DataSource = Data2 

                 DataField = Cena

                 Name = Text2(3)

                 DataSource = Data2

                 DataField = Ves


9. Установить свойства сетки MSFlexGrid :

                 Name = Fli

10. Разработать  процедуры  Form1:

 Private Sub Cmd1_Click ( )     ‘процедура (1), считывание таблицы Postavka  в _

                                                        массив P   и в сетку Flp

                 Data1.RecordSet.MoveFirst    ‘ установка на первую запись таблицы Postavka

KztP =  Data1.RecordSet.RecordCount  ‘количество записей таблицы Postavka

KptP = Data.RecordSet.Fields.Count      ‘количество полей таблицы Postavka  

                 ReDim P(1 To KztP, 1 To KptP)

Flp.Rows = KztP+1 : Flp.Cols = KptP     ‘установление размеров сетки Flp

                 For I = 1 To KztP

                        For J = 1 To KptP

         If  I = 1 Then  Flp.TextMatrix(I-1, J-1) = Data1.RecordSet.Fields(J-1).Name

     P(I, J) = Text1(J-1) : Flp.TextMatrix(I, J-1) = P(I, J)   ‘или  = Text1(J-1), _

   или Data1.RecordSet.Fields(J-1).Value

                        Next J

                        Data1.RecordSet.MoveNext           ‘переход к следующей записи

                 Next I

           End Sub 

 

           Private Sub Cmd2_Click ( )  ‘процедура (2), совместная обработка таблиц БД

               Dim St(1 To 4) As Single ‘массив стоимости поставляемых изделий по кварталам 

               Dim Sh As String

, V!  ‘Sh – шифр (изделия), V–общий вес изделий искомого шифра

               KztI =  Data2.RecordSet.RecordCount  ‘количество записей таблицы Izd

               V = 0

               For L = 1 To 4       ‘обнуление массива St

                      St(L) = 0

               Next L

               For I = 1 To KtzP ‘по строкам таблицы Postavka

                                                       Sh = P(I, 1)   ‘В Sh заносится шифр изделия текущей строки таблицы Postavka

                      F = 0                 ‘флажок

                      For J = 1 To KztI                            ‘по строкам таблицы Izd


                                                                               If Iz (J, 1) = Sh Then           ‘равенство шифров в таблицах Postavka и Izd

                                  For L = 1 To 4

                                         St(L) = St(L) + P(I, L+2) * Iz(J,3)   ‘вычисление стоимости постав- _

                                                                                       ляемого искомого изделия по кварталам

                                         V = V + P(I, L+2) * Iz(J, 4) ‘вычисление общего веса изделия _

                                                                                        искомого шифра

                                  Next L

                                  F=1 : Exit For        ‘Таблицы согласованы. Данные получены. Флажок

                                                                        изменен  выход из цикла  J

                          End  If

                        Next J

                                                                                                                                    If F = 0 Then Lbl2.Caption = “Таблицы не согласованы” : Exit Sub    

                 Next I

                 Lbl2.Caption = “Искомый вес=” & Str(V)

                 For L=1 To 4

                        Lst1.List (L-1) = St(L)

                 Next L

           End Sub



           Private Sub Form1.Cmd3_Click ( )  ‘     процедура (3)

               Form1.Hide                                    ‘спрятать форму Form1

               Form2.Show                                   ‘показать форму

Form2

           End Sub

         

Private Sub Form1.Cmd4_Click ( )            ‘процедура (4), выход из Проекта

               End                        

           End Sub

    Private Sub Cmd5_Click

( ) ‘процедура (5), считывание таблицы Izd в массив Iz _

                                                          и в сетку Fli

        Data2.RecordSet.MoveFirst      ‘установка на первую запись таблицы Izd


        KztI =  Data2.RecordSet.RecordCount  ‘количество записей таблицы Izd

        KptI = Data.RecordSet.Fields.Count    ‘количество полей таблицы Izd

        ReDim Iz(1 To KztI, 1 To KptI)

        Fli.Rows = KztI +1 : Fli.Cols = KptI   ‘установление размеров сетки Fli

        For I = 1 To KztI          ‘по строкам таблицы Izd

               For J = 1 To KptI

If  I = 1 Then  Fli.TextMatrix (I-1, J-1) = Data2.RecordSet.Fields(J-1).Name  

     Iz(I, J) = Text2(J-1) : Fli.TextMatrix(I, J-1) = Iz(I, J)   ‘или  = Text2(J-1), _

   или Data2.RecordSet.Fields(J-1).Value

               Next J

               Data2.RecordSet.MoveNext                    ‘переход к следующей записи

        Next I

   End Sub



 Private Sub Cmd6_Click ( )           

       Form2.Hide                                             ‘спрятать форму Form2

       Form1.Show                                           ‘показать форму

Form1

   End Sub



Действия:

                  - запустить Проект;

               - на Form1 нажать Cmd1 ( выполняется процедура считывания таблицы Postavka  в

массив P

и в сетку Flp), затем Cmd3 (осуществляется переход на форму Form2);

            - на Form2 нажать Cmd5 (выполняется процедура считывания таблицы Izd в массив Iz и в сетку Fli),  затем Cmd6 (осуществляется переход на форму Form1);

            - на Form1 нажать Cmd2 (решение задачи);

- на Form1 нажать Cmd4 (выход из Проекта).

-

Способ (непосредственная обработка таблиц)

         В Способе 1 информационная связь между формами осуществляется через глобальные переменные, и в первую очередь, через массивы и Iz, доступные во всём Проекте.
        Система Visual Basic 6.0  не  может  осуществлять другой  связи между формами. Поэтому в  Способе 2, не использующем  глобальные массивы, мы вынуждены ограничиться одной объединённой формой (рис. 6.5), расположив на ней все элементы форм  Form1 (рис. 6.3)  и  Form2 (рис. 6.4)  Способа 1 (за исключением кнопок перехода Cmd3  и  Cmd6).
          Способ 2 основывается на использовании Методов элементов Data1 и  Data2
          Шаги:
1. Выполнить пункты Способа 1:
         2 (на форме Form1 кнопка Cmd1 должна иметь надпись “Postavka в сетку Flp”), 3, 4, 5, 
         6 (кнопка Cmd5 должна иметь надпись “Izd в сетку Fli”), 7, 8, 9.

Способ (непосредственная обработка таблиц)
   
  Рис. 6.5.  Объединённая форма для работы с двумя таблицами Postavka и Izd
     
 
2. Разработать процедуры Form1 (рис. 6.5).  
         Процедуры (1) и (2)  перепишутся в виде:
         Private Sub Cmd1_Click ( ) процедура (1), считывание таблицы Postavka  в сетку Flp
             Dim I%, J%, K%
             Data1.RecordSet.MoveFirst                 ‘переход на первую запись таблицы Postavka
             K= Data1.RecordSet.RecordCount      ‘количество записей таблицы Postavka
             L = Data1.RecordSet.Fields.Count       ‘количество полей таблицы Postavka
             Flp.Rows = K+1: Flp.Cols = L                ‘установление размеров сетки Flp
                                                                          For I = 1 To
K
                   For J = 1 To
L
   If  I=1 Then Flp. Flp.TextMatrix (I-1, J-1)=Data1.RecordSet.Fields(J-1). _
Name  
   Flp.TextMatrix
(I, J-1) = Text1(J-1) ‘или = Data1.RecordSet.Fields(J-1).Value
                       Next J
                       Data1.RecordSet.MoveNext            ‘переход к следующей записи

                 Next I

            End Sub

       

         Private Sub Cmd2_Click ( )  процедура (2), совместная обработка таблиц БД

             Dim St(1 To 4) As Single ‘ массив стоимости поставляемых изделий по кварталам 

             Dim  V!                              ‘V – общий вес изделий искомого шифра

             Dim I%, J%, F%, L% 

             V = 0

             For L = 1 To 4         ‘обнуление массива St

                    St(L) = 0

            Next L

            Data1.RecordSet.MoveFirst           ‘установка на

1-ю запись таблицы Postavka

                                                                                       For I = 1 To

Data1.RecordSet.RecordCount ‘по строкам таблицы Postavka

                                                                                              F=0         

                  Data2.RecordSet.MoveFirst     ‘установка на 1-ю запись таблицы Izd

                  For J = 1 To Data2.RecordSet.RecordCount

‘по строкам таблицы Izd

                         If  Data2.RecordSet.Fields(1).Value=Data1.RecordSet.Fields(1).Value Then

                                                                                          For

L = 1 To 4

                                                St(L)=St(L)+Data1.RecordSet.Fields(L+1).Value*  _

                                                             Data2.RecordSet.Fields(2).Value

                                                V = V + Data1.RecordSet.Fields(L+1).Value_

                                                                  Data2.RecordSet.Fields(3).Value

                                        Next L

                                        F=1 : Exit For 

                         End If

                         Data2.RecordSet.MoveNext          ‘к следующей записи таблицы Izd

                  Next J

                                                                                         If F = 0 Then Lbl2.Caption = “Таблицы не согласованы” : Exit Sub  


   аблицы не согласован                                                                Data1.RecordSet.MoveNext ‘к следующей записи таблицы Postavka

            Next I

            Lbl2.Caption = “Искомый вес=” & Str(V)

            For L=1 To 4

                   Lst1.List(L-1) = St(L)

            Next L

       End Sub

    

       Процедура  (4)  перепишется без изменений из п. 10.

       Процедура (5) будет выглядеть следующим образом:

       Private Sub Cmd1_Click ( )   ‘процедура (5), считывание таблицы Izd  в сетку Fli

                Dim I%, J%, K%

                Data2.RecordSet.MoveFirst               ‘переход на первую запись таблицы Izd

                K= Data2.RecordSet.RecordCount    ‘количество записей таблицы Izd

                L = Data2.RecordSet.Fields.Count     ‘количество полей  таблицы Izd  

Fli.Rows = K+1: Fli.Cols = L               ‘установление размеров сетки Flp

                For I = 1 To K     

                       For J = 1 To L

       If  I=1 Then Fli.TextMatrix

(I-1, J-1)=Data2.RecordSet.Fields(J-1). _

Name  

Fli.TextMatrix

(I, J-1) = Text2(J-1) ‘или = Data2.RecordSet.Fields(J-1).Value

                       Next J

                       Data2.RecordSet.MoveNext            ‘переход к следующей записи

                Next I

          End Sub

       Действия:  

                         - запустить Проект;

                   - нажать Cmd1  (считывание

таблицы Postavka  в сетку Flp);

                   -  нажать Cmd5 (считывание

таблицы  Izd  в сетку Fli);

                   - нажать Cmd2  (осуществляется совместная обработка таблиц Postavka и Izd);

                   - нажать Cmd4 (выход из Проекта).

  



Способ (непосредственная обработка таблицы)

           Способ 2  основывается на использовании Методов элемента управления Data, обеспечивающих возможность непосредственной
работы с таблицами Базы Данных.
             Шаги:
1. Выполнить пункты  2,3,4,5  Способа 1.
При создании формы Form1 (рис. 6.2) изменить надпись  командной кнопки Cmd1 – на надпись “Таблица в сетку”.
2. Разработать процедуры  Form1:
  Private Sub Cmd1_Click ( )                ‘считывание
таблицы Postavka в сетку Flp
      Dim I%, J%, K%
 Data1.RecordSet.MoveFirst            ‘переход на первую запись таблицы Postavka
 K= Data1.RecordSet.RecordCount  ‘количество записей таблицы Postavka
L = Data1.RecordSet.Fields.Count      ‘количество полей таблицы
 Flp.Rows = K+1: Flp.Cols = 6  ‘установление размеров сетки Flp
 For I = 1 To K     ‘по записям таблицы Postavka
   For J = 1 To L          ‘по полям текущей записи
        If  I = 1 Then
Flp. Flp.TextMatrix (I-1, J-1)=Data1.RecordSet.Fields(J-1). _
Name  
   Flp.TextMatrix (I, J-1) = Text1(J-1) ‘или = Data1.RecordSet.Fields(J-1).Value
   Next J
                                                                                      Data1.RecordSet.MoveNext                      ‘переход к следующей записи
  Next I
  End Sub
  Private Sub Cmd2_Click ( )          ‘нахождение изделий, объёмы поставок которых _
                                                                 по кварталам монотонно падают            
      Dim I%, J%, F%, P%
      Data1.RecordSet.MoveFirst
: P = -1
 For I = 1 To
Data1RecordSet.RecordCount
     F = 0
   For J = 2 To 4
     If Data1.RecordSet.Fields(J).Value <= Data1.RecordSet.Fields(J+1).Value
_
                             Then
F=1
   Next J
     If F = 0 Then P = P+1 : Lst1.List(P) = Data1.RecordSet.Fields(1).Value
     Data1.RecordSet.MoveNext
 Next I
        If P = -1 Then
Lbl1.Caption = “нет таких изделий” Else _
                                                                                    Lbl1.Caption=“иск.изделия”
   End Sub
    
 Private Sub Cmd3_Click ( )                        ‘выход из Проекта
           End
 End Sub

Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)

            Способ 1  основывается на использовании двумерных массивов. В эти массивы переносятся (передаются) значения полей таблиц Базы Данных.
             Шаги:
1. В секции General Declaration модуля объявить глобальный динамический двумерный  массив B, соответствующий таблице Postavka, и глобальные переменные.
                      Public B() As Variant
          Public I%, J%, K%, P%, F%
                                 Замечание: В переменной типа Variant происходит внутреннее преобразование типов в соответствии с полученным значением. Пусть А – переменная этого типа.
Пример 1 :
                А = “123”              ‘тип String – содержит строку
                            А = А+5                ‘тип Integer – содержит число 123+5= 128
                            А = А& “_рублей”           ‘тип String – содержит “128_рублей”.
                                 Пример 2 : Если необходимо сравнивать числовые значения переменных А и В,                      имеющих тип Variant, то нужно указать это в виде:
If Val
(A) < Val (B) Then ….
2. Создать форму:
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Связанные элементы TextBox     Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)

Элемент управления Data1
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)
Надпись над  элементом
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)ListBox (элемент Lbl1)
ListBox (для вывода наимено-
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)ваний найденных изделий)
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Командная кнопка Cmd1 для за
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)пуска программы передачи значений полей записей таблицы Postavka в массив B и в сетку Flp
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)Командная кнопка Cmd3
(выход из программы)

Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)


Командная кнопка Cmd2 для
 запуска решения задачи

Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)


                                                                                                             MSFlexGrid – гибкая сетка с именем Flp                                                       

Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)
Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)


      Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы)         Рис. 6.2. Экранная форма для работы с БД с одной таблицей (Postavka)

На ней расположить:
             - массив элементов TextBox (Text1(0), Text1(1), …Text1(5)) для полей записей таблицы Postavka (связанные объекты);

- элемент управления Data1;

             - кнопки:

                                       Cmd1 – для запуска процедуры передачи значений полей записей таблицы в

                                                     массив В и в сетку Flp;

                       Cmd2 – для запуска решения задачи;

                       Cmd3 – для выхода из Проекта;

       – метку:

                     Lbl1 – надпись над элементом ListBox;

              - элемент ListBox для вывода наименований найденных изделий (с именем Lst1);

        - элемент MSFlexGrid с именем Flp (Microsoft FlexGrid Control 6.0) – для отображения таблицы Postavka.

  Элемент управления MSFlexGrid обеспечивает отображение на Экранной форме таблиц БД (двумерных массивов) и существенно облегчает пользователю общение с Базой Данных. В основном наборе панели элементов управления Toolbox он не содержится. Этот элемент включён в дистрибутивное хранилище дополнительных элементов управления Components, которое можно открыть либо, как это указано в Лекции 1, или выполнив последовательность команд:                

    Меню – Проект (Project)Компоненты … (Components) – окно Components

          В окне у компоненты Microsoft FlexGrid Control 6.0  поставить галочку       и нажать OK. На панели Toolbox появится элемент управления MSFlexGrid в виде  Способ (обработка таблицы с использованием массива, в который переносятся элементы таблицы) . Затем обычным способом вызвать элемент на экранную форму и установить его размеры.

         Основные свойства элемента MSFlexGrid (его часто называют гибкой сеткой):

        Name – имя гибкой сетки в программе (по умолчанию MSFlexGrid1). Можно задать

                         Flp;

          Rows – количество строк в сетке, начиная с нуля (задаётся в окне свойств элементов

                     управления, или в программе);

          Cols – количество столбцов в сетке, начиная с нуля (задаётся в окне свойств элементов

                   управления, или в программе);

 DataSource – устанавливает источник данных для MSFlexGrid, например,


                                                    DataSource = Postavka;

 Font – выбор шрифта для текста сетки;

При использовании элемента управления  MSFlexGrid  при работе с Базами Данных ( и двумерными массивами) удобно использовать его метод TextMatrix (I, J), позволяющий определять координаты ячейки таблицы Базы Данных или массива. Метод Sort обеспечивает  упорядочение строк считанной в гибкую сетку таблицы БД по заданному полю, если в программе записано выражение в виде:

<имя сетки MSFlexGrid > .Sort = <заданное поле сетки MSFlexGrid >

например, Flp.Sort = 1.



3. Установить свойства элемента Data1:

                          *Name = Data1                                                       ‘имя элемента Data

                            Caption

= Таблица

Postavka                               ‘надпись на элементе Data1

                            Connect

= Access (или Excel, FoxPro и т.д.)    ‘тип Базы Данных

                          * DataBaseName = H:\ … - имя БД                     ‘полный путь к Базе Данных

               *RecordSource = Postavka                       ‘источник данных - имя текущей таблицы БД

               *RecordSetType = 0                       ‘режим обработки (0- из таблицы, где “*” – основные свойства элемента Data.

4. Установить свойства связанных элементов (элементов Text):

                Name = Text1(0)              ‘номер в скобках не устанавливается

      DataSource = Data1         ‘источник данных (записей)

                DataField = ShIzd              ‘поле текущей таблицы

                Name = Text1(1)

                DataSource = Data1

                DataField = NameIzd         ‘поле текущей таблицы

                      .   .   .

                Name = Text1(5)

                DataSource = Data1

                DataField = Pkv4                ‘поле текущей таблицы

5. Установить основные свойства сетки MSFlexGrid, элементов ListBox и Label (рис.6. 2).


6. Разработать процедуры  Form1:

 Private Sub Cmd1_Click ( )  ‘считывание

таблицы Postavka в массив В

и в сетку Flp

Data1.RecordSet.MoveFirst                ‘ переход на первую запись   

K = Data1.RecordSet.RecordCount    ‘количество записей таблицы Postavka

L = Data1.RecordSet.Fields.Count      ‘количество полей таблицы

     ReDim B(1 To K, 1 To L)

Flp.Rows = K+1: Flp.Cols = 6  ‘установление размеров сетки Flp

For I = 1 To

K                 ‘по записям таблицы Postavka

 For J = 1 To L ‘по полям текущей записи

      If  I = 1 Then  Flp.TextMatrix (I-1, J-1) = Data1.RecordSet.Fields(J-1).Name  

  B(I, J) = Text1(J-1) : Flp.TextMatrix(I, J-1) = B(I, J)   ‘или  = Text1(J-1)

   или Data1.RecordSet.Fields(J-1).Value

Next J

                                                                                   Data1.RecordSet.MoveNext             ‘переход к следующей записи

Next I

End Sub

       

Private Sub Cmd2_Click ( )   ‘нахождение изделий, объёмы поставок которых

                                                    по кварталам монотонно падают            

             P = -1

        For I = 1 To K

             F = 0

           For J = 3 To 5

             If B(I, J) <= B(I, J+1) Then F=1

           Next J

             If F = 0 Then P = P+1 : Lst1.List(P) = B(I, 2)

          Next I

               If P = -1 Then Lbl1.Caption

= “нет таких изделий” _

                            Else

Lbl1.Caption = “искомые изделия”

        End Sub

        Private Sub Cmd3_Click ( )    ‘выход из Проекта  

             End

        End Sub





Возможности среды VISUAL BASIC по обработке Баз данных


После создания Базы Данных очередной становится задача организации её обработки с целью получения нужной информации. Имеется несколько вариантов работы:
- доступ к Базам Данных через элемент управления Data;
- доступ к Базам Данных с использованием языка  SQL (Structured Query Language - Структурированный Язык Запросов);
- доступ к Базам Данных с использованием других средств.
Рассмотрим доступ, основывающийся на операциях с элементом управления Data, мощным инструментом для выполнения разнообразнейших операций с Базами Данных.




    Программирование: Языки - Технологии - Разработка