Обработка таблиц с использованием массивов, в которые переносятся элементы таблиц (Способ
Шаги:
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 (выход из Проекта).
-