Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Importabfrage - falsche Struktur

Begonnen von Brusellise, Dezember 27, 2017, 11:45:12

⏪ vorheriges - nächstes ⏩

Brusellise

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.

steffen0815

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?
Gruß Steffen

Brusellise

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.

steffen0815

Hallo,
wenn eine Laufzeitfehler ausgelöst wird, kannst du mit currentdb.execute "Deine Anfügeabfrage", dbfailonerror arbeitenund den Fehler abfangen.
Gruß Steffen

Brusellise

Hi,

nein einen Laufzeitfehler habe ich nicht.

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

steffen0815

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.
Gruß Steffen

ebs17

#7
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.
Mit freundlichem Glück Auf!

Eberhard

Brusellise

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.

Brusellise

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.

Brusellise

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?

steffen0815

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
Gruß Steffen

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard

Brusellise

@ebs17

alles klar wird gemacht.


@alle

Vielen Dank. Ich teste dies mal morgen.