Neuen Datensatz in Access anlegen mit VBA in Excel

  • Access

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Neuen Datensatz in Access anlegen mit VBA in Excel

    Hallo zusammen,

    ich benutze WIN7, Excel2007 und Access2007.

    Mit VBA in Excel greife ich auf eine Access DB zu:

    Sub DBtest()

    Dim objADODBConn, objRecordSet As Object
    Dim strDBTabelle, strDBName As String

    strDBName = "C:\TEST.accdb"
    strDBTabelle = "Feld1"

    'Verbindung zur Datenbank
    Set objADODBConn = CreateObject("ADODB.Connection") 'LateBinding daher ohne Verweis
    With objADODBConn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Properties("Persist Security Info") = "False"
    .Properties("Data Source") = strDBName
    .Open
    End With

    'RecordSet öffnen
    Set objRecordSet = CreateObject("ADODB.RecordSet") 'LateBinding daher ohne Verweis
    With objRecordSet
    .CursorLocation = 3 'adUseClient
    .CursorType = 2 'adOpenDynamic
    .LockType = 3 'adLockOptimistic
    .Open strDBTabelle, objADODBConn
    .Filter = "ID=1"
    End With

    'Daten in DB schreiben
    If Not objRecordSet.EOF Then
    objRecordSet.Fields("Name") = "TestName"
    objRecordSet.Update
    End If

    'DB schließen
    objRecordSet.Close
    objADODBConn.Close

    Set objRecordSet = Nothing
    Set objADODBConn = Nothing

    End Sub

    Jetzt will ich einen neuen Datensatz anlegen bzw einen Datensatz löschen.

    Wie könnte der Code aussehen?

    Vielen Dank im Voraus

    AbsolutBeginner
    Ich verwende für die Arbeit mit der Datenbank immer SQL-Befehle.
    Diese kannst du direkt an die Verbindung übergeben- empfiehlt sich bei einfachen Updates, Löschen etc. Oder du arbeitest mit dem Recordset.

    Beispiel, du hast eine Tabelle Kunde, mit den folgenden Spalten:

    IDKunde
    kName
    kVorname
    kGeburstag

    Erst die Verbindung erstellen:

    Dim DBConn As ADODB.Connection
    Dim rst as ADODB.Recordset
    Dim strsql = String
    Dim IDKunde as long

    Set DBConn = New ADODB.Connection

    With DBConn
    .CursorLocation = adUseClient
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Properties("Data Source") = ThisWorkbook.Path & "\Rechungsdatenbank.accdb"
    .Open
    End With


    Mit dieser Verbindung kannst du dann arbeiten.
    Erste Möglichkeit:

    strsql = "Insert Into Kunde(kName,kVorname,kGeburtstag) Values ('Meyer', 'Hans', #2016-14-12#)"
    set rst = DBConn.Execute (strsql)

    Funktioniert auch mit allen Access-möglichen Befehlen (Update, Delete etc.)

    set rst = DBConn.Execute ("Delete * from Kunde where IDKunde = " & IDKunde)

    Set rst = Nothing

    DBConn.Close
    Set DBConn = Nothing

    oder in der Arbeit mit dem Recordset:

    strsql = "Select * from Kunde"

    Set rst = New ADODB.Recordset

    rst.Open strsql, DBConn, adOpenKeyset, adLockOptimistic
    If (rst.EOF And rst.BOF) Then
    With rst
    .AddNew
    !kName = "Meyer"
    !kVorname = "Hans"
    !kGeburtstag = "#2015-12-02#"
    .Update
    .MoveLast
    IDKunde = !IDKunde
    .Close
    End With
    End If

    Set rst = Nothing
    DBConn.Close
    set DBConn = Nothing

    Bei Updates übergibst du den string

    strsql = "Update * from Kunde where IDKunde = " & IDKunde

    Set rst = New ADODB.Recordsetrst.Open strsql, DBConn, adOpenKeyset, adLockOptimistic

    If not rst.Eof Then

    With rst

    !kName = "Meyer"
    !kVorname = "Hans"
    !kGeburtstag = "#2015-12-02#"
    .Update
    .Close
    End With
    End If

    Set rst = Nothing
    DBConn.Close
    set DBConn = Nothing

    Mono schrieb:

    Und wie archiviert ihr dann alte Daten?
    Eigentlich nie.
    Wir arbeiten selten mit Daten, die verfallen.
    Wir haben Datenbanken, die 20 Jahre alte Daten beinhalten.
    Und manchmal werden die tatsächlich noch benötigt für Backtesting.

    Kommt wohl auf die Anforderung an.
    Aber wie gesagt, ich kann mich nicht daran erinnern, innerhalb eines Programms ein DELETE verwendet zu haben.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --