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





Lbl2(Указание искомого веса
или сообщения – “Таблицы не
согласованы”)

Надпись над элементом
ListBox (элемент Lbl1)

ListBox (для вывода определяемых





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

перехода на форму Form2
![]() |
|||
![]() |
Командная кнопка Cmd1
запуска программы передачи значений полей
табли

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


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


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


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

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





с именем 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 (выход из Проекта).
-