Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Практическое использование MS Access


Информационный Канал Subscribe.Ru


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
    

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное