Hallo,
wir müssen aus SAP zwei Tabellen exportieren und diese in Access importieren um unsere Daten leichter auswerten zu können.
Leider kommt es bei den Usern immer wieder vor, dass Sie beim abspeichern der .xlsx Dateien die Struktur / Abbau vertauschen, heißt sie speichern Abfrage 1 ab, diese ist aber eigentlich Abfrage 2 und umgekehrt.
Der Import erfolgt über ein Button. Wenn die Struktur stimmt klappt alles. Wenn halt nicht muss ich immer wieder die falsch importieren Daten löschen.
Wie kann ich die abfangen? Problem. Hinweise das Feld "Beleg" Primärschlüssel in beiden Tabellen gibt bei beiden .xlsx Dateien.
Danke für eure Hilfe.
Hallo,
wie unterscheiden sich die beiden Strukturen?
Unterschiedliche Spaltennamen sollten doch sofort zum Fehler führen!? Woran erkennst du falsch importierte Daten?
Wie erfolgt dein Import genau? Code?
Also die Daten innerhalb beiden Tabellen sind fast überall unterschiedlich.
Außer das Feld Belege.
Der Import erfolgt über eine Anfügeabfrage.
Das User klickt dann auf ein Button. Hier gibt es eine Vba Ereignis.
Dort schalte ich die Fehlermeldungen aus, da ich gerne die ganzen Rückfragen ob Datensatz anfügen etc. den User sparen möchte.
Ich sehe, dass die Datensätze nicht stimmen, wenn zum Beispiel das Feld Status "leer" ist.
Hallo,
wenn eine Laufzeitfehler ausgelöst wird, kannst du mit currentdb.execute "Deine Anfügeabfrage", dbfailonerror arbeitenund den Fehler abfangen.
Hi,
nein einen Laufzeitfehler habe ich nicht.
Hallo,
Ich würde ja erstmal nachfragen an welcher Stelle die User den Fehler machen (können),
1. beim Export aus SAP
2. beim Import in Access
3. beim Export aus Access ?
Bei 1. sehe ich keine Möglichkeit des Eingreifens.
Bei 2. könnte man vielleicht die Struktur (Feldnamen) überprüfen.
Bei 3. sollten die Objektnamen (Abfragen/Zieldateien) eigentlich "fest verdrahtet" sein.
gruss ekkehard
Hallo,
ZitatDort schalte ich die Fehlermeldungen aus
vs.
Zitatnein einen Laufzeitfehler habe ich nicht.
Zeige mal bitte den Code.
ZitatAlso die Daten innerhalb beiden Tabellen sind fast überall unterschiedlich.
Außer das Feld Belege.
Wenn das Feld "Belege" in der Anfügeabfrage vorkommt, dann muss beim Fehlen ein LZF ausgelöst werden.
Zitatschalte ich die Fehlermeldungen aus
Man braucht sich da nicht wundern, wenn User unwissend und naiv Fehler machen und wiederholen. Eigentor Nummer 1.
ZitatDas User klickt dann auf ein Button.
Wenn man das Auto gegen die Wand fährt, um dann nachfolgend den Wagen wieder zu entknittern, hat man Eigentor Nummer 2 geschossen.
Eigentlich würde man erst prüfen und danach handeln, also bei gefundenem Fehler den Import abbrechen und dafür dem User einen vernehmbaren Hinweis geben. Über eine VBA-Ereignisprozedur hat man dazu alle Möglichkeiten in der Hand.
Wenn man nicht schon den Export aus SAP überwachen kann, so kann man doch vor einer Anfügeabfrage die Tabelle auf Inhalte prüfen.
//Nachtrag: Bei zwei Abfragevarianten müsste es sinngemäß auch zwei Importvarianten geben. Dann dürfte man dem Buttonklick auch die Intelligenz mitgeben können, die vorhandene Abfrage dem richtigen Import zuzuordnen.
Dass der User einen Fehler gemacht hat und daher eine Saalrunde fällig wird, kann man ja trotzdem mitteilen.
Zitat von: Beaker s.a. am Dezember 27, 2017, 13:49:28
Hallo,
Ich würde ja erstmal nachfragen an welcher Stelle die User den Fehler machen (können),
1. beim Export aus SAP
2. beim Import in Access
3. beim Export aus Access ?
Bei 1. sehe ich keine Möglichkeit des Eingreifens.
Bei 2. könnte man vielleicht die Struktur (Feldnamen) überprüfen.
Bei 3. sollten die Objektnamen (Abfragen/Zieldateien) eigentlich "fest verdrahtet" sein.
gruss ekkehard
Hi,
das ist bereits klar. Problem nach / während 1, da der User den falschen Dateinamen abspeichert.
Deshalb brauche ich eine Prüfung vor dem Import nach Access.
Zitat von: steffen0815 am Dezember 27, 2017, 13:51:18
Hallo,ZitatDort schalte ich die Fehlermeldungen aus
vs.Zitatnein einen Laufzeitfehler habe ich nicht.
Zeige mal bitte den Code.
ZitatAlso die Daten innerhalb beiden Tabellen sind fast überall unterschiedlich.
Außer das Feld Belege.
Wenn das Feld "Belege" in der Anfügeabfrage vorkommt, dann muss beim Fehlen ein LZF ausgelöst werden.
Hier der Code:
Private Sub Import_EWMLS_Click()
If ExistiertDatei("C:\Temp\EWM_LS.xlsx") Then
MsgBox "Der Import wird gestartet!" & vbCrLf & "" & vbCrLf & "Der Vorgang kann einige Zeit im Anspruch nehmen.", vbInformation, "Achtung!"
importstart1
Else
MsgBox "Der Import wird abgebrochen" & vbCrLf & "" & vbCrLf & "Es wurde keine Importdatei gefunden.", vbInformation, "Achtung!"
End If
End Sub
Private Sub importstart1()
DoCmd.SetWarnings False
DoCmd.OpenQuery "qry_IMP_tblKPI_LS"
DoCmd.SetWarnings True
MsgBox "Neue KPI-Daten wurden importiert.", vbInformation, "Info:"
End Sub
Das Belege wird einfach importiert, da es ja Daten mit dem Feldnamen "Belege" in beiden SAP Export Dateien gibt.
Zitat von: ebs17 am Dezember 27, 2017, 14:00:32
Zitatschalte ich die Fehlermeldungen aus
Man braucht sich da nicht wundern, wenn User unwissend und naiv Fehler machen und wiederholen. Eigentor Nummer 1.
ZitatDas User klickt dann auf ein Button.
Wenn man das Auto gegen die Wand fährt, um dann nachfolgend den Wagen wieder zu entknittern, hat man Eigentor Nummer 2 geschossen.
Eigentlich würde man erst prüfen und danach handeln, also bei gefundenem Fehler den Import abbrechen und dafür dem User einen vernehmbaren Hinweis geben. Über eine VBA-Ereignisprozedur hat man dazu alle Möglichkeiten in der Hand.
Wenn man nicht schon den Export aus SAP überwachen kann, so kann man doch vor einer Anfügeabfrage die Tabelle auf Inhalte prüfen.
//Nachtrag: Bei zwei Abfragevarianten müsste es sinngemäß auch zwei Importvarianten geben. Dann dürfte man dem Buttonklick auch die Intelligenz mitgeben können, die vorhandene Abfrage dem richtigen Import zuzuordnen.
Dass der User einen Fehler gemacht hat und daher eine Saalrunde fällig wird, kann man ja trotzdem mitteilen.
Gebe dir hier voll und ganz recht. Ich würde dies gerne auch abfangen via Prüfung.
Habe nur zu wenig VBA Kenntnis um zu wissen wie dies geht.
Kannst du helfen? Vielleicht mit einem Beispiel?
Hallo,
ganz grob so:Private Sub importstart1()
on error goto Fehler
currentdb.execute "qry_IMP_tblKPI_LS",dbfailonerror
MsgBox "Neue KPI-Daten wurden importiert.", vbInformation, "Info:"
exit sub
Fehler:
msgbox "Fehler"
End Sub
Private Sub importstart1()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
' Datensätze nicht stimmen, wenn zum Beispiel das Feld Status "leer" ist
Set rs = db.OpenRecordset( _
"SELECT Status FROM Importtabelle WHERE Status Is NULL", _
dbOpenForwardOnly)
If rs.EOF Then
db.Execute "qry_IMP_tblKPI_LS", dbFailOnError
MsgBox db.RecordsAffected & " Datensätze wurden importiert.", vbInformation, "Info:"
Else
' Fehlerdatensätze vorhanden => Meldung
End If
rs.Close
End Sub
Das wäre jetzt ein Programmlauf mit vorheriger Datenprüfung, im Unterschied zur Programmsteuerung per Fehler + Fehlerbehandlung.
Unterlasse bitte das vollständige Zitieren von Beiträgen. Die Forenteilnehmer beherrschen Anwendung von Maus und Scrollbalken und können sich auch so die Vorbeiträge vergegenwärtigen.
@ebs17
alles klar wird gemacht.
@alle
Vielen Dank. Ich teste dies mal morgen.