TopPicLogo TopPicText

Добавление записей (DAO)

Примечание:
    Если вы используете имена полей с пробелами (что не рекомендуется) то они должны "обрамляться" квадратными скобками  = [Имя Поля]

'Добавляет 1000 новых записей в таблицу "tblExample"
Dim v As Variant
Dim lngRecID As Long
Dim rst As Recordset
Dim i As Integer
   
    v = DMax("exRecordID", "tblExample")   'MAX значение ключевого поля
    If IsNull(v) Then v = 0                'На случай если запись первая
    lngRecID = CLng(v) + 1                 'Значение ключ. поля новой записи
    Set rst = CurrentDb.OpenRecordset("tblExample", dbOpenDynaset)
    
    For i = 1 To 1000
        With rst
            .AddNew
             'Заполнение полей значениями
            !exRecordID = lngRecID
            !exName = "Значение Записи №: " & Format(lngRecID, "0000")
            .Update
        End With
        lngRecID = lngRecID + 1
    Next i

    On Error Resume Next
    rst.Close
    Set rst = Nothing




Добавление одной записи - универсальное:

Public Function AddNewRecord(sTableName As String, _
    Optional sSubKeyField As String = "", Optional vSubKeyValue As Variant = Null) As Long
'es - 22.08.2013
'Recordset - Добавление одной записи - универсальное(DAO)
'Простое добавление одной записи в указанную таблицу с одинарным ключём
'Возвращает значение ключевого поля LONG добаленной записи или 0(НОЛЬ) в случае ошибки
'Аргументы:
'   sTableName   = Название таблицы
'   sSubKeyField = Название связанного поля (у подчинённой таблицы)
'   vSubKeyValue = Значение связанного поля
'--------------------------------------------------------------------
Dim v As Variant
Dim lRecID As Long
Dim sKeyField As String
Dim str As String
Dim rst As Recordset
On Error GoTo AddNewRecord_Err
    
'ПОЛУЧАЕМ ИМЯ КЛЮЧЕВОГО ПОЛЯ
    sKeyField = CurrentDb.TableDefs(sTableName).Indexes(0).Fields(0).Name

'Находим новое значение ключевого поля
    str = "SELECT Max(" & sKeyField & ") FROM " & sTableName
    Set rst = CurrentDb.OpenRecordset(str, dbReadOnly)
    v = rst.Fields(0)

'Новое значение ключа
    If IsNull(v) = True Then v = 0
    lRecID = v + 1
    
'Добавление Записи
    Set rst = CurrentDb.OpenRecordset(sTableName, dbOpenDynaset)
    With rst
        .AddNew
        'Заполнение полей значениями
        .Fields(sKeyField) = lRecID
        If sSubKeyField <> "" Then
            .Fields(sSubKeyField) = vSubKeyValue
        End If
        
        .Update
        End With

AddNewRecord_Bye:
    AddNewRecord = lRecID
    On Error Resume Next
    rst.Close
    Set rst = Nothing

    
    Exit Function

AddNewRecord_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in procedure AddNewRecord", vbCritical, "Error!"
    AddNewRecord = 0
    Resume AddNewRecord_Bye
End Function

Назад ToTop
L.E. 29.07.2016
Рейтинг@Mail.ru