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

advertisement
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
СОДЕРЖАНИЕ
6. ЛЕКЦИЯ 6. ИНТЕГРИРОВАННАЯ СРЕДА VB 6.0 ОБРАБОТКИ БАЗ
ДАННЫХ .................................................................................................................... 2
6.1. Возможности среды VISUAL BASIC 6.0 по обработке Баз данных .................................. 2
6.2. Доступ к базам данных с использованием элемента управления Data .............................. 2
6.2.1. Элемент управления Data. Основные свойства ............................................................. 2
6.2.2. Методы элемента Data ..................................................................................................... 4
6.3. Обработка однотабличной БД с помощью элемента Data .................................................. 4
6.3.1. Способ 1 (обработка таблицы с использованием массива, в который переносятся
элементы таблицы) ..................................................................................................................... 5
6.3.2. Способ 2 (непосредственная обработка таблицы) ....................................................... 7
6.4. Обработка двухтабличной БД с помощью элемента DATA ............................................... 8
6.4.1. Обработка таблиц с использованием массивов, в которые переносятся элементы
таблиц (Способ 1) ....................................................................................................................... 9
6.4.2. Способ 2 (непосредственная обработка таблиц) ....................................................... 13
1
Барковский В. В. Лекции
6. ЛЕКЦИЯ 6. ИНТЕГРИРОВАННАЯ СРЕДА VB 6.0 ОБРАБОТКИ
БАЗ ДАННЫХ
6.1. Возможности среды VISUAL BASIC 6.0 по обработке Баз данных
После создания Базы Данных очередной становится задача организации её обработки с
целью получения нужной информации. Имеется несколько вариантов работы:
 доступ к Базам Данных через элемент управления Data;
 доступ к Базам Данных с использованием языка SQL (Structured Query
Language - Структурированный Язык Запросов);
 доступ к Базам Данных с использованием других средств.
Рассмотрим доступ, основывающийся на операциях с элементом управления Data,
мощным инструментом для выполнения разнообразнейших операций с Базами Данных.
6.2. Доступ к базам данных с использованием элемента управления
Data
6.2.1. Элемент управления Data. Основные свойства
Элемент управления Data обеспечивает связь проекта VB (его программы) с Базой
Данных, позволяя получить доступ к записям одной таблицы БД. Несколько элементов Data
позволят обеспечить доступ ко всем таблицам многотабличной БД.
Элемент Data
вызывается обычным образом из панели элементов управления
Toolbox на форму (рис. 6.1):
Кнопка Last позволяет сразу
переходить к последней записи
таблицы БД
Кнопка First
позволяет сразу
переходить к
первой записи
таблицы БД
Кнопка Previous
вызывает переход
к предыдущей записи
таблицы БД
Кнопка Next вызывает
переход к следующей записи
таблицы БД
Рис. 6.1. Экранная форма с элементом Управления Data
Указатель (внутренняя переменная) БД позволяет выбрать текущую запись и текущее
поле в записи. При просмотре на форме в режиме проектирования указатель по записям можно
перемещать с помощью кнопок элемента Data, по элементам (полям) – с помощью мыши.
При работе программы VB перемещение по записям (и полям) осуществляется
специальными командами.
Совместно с элементом Data используются и совокупность других элементов управления
Label, TextBox или ListBox. Каждый из совокупности этих элементов (объектов) связывается с
2
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
определенным полем таблицы БД, показывая содержание поля. Поэтому их называют
связанными объектами.
Связанных объектов может быть столько, сколько полей в таблице (или меньше, если не
все поля нас интересуют).
При перемещении указателя таблицы с помощью кнопок Data связанные объекты
обновляют свое содержание.
Свойства элемента Data:
Caption - Имя объекта данных (имя таблицы базы данных, например, Postavka).
Name – Имя элемента в программе. По умолчанию Data1, Data2, 
Font - выбор шрифта для текста, размещаемого на элементе Data.
Connect – указывает тип формата Базы данных (например, формат системы
Access устанавливается по умолчанию).
*DataBaseName – устанавливает полный путь к файлу, где записана База Данных
(например, H:\SKLAD, где H – имя рабочего диска, SKLAD –
имя БД).
RecordSource – устанавливает источник Данных:
имя таблицы БД (источник записей)
RecordSource = Text1.Text (имя элемента, в котором
источник
записан Запрос)
Данных
Запрос (SQL - оператор)
Свойство RecordSource (Источник записей) позволяет использовать операторы
языка SQL), обеспечивающие выделение подмножества записей, удовлетворяющих
заданным условиям, например:
RecordSource = “Select * From Postavka Where NameIzd = ‘Дисплей’ ”
RecordSetType – устанавливает тип источника (набора) данных:
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.
3
Барковский В. В. Лекции
6.2.2. Методы элемента 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
‘искомое среднее значение
...
6.3. Обработка однотабличной БД с помощью элемента Data
Пусть имеется поквартальная таблица поставок Postavka комплектующих (объём
поставки в рублях):
Таблица поставок комплектующих (Postavka)
Шифр
Наименование Поставка Поставка Поставка Поставка
изделия
изделия
в 1-м кв. во 2-м кв. в 3-м кв. В 4-м кв.
(ShIzd)
(NameIzd)
(Pkv1)
(Pkv2)
(Pkv3)
(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
4
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
Таблица создана средствами Visual Data Manager. В ней 8 записей. Необходимо
напечатать наименования изделий, объёмы поставок которых по кварталам монотонно падают.
6.3.1. Способ 1 (обработка таблицы с использованием массива, в который переносятся
элементы таблицы)
Способ 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;
5
Барковский В. В. Лекции
- кнопки:
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
6
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
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
‘выход из Проекта
6.3.2. Способ 2 (непосредственная обработка таблицы)
Способ 2 основывается на использовании Методов элемента управления Data,
обеспечивающих возможность непосредственной работы с таблицами Базы Данных.
Шаги:
1. Выполнить пункты 2,3,4,5 Способа 1.
7
Барковский В. В. Лекции
При создании формы 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
‘выход из Проекта
6.4. Обработка двухтабличной БД с помощью элемента DATA
Пусть созданы поквартальная таблица поставок комплектующих изделий Postavka
(см. п. 6.3) и таблица комплектующих изделий Izd.
8
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
Шифр
изделия
(ShIzd)
С15
Д84
IS22
А16
BJ
SDR
I18
B11
IS16
SDRU
Таблица комплектующих изделий (Izd)
Наименование
Цена (руб.) Вес (кг.)
(NameIzd)
(Cena)
(Ves)
Принтер
Клавиатура
Сканер
Дисплей
Картридж
Дисковод
Источник питания
Батарея
Сканер
Дисковод
27000
7500
1550
67000
875
175
75
100
175
200
3.5
1.7
1.4
7.5
0.25
0.25
0.2
0.25
0.2
0.2
В таблице Izd 10 записей.
Требуется определить и вывести на элементы формы совокупную стоимость изделий,
поставленных в 1- 4 кварталах, а также общий вес годовых поставок. Таблица Postavka
может содержать меньше изделий, чем таблица Izd. Порядок размещения записей в таблицах
произвольный.
6.4.1. Обработка таблиц с использованием массивов, в которые переносятся элементы
таблиц (Способ 1)
Шаги:
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;
9
Барковский В. В. Лекции
Связанные элементы TextBox
Элемент управления Data1
Lbl2(Указание искомого веса
или сообщения – “Таблицы не
согласованы”)
Надпись над элементом
ListBox (элемент Lbl1)
ListBox (для вывода определяемых
заданием сведений
Командная кнопка Cmd4
выхода из Проекта
Командная кнопка Cmd3
перехода на форму Form2
MSFlexGrid – Гибкая сетка с именем Flp
Командная
кнопка
Cmd1 запуска
программы передачи значений полей
таблицы Postavka в массив P и в
сетку 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 (связанные объекты);
10
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
Связанные элементы
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
11
Барковский В. В. Лекции
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 ( )
End
12
‘процедура (4), выход из Проекта
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
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
Form1.Show
End Sub
‘спрятать форму Form2
‘показать форму Form1
Действия:
- запустить Проект;
- на Form1 нажать Cmd1 (выполняется процедура считывания таблицы Postavka в
массив P и в сетку Flp), затем Cmd3 (осуществляется переход на форму Form2);
- на Form2 нажать Cmd5 (выполняется процедура считывания таблицы Izd в массив Iz
и в сетку Fli), затем Cmd6 (осуществляется переход на форму Form1);
- на Form1 нажать Cmd2 (решение задачи);
- на Form1 нажать Cmd4 (выход из Проекта).
6.4.2. Способ 2 (непосредственная обработка таблиц)
В Способе 1 информационная связь между формами осуществляется через глобальные
переменные, и в первую очередь, через массивы P и 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.
13
Барковский В. В. Лекции
Рис. 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
14
ЛЕКЦИЯ 6. Интегрированная среда VB 6.0 обработки Баз Данных
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 (выход из Проекта).
15
Download