Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1628to1632
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenexport nach Access

Datenexport nach Access
01.07.2018 16:01:38
Jürgen
Hallo zusammen,
folgendes Problem bekomme ich alleine nicht gelöst. Nachdem ich schon vergebens im Internet gesucht habe wende ich mich nunmehr an Euch.
Ich möchte Datensäte von Excel in eine Access-Datenbank schreiben..
Ein Datensatz besteht aus folgenden Spalten:
Spalte A: Datum; Spalte B: Nachname; Spalte C: Wohnort; Spalte D: Eingang; Spalte E: Ausgang
Falls der Eintrag in der Access-Datenbank bereits besteht, soll dieser überschrieben werden, falls nicht, neu angelegt werden
Ich habe im Internet nun ein Makro gefunden, dass dieses schon annähernd löst.
Nur benötige ich die Suchabfrage nicht nur für 1 Feld, sondern für 3 Felder, also das Datum, den Nachnamen und den Wohnort. Dieses soll überprüft werden, ob Daten bereits vorhanden sind.
Vielen Dank.
Hier die Prozedur:
Sub Uebertragen()
Dim Datenbank As Object
Dim RS As Object
Dim strPath As String
Dim suchText As String
Dim Abfrage As String
On Error Resume Next
Set Datenbank = CreateObject("DAO.DBEngine.36")
If Datenbank Is Nothing Then
Set Datenbank = CreateObject("DAO.DBEngine.120")
'Set Datenbank = CreateObject("DAO.DBEngine.35")
End If
If Datenbank Is Nothing Then
MsgBox "Fehlende Komponenten!", vbCritical, "schwerer Programmfehler!"
End
End If
On Error GoTo 0
strPath = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\")
Set Datenbank = Datenbank.OpenDatabase(strPath & "\Datenbank1.mdb", False, False)
Set RS = Datenbank.OpenRecordset("SELECT * FROM Daten")
suchText = "Datum Like '" & Worksheets("Datenbank").Range("A2").Text & "'"
With RS 'Recortset
.FindFirst suchText
If .NoMatch Or (.EOF And .BOF) Then
'DS mit dieser ID nicht gefunden
.AddNew
.Fields(0) = Worksheets("Datenbank").Range("A2")
Else
'vorhanden wird Bearbeitet
.Edit
End If
.Fields(1) = Worksheets("Datenbank").Range("B2")
.Fields(2) = Worksheets("Datenbank").Range("C2")
.Fields(3) = Worksheets("Datenbank").Range("D2")
.Fields(4) = Worksheets("Datenbank").Range("E2")
.Update
.Close
End With
End Sub

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenexport nach Access
02.07.2018 08:35:14
Rob
Guten Morgen Jürgen,
bin kein Datenbank-Experte aber kann man nicht für jedes weitere Feld eine neue Such-Schleife einrichten?

Dim SuchText As String
Dim SuchtText2 As String
Dim SuchText3 As String
SuchText = "[Datum] Like '" & Worksheets("Datenbank").Range("A2").Text & "'"
SuchText2 = "[Nachname] Like '" & Worksheets("Datenbank").Range("B2").Text & "'"
SuchText3 = "[Wohnoret] Like '" & Worksheets("Datenbank").Range("C2").Text & "'"
.FindFirst SuchText
If .NoMatch Or (.EOF And .BOF) Then
'DS mit dieser ID nicht gefunden
.AddNew
.Fields(0) = Worksheets("Datenbank").Range("A2")
Else
'vorhanden wird Bearbeitet
.Edit
End If
.FindFirst SuchText2
If .NoMatch Or (.EOF And .BOF) Then
'DS mit dieser ID nicht gefunden
.AddNew
.Fields(1) = Worksheets("Datenbank").Range("B2")
Else
'vorhanden wird Bearbeitet
.Edit
End If
.FindFirst SuchText3
If .NoMatch Or (.EOF And .BOF) Then
'DS mit dieser ID nicht gefunden
.AddNew
.Fields(2) = Worksheets("Datenbank").Range("C2")
Else
'vorhanden wird Bearbeitet
.Edit
End If

Anzeige
AW: Datenexport nach Access
02.07.2018 09:57:10
JoWE
Hallo Jürgen,
vllt. so:
Option Explicit
Sub Uebertragen()
Dim Datenbank As Object
Dim RS As Object
Dim SP As Long
Dim strPath As String
Dim suchText As String
On Error Resume Next
Set Datenbank = CreateObject("DAO.DBEngine.36")
If Datenbank Is Nothing Then
Set Datenbank = CreateObject("DAO.DBEngine.35")
End If
If Datenbank Is Nothing Then
MsgBox "Fehlende Komponenten!", vbCritical, "schwerer Programmfehler!"
End
End If
On Error GoTo 0
strPath = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\")
Set Datenbank = Datenbank.OpenDatabase(strPath & "\Datenbank1.mdb", False, False)
Set RS = Datenbank.OpenRecordset("SELECT * FROM Tabelle1")
For SP = 2 To 5 'hier anpassen über wieviele Spalten die Schleife gehen soll
suchText = "ID Like '" & Worksheets("Datenbank").Cells(2, SP).Text & "'"
With RS 'Recordset
.FindFirst suchText
If .NoMatch Or (.EOF And .BOF) Then
'DS mit dieser ID nicht gefunden
MsgBox "DS '" & suchText & "' ist nicht vorhanden, wird in Datenbank geschrieben!"
.AddNew
.Fields(0) = Worksheets("Datenbank").Range("A2") ' ID
.Fields(1) = Worksheets("Datenbank").Range("B2") ' BEZEICHNUN
.Fields(2) = Worksheets("Datenbank").Range("C2") ' Typ
Else
'DS gefunden
MsgBox "Abbruch! DS '" & suchText & "' ist bereits in DB vorhanden!"
.Edit
.Fields(1) = Worksheets("Datenbank").Range("B2") ' BEZEICHNUN
.Fields(2) = Worksheets("Datenbank").Range("C2") ' Typ
End If
.Update
End With
Next
RS.Close
End Sub

Gruß
Jochen
Anzeige
AW: Datenexport nach Access
02.07.2018 12:26:16
Ehnle
Hallo zusammen,
erstmal vielen Dank.
Leider lösen dieses zwei Ansätze mein Problem nicht.
Es muss immer der komplette Datensatz betrachtet werden und nicht die einzelnen Spalten.
Ein Datensatz besteht aus Datum, Nachname, Wohnort, Eingang und Ausgang.
Wenn nun in der Datenbank das Datum, der Nachname, der Wohnort schon vorhanden ist, wird der vorhandene Datensatz editiert, anderfalls ein neuer hinzugefügt.
Ich hoffe ihr versteht mein Problem. Die Suchanfrage soll gemeinsam auf einen Datensatz angewendet werden.
AW: Datenexport nach Access
02.07.2018 12:55:39
PeterK
Hallo
Du musst den "SELECT" Befehl entsprechend anpassen (Stichwort: SQL bzw. SQL-Ansicht einer Abfrage in ACCESS):

SELECT * from Daten WEHRE Datum='Wert A2" AND Nachname='Wert B2' AND Wohnort='Wert C2'
Du bekommst dann entweder ein leeres RS (weil kein entsprechender Datensatz gefunden wurde) oder genau das Record das Du ändern möchtest.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige