3. Процедура для копирования однотипных таблиц (таблиц имеющих большое количество
полей с одинаковыми названиями)Материал повышенной трудности ;)
(Все примеры тестировались в MS Access 97, для того чтобы приведенный здесь код
работал Access 2000 или XP, необходимо включить в Visual Basic поддержку
Microsoft DAO 3.6 Object Library (Tools\References...))
Зачастую в БД присутствуют таблицы хранящие сходную информацию, например,
таблица для ввода данных и таблица хранящая архив этой информации.
Следующая процедура копирует запись из одного объекта Recordset в другой, при этом
переносится информация для тех полей имена которых совпадают в обоих таблицах.
Sub CopyIt(SR As Recordset, DST As Recordset, Exep As String)
' SR - Recordset из которого копируются данные
' DST - Recordset в который копируются данные
' Exep - имя поля, которое не надо копировать, если такого поля
' нет, то надо просто передать в процедуру пустую строку
On Error GoTo Err1
Dim F1 As Field, F2 As Field
' цикл по ВСЕМ полям Recordset-ИСТОЧНИКА
For Each F1 In SR.Fields
' для всех полей кроме поля имеющего имя Exep
If F1.Name <> Exep Then
For Each F2 In DST.Fields ' цикл по ВСЕМ полям Recordset-ПРИЕМНИКА
' если имена совпадают, то копируем данные
If F2.Name = F1.Name Then
F2.Value = F1.Value
End If
Next F2
End If
Next fld1
Exit Sub
Err1:
MsgBox Error$ & " № " & Err, 16, "Ошибка при копировании:"
Exit Sub
End Sub
Пример использования процедуры CopyIt:
Dim DB As Database, RSS As Recordset, RSD As Recordset
Set DB = CurrentDb
Set RSS = DB.OpenRecordset("Таблица1", dbOpenDynaset)
Set RSD = DB.OpenRecordset("Таблица2", dbOpenDynaset)
If RSS.RecordCount > 0 Then
RSS.MoveFirst
Do Until RSS.EOF
RSD.AddNew
' копировать все поля кроме поля "СЧЕТЧ"
CopyIt(RSS, RSD, "СЧЕТЧ")
RSD.Update
RSS.MoveNext
Loop
End If
Существенным плюсом этой процедуры является то, что при добалении полей в таблицы
не надо изменять процедуры в которых копировалась информация из
одной таблицы в другую.
Минусом - относительно низкая скорость работы этой процедуры.
----------------------------------------------------------------------
Архив рассылки
Дополнительная информация, примеры программ http:\\use-access.narod.ru
Написать письмо: use-access@bk.ru