Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Entscheidung angefügte Excel Tab DS anzufügen/zu ersetzen

Begonnen von ToBu, November 10, 2023, 16:26:51

⏪ vorheriges - nächstes ⏩

ToBu

Hallo Klaus,
ich bin's wieder mit der verlinkten Excel Tabelle.
Das funktioniert alles wunderbar! Nun habe ich das Problem, dass aus externer Tab Daten in Access bereits vorhanden sind und nicht wieder angefügt werden sollen, sondern vor dem Anfügen geprüft werden soll, ob Daten bereits vorhanden sind, dann ersetzen, ansonsten anfügen. Ich glaube, das ist ein Fall für eine Ereignisprozedur, die ich nicht programmieren kann.
Meine Vorstellung ist:
tab_Stamm_Hersteller: (Tab)
Abfrage aus Tab und verlinkter Excel Tabelle mit jeweils Feld "Firmierung".
Wenn DS vorhanden dann ersetzen; wenn nicht dann anfügen mit entsprechendem Hinweis, dass ersetzt bzw. angefügt wird.
Ich habe kein Makro gefunden, dass Warnmeldungen/Hinweise ein-/ausschaltet. In älteren Access Versionen gab es diese. Meldungen nerven beim Anfügen!
Das sollte auch in der Ereignisprozedur an bzw. aus gestellt werden können.
Würdest du mir bitte wieder helfen, wie die VBA Schreibweise lautet?
Herzlichen Dank!
Gruß ToBu


MzKlMu

#1
Hallo,
es ist sinnvoll das in 2 Schritten zu tun. Verwende daher 2 Abfragen, eine zum Anfügen neuer Datensätze und eine Aktualisierungsabfrage zum aktualisieren der bestehenden Datensätze.
Gruß Klaus

ebs17

Zitatwie die VBA Schreibweise lautet?
Zuallererst würden solche Datenaktionen Abfrageaktionen (SQL) sein.
Grundlagen - SQL ist leicht (4) - Aktualisierung einer Tabelle
Mit freundlichem Glück Auf!

Eberhard

ToBu

Hallo Klaus, hallo Eberhard, vielen Dank für eure Beiträge. Da ich in VBA nicht fit bin, traue ich mich nicht an Eberhards Ereignisprozedur heran. Ich verstehe einfach nicht die Syntax! Ich habe mich entschieden, eine Löschabfrage zu erstellen, in der ich einen übereinstimmenden DS aus Tab lösche und anschließend die funktionierende Anfügeabfrage starte. Das ist ja so etwas wie eine Aktualisierungsabfrage in 2 Schritten. Zunächst hatte ich aber Schwierigkeiten damit, weil immer wieder der Hinweis kam, ich sollte di e Tabelle bestimmen, aus der der DS gelöscht werden soll, obwohl ja im Entwurf die Tab eingetragen war. Ich änderte daraufhin versuchsweise im Entwurf folgende Eigenschaftsparameter:
Eindeutige Datensätze: von nein auf ja
bei Fehler abbrechen: von nein auf ja
Jetzt funktioniert die Löschabfrage, die bei neuem DS meldet: "0 Datensätze gelöscht!", was ja auch richtig ist. Anschließend erfolgt die Anfügeabfrage, wie auch bei vorhandenem DS, der dann zuvor gefunden und gelöscht wird.
Leider habe ich noch keinen funktionierenden Code gefunden, der die verschiedenen Warnhinwiese unterdrückt! Könnt ihr mir da bitte auch weiterhelfen?
Vielen Dank für eure kompetenten Ausführungen!
Gruß ToBu

MzKlMu

Hallo,
Zitatder die verschiedenen Warnhinwiese unterdrückt! Könnt ihr mir da bitte auch weiterhelfen?
Dazu müsste man wissen, wie die Abfragen gestartet/ausgeführt werden, per VBA ?
Gruß Klaus

ToBu

Hallo Klaus, nein, nicht per VBA! Also 3 Anfüge- und 1 Löschabfragen.
Gruß ToBu

ToBu

PS: das ganze per Klick über verschiedene Makros.
Gruß ToBu

MzKlMu

Hallo,
mit Makros kann ich nicht helfen.
Zeige mal Screenshots der Makros, da kann man VBA draus machen.
Dann kriegst du auch die Meldungen weg.
Gruß Klaus

ToBu

den Sreenshot habe ich hingekriegt, wie aber hier in die Antwort?
Gruß ToBu

ToBu

Vielleicht hilft ja folgender Code für die Anfügeabfrage, die per Makro geöffnet wird:
INSERT INTO tabStamm_Hersteller
SELECT AuswahlFirmenstammdaten.*
FROM AuswahlFirmenstammdaten;

MzKlMu

Hallo,
ich muss das Makro sehen.

Zitataber hier in die Antwort?
Auf Antwort klicken und nach unten scrollen. Dann erscheint der Button:

Attachments and other options
Gruß Klaus

ToBu

Sie dürfen in diesem Board keine Dateianhänge sehen.
ich bin einfach nicht in der Lage, die einfachsten Dinge hinzukriegen! Entschuldige mein Unvermögen!
Gruß ToBu

MzKlMu

Hallo,
als VBA Code nur zum Anfügen:

CurrentDb.Execute "LöschAbfrage", DbFailOnError
CurrentDb.Execute "AnfügeAbfrage", DbFailOnError
Für die Namen der Abfragen die entsprechenden NAmen einsetzen.
Zum letzten Datensatz zu springen ist überflüssig, neue Datensätze werden immer hinten angehängt völlig egal was das Formular zeigt. Mit diesem Code gibt es keine Warnmeldungen mehr.

Für einen Button "Beim Klicken".
Zum Rest der Makros kann ich nichts sagen, ich verwende keine Makros und habe mich auch nicht damit beschäftigt. Du wirst auch zu Makros eher keine Hilfe bekommen, denn die werden so gut wie von niemand verwendet.
Gruß Klaus

ToBu

Hallo Klaus,
ich habe das Makro "Beim Klicken" gelöscht und ersetzt durch folgende Ereignisprozedur wie empfohlen:
Private Sub Datenübertrag_Click()
CurrentDb.Execute "abfLöschenDS", dbFailOnError
CurrentDb.Execute "abf_Anfügen_neue_Hersteller_an_tab_Stamm_Hersteller", dbFailOnError
CurrentDb.Execute "abf_AnfügenBereich_Marktsegmente", dbFailOnError
CurrentDb.Execute "abr_AnfügenBereich_Technologien", dbFailOnError
CurrentDb.Execute "mak_LetzterDatensatzEingabe", dbFailOnError
End Sub
Die Löschabfrage wurde ausgeführt, danach aber die Prozedur abgebrochen, weil irgendein Parameter fehlt.
Was habe ich falsch gemacht?
Gruß ToBu

ToBu

PS: könnte man die 4 Abfragenamen auch in 1 Anweisung durch Kommata getrennt ausführen?
Gruß ToBu