Способ (непосредственная обработка таблиц)
В Способе 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 (выход из Проекта).