Интегрированная среда VB 6.0 обработки баз данных
Элемент управления Data. Основные свойства
Элемент управления
Data обеспечивает связь проекта VB (его программы) с Базой Данных, позволяя получить доступ к записям одной таблицы БД. Несколько элементов
Data позволят обеспечить доступ ко всем таблицам многотабличной БД.
Элемент
Data 
вызывается обычным образом из панели элементов управления
Toolbox на форму (рис. 6.1):
Кнопка Last позволяет сразу
переходить к последней записи
таблицы БД
Кнопка First Кнопка Previous Кнопка Next
вызывает
позволяет сразу вызывает переход переход к следующей записи
переходить к к предыдущей записи таблицы БД
первой записи таблицы БД
таблицы БД
Рис. 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 – устанавливает источник Данных
:

имя таблицы БД (источник записей)
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.
Методы элемента 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 информационная связь между формами осуществляется через
глобальные переменные, и в первую очередь, через массивы
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.
Рис. 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, мощным инструментом для выполнения
разнообразнейших операций с
Базами Данных.