2015-04-17 1 views
0

У меня есть база данных доступа с некоторыми таблицами, которые обновляются ежедневно с некоторыми значениями. Мне нужны таблицы, чтобы иметь поле идентификатора, которое автоматически генерируется, когда другие значения таблицы импортируются из excel. Я хочу автоматизировать все, сохраняя кнопку и записывая код VBA. Прямо сейчас у меня есть форма, которая импортирует значение в таблицу, но она просто импортирует точное значение, которое у меня есть. Мне также нужен дополнительный столбец идентификатора, который должен быть сгенерирован автоматически при импорте. Пожалуйста, помогите мне.Добавить значения в таблицу Access из excel с идентификатором autogenerated

Лист Excel Пример:

ProductName | ProductValue 
------------+------------------ 
ABC   | 76 
SDF   | 87 

табличном

ID | ProductName | Product Value 
----+---------------+----------------- 
1 | ABC   | 76 
2 | SDF   | 87 

Excel лист обновления каждую дату с новым значением и он должен быть поставлен на доступ к базе данных с идентификатором автоматически увеличивается на единицу.

ответ

6

При создании таблицы в Access у вас есть разные параметры для типа данных новых столбцов, которые вы хотите создать. Один из типов данных называется «AutoNumber». Вот некоторая информация: http://en.wikipedia.org/wiki/AutoNumber

Задайте свой идентификатор столбца как autoNumber и сделайте его первичным ключом. Теперь каждый раз, когда вы вставляете отношение в идентификатор таблицы, автоматически увеличивается новый номер.

0

нижеследующий напишет от excel для доступа, и, как упоминалось в предыдущем комментарии, используйте autonumber в типе поля данных.

Sub LogRecord() 

Dim strSQL As Variant 
Dim accApp As Object 
Dim srcs As Variant 
Dim msg1 As Variant 


'your access db 
srcs = "C:\Documents and Settings\user\My Documents\Programs\Past Versions\Database V2.mdb" ''' Live location ''' 

strSQL = "Select * from [tablename];" 


Set accApp = GetObject(srcs, "access.Application") 
Set Db = DAO.OpenDatabase(srcs) 
Set rs = Db.OpenRecordset(strSQL) 
    accApp.Visible = False 

For clref = 1 To Range("A500000").End(xlUp).Row 
    Cells(clref, 1).Activate 

    On Error Resume Next 
     If Len(Cells(clref, 1)) >= 1 Then 
      rs.AddNew 

      rs![Field1] = Sheets("Gather").Cells(clref, 1).Value 
      rs![Field2] = Sheets("Gather").Cells(clref, 2).Value 
      rs![Field3] = Sheets("Gather").Cells(clref, 3).Value 

      rs.Update 
     End If 

    Next clref 

     If Not rs Is Nothing Then rs.Close 

     Set rs = Nothing 
     Set Db = Nothing 
     accApp.DoCmd.RunSQL strSQL 
     accApp.Application.Quit 


    End Sub 
1

Я создал таблицу Excel под названием ExcelData.xlsx с данными выборки вы поставляется отформатированный в виде таблицы:

enter image description here

Я тогда создал форму с кнопкой запуска некоторые VBA, которые будут импортировать данные в Access (название кнопки cmdImport):

enter image description here

в рамках VBA формы, я написал функцию, которая проверяет наличие таблицы или нет. Имя таблицы задается в качестве аргумента функции, то функция возвращает значение TRUE, если найдено или FALSE, если не обнаружено:

Public Function TableExists(name As String) As Boolean 

    ' A function to check whether a table exists 
    ' Pass the name of the table as the argument 
    ' the function will return TRUE if found or FALSE if not found 

    TableExists = DCount("*", "MSysObjects", "Name = '" & name & "' AND Type = 1") 

End Function 

ого затем на щелчке событии кнопки cmdImport, я иметь следующее (вы должно будет заменить некоторые вещи для вашей конкретной ситуации, например, путь к файлу и имя файла из таблицы Excel):

Private Sub cmdImport_Click() 

' 1 - Delete your Access table "tblProducts" so we can reset the Autonumber field 

    If _ 
     TableExists("tblProducts") = True _ 
    Then 

     ' Delete old "tblProducts": 
     DoCmd.DeleteObject acTable, "tblProducts" 

    Else 

     ' Do nothing as table doesn't already exist 

    End If 

' 2 - Create and define new Access table "tblProducts"... this allows us to reset the Autonumber values for the ID fields 

    Dim db As DAO.Database 
    Dim tdf As DAO.TableDef 
    Dim fldID As DAO.Field, fldProductName As DAO.Field, fldValue As DAO.Field 

    Set db = CurrentDb 

    ' Create table defintion 
    Set tdf = db.CreateTableDef("tblProducts") 

    ' Create field definitions 
    Set fldID = tdf.CreateField("ID", dbLong) 
    fldID.Attributes = dbAutoIncrField 
    fldID.Required = True 

    Set fldProductName = tdf.CreateField("ProductName", dbText) 
    fldProductName.AllowZeroLength = False 
    fldProductName.Required = True 

    Set fldValue = tdf.CreateField("ProductValue", dbText) 
    fldValue.AllowZeroLength = False 
    fldValue.Required = True 

    ' Append fields to table 
    tdf.Fields.Append fldID 
    tdf.Fields.Append fldProductName 
    tdf.Fields.Append fldValue 

    ' Append table to db 
    db.TableDefs.Append tdf 

    ' Give it a nudge 
    db.TableDefs.Refresh 
    Application.RefreshDatabaseWindow 

    ' Clean up memory 
    Set fldID = Nothing 
    Set fldProductName = Nothing 
    Set fldValue = Nothing 
    Set tdf = Nothing 
    Set db = Nothing 

' 3 - Check for the old imported data from Excel ("ExcelData") and delete it 

    If _ 
     TableExists("ExcelData") = True _ 
    Then 

     ' Delete old "Excel Data": 
     DoCmd.DeleteObject acTable, "ExcelData" 

    Else 

     ' Do nothing as table doesn't already exist 

    End If 

' 4 - Import new data from Excel ("ExcelData") 

    DoCmd.TransferSpreadsheet acImport, _ 
           9, _ 
           "ExcelData", _ 
           "C:/Your/File_Path/And_File_Name.xlsx", _ 
           -1 

' 5 - Append new data from "ExcelData" in to "tblProducts" 

    Dim sqlAppend As String 

    sqlAppend = "INSERT INTO tblProducts (ProductName, ProductValue)" _ 
       & " SELECT ExcelData.ProductName, ExcelData.ProductValue" _ 
       & " FROM ExcelData;" 

    CurrentDb.Execute sqlAppend 

End Sub 

Это должно привести в этих таблицах ..

enter image description here

..с новые данные в таблице tblProducts с идентификатором применяется:

enter image description here

Пожалуйста, обратите внимание, что этот метод полностью переписывает все, что было до того импортируемого, а затем повторно импортирует его и присваивает поле ID снова все новые данные.Это означает, что запись, которая имела, например, идентификатор 1 в предыдущем импорте, может получить другой идентификационный номер при следующем импорте в зависимости от того, изменяется ли порядок записей в электронной таблице Excel при новом импорте.

+0

спасибо за ваше решение. Я сделал это кругом. Я просто вручную импортировал его в первый раз и со следующего раза, когда я его добавлю. –

Смежные вопросы