Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Rimondo am Mai 30, 2022, 15:08:06

Titel: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Rimondo am Mai 30, 2022, 15:08:06
Hallo zusammen,

habe mit Access eine Datenbank aufgebaut um ein Artikel zu kalkulieren, habe das ganze soweit geschafft ohne/wenig VBA. Die Datenbank an sich läuft jedoch könnte denke ein paar VBA Anweisungen das Arbeiten erleichtern. 
Paar einfache VBA Anweisungen habe ich ohne große Kenntnisse hinbekommen.

Jetzt würde ich gerne, wenn ich einen neuen Datensatz/Artikel erstelle einen ähnlichen Artikel als Vorlage nehmen und nur die entsprechenden Daten anpassen. So weit so gut, jedoch bekomme ich es nicht hin, dass die Werte aus dem Hauptformular und 2x Unterformular übernommen werden. Es werden nur die Werte aus dem Hauptformular übernommen.

Der Aufbau ist so das im Hauptformular die Stammdaten wie Maße, Name, Typ etc. stehen und das Unterformular dient als Stückliste und Arbeitsgänge.

Hauptformular -> Tab_Artikel
Unterformular1-> Tab_Artikel_Material
Unterformular2-> Tab_Artikel_Arbeitsgang

Welche VBA Anweisungen wäre Sinnvoll bzw. wonach muss ich suchen. Was ich gefunden habe hat nicht geklappt oder es war mir zu kompliziert es nachzuvollziehen bzw umzusetzen :)

Ich habe per Screenshot die Beziehungen der Datenbank hochgeladen.
Beziehungen.PNG

Vielen Dank
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am Mai 30, 2022, 15:35:18
Hallo
Hier ein Beispiel, welches vielleicht weiterhilft.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Rimondo am Mai 30, 2022, 16:05:06
Hallo Köbi,

vielen Dank für die schnelle Reaktion :),

Habe mir dein Beispiel angeschaut und so habe ich es mir vorgestellt, jedoch müsste es die Werte aus 2 Unterformularen übernehmen. Ich werde mir die Tage den VBA Code mal genauer anschauen und versuchen den entsprechend anzupassen. Der Code ist doch länger als gedacht  ;D

Wenn ich nicht weiterkomme oder es geklappt hat werde ich mich dann wieder melden.

Soweit erstmal vielen Dank

Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Rimondo am Mai 31, 2022, 10:13:57
Hallo zusammen,

ich habe das Beispiel erweitert. Habe auch jetzt den VBA Code versucht anzupassen, jedoch bekomme ich es nicht hin dass beide UF mit in die neue Datensatz übertragen werden, entweder nur eines von beiden oder es werden 2 neue Datensätze angelegt mit jeweils den Daten aus den UF1 und eines mit Daten aus UF2.

Wo müsste der Code sinnvollerweise angepasst werden, damit nicht das Oben genannte passiert.
Muss ich neue Variablen deklarieren?

Habe die erweiterte Beispieldatenbank hochgeladen.

Vielen Dank im voraus

Gruß
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am Mai 31, 2022, 18:07:52
Hallo Rimondo
Hier ein neues Beispiel, welches auch die Datensätze aus ZWEI Unterformularen dupliziert.
Im Code habe ich das entsprechend kommentiert.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Rimondo am Juni 02, 2022, 13:14:46
Hallo Köbi,

nochmals vielen Dank, habe jetzt versucht den Code bei mir zu übernehmen und anzupassen, bekomme aber immer die Fehlermeldung dass die Daten nicht in Beziehung stehen. Die 2 UF haben zwar eine nm Beziehung aber sollte eigentlich kein Problem sein oder?

Habe eine Testversion mit angehängt, vllt kann mir jemand weiterhelfen.

Vielen Dank

Gruß
Rimondo
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: DF6GL am Juni 02, 2022, 14:07:52
Hallo,

anderes Konzept und ohne dieses aufwendige Recordset-Getöns..:

Aufgabe:
Es soll der im Form aktuell angezeigte Datensatz (Artikel) mit seinen Detaildaten (Artikel_Material und Artikel_Arbeitsgang) in einen neuen Artikel übernommen werden.

Ablauf:

mit SQL: Selektiere den aktuellen DS und füge die Daten (ohne PK "ID_Artikel") an die Tabelle tab_Artikel an.

mit SQL: bestimme den neuen aktuellen PK  (Select @@Identity) und lege den in eine Variable

mit SQL: Selektiere die zum im Form angezeigten Artikel zugehörenden Materialien-Daten (Tab_Artikel_Material) und füge die an diese Tabelle an. Verwende für das Feld Tab_Artikel_Material.ID_Artikel die o. g. Variable mit dem neuen Artikel-PK-Wert (ID_Artikel).

mit SQL: dito für Tab_Artikel_Arbeitsgang.


Anschließend kann das Form ( nach einem Requery) auf den neuen Artikel positioniert/gefiltert werden
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Rimondo am Juni 03, 2022, 09:40:21
Hallo DF6GL,

vielen Dank für deine Antwort, leider kann ich mit SQL Anweisungen weniger anfangen, da ich wie gesagt noch recht neu in der Materie bin. Eine Datenbank mit Beziehungen etc. in Access zusammenzubauen ist "relative schnell" erlernbar und sind auch schon viele Funktionen vorhanden die die meisten Anforderungen abdecken zumindest in meinem Fall.

Nur mit dem SQL Anweisungen tue ich mir etwas schwer, habe da jetzt versucht mich einlesen nur komme da konkret nicht weiter bzw. mir fehlen da noch einige Basics.

Vllt könnte Sie mit dem Aufbau etwas tiefer ins Detail gehen :), weil mit dem "Recordset-Getöns" hat bisher auch nicht geklappt, bekomme dort die Fehler Meldung -> fehlender Parameter Wert.

Vielen Dank und wünsche ein schönes baldiges Wochenende :)

Gruß

Rimondo
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: DF6GL am Juni 03, 2022, 11:23:29
Hallo,



na denn, hier etwas "tiefer":


1) Zuerst ordnen wir das Beziehungsfenster nach den Beziehungshierarchien, damit ein klares Bild der Abhängigkeiten entsteht.

2) Im Abfrageentwurf eine Anfügeabfrage bzgl. der Tab_Artikel erstellen und den String aus der SQL-Ansicht in die Ereignisprozedur kopieren und syntaktisch mit einer Where-Condition anpassen, bzw. erweitern

3) Mit Execute die Abfrage ausführen und gleich danach den neu generieren PK in eine Variable auslesen (@@Identity)

4) Anfügeabfrage für Tabl_Artikel_Material wie oben beschrieben erstellen und in die Prozedur kopieren. Die Where-Condition erweiteren und den neuen PK-Wert (Variable) in den SQL-String integrieren.

5) Mit Execute die Abfrage ausführen.

6) Das Gleiche mit Tab_Artikel_Arbeitsgang durchführen.


7) Die Daten mit Requery in das Form neu einlesen und auf den neuen Artikel positionieren (, falls das gewünscht ist).


BeginTrans und ComitTrans sorgen dafür, dass entweder alle Daten in die jeweiligen Tabellen fehlerfrei kopiert wurden oder bei einer Fehlersituation gar keine Daten kopiert werden.


PS:  Einen Errorhandler habe ich nicht eingebaut, das kannst Du selbst erledigen.
Die Benamsung der Felder bietet Verbesserungspotential, habe ich aber nicht bearbeitet.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am Juni 03, 2022, 16:55:32
@ Franz vom Bodensee

Deine SQL-Lösung, verpackt in eine Transaktion, ist natürlich viel eleganter als mein Vorschlag. Vielen Dank, ich habe davon Einiges gelernt. Vor allem, weil ich mich mit Transaktionen bisher nur am Rande beschäftigt habe.

Ein kleiner Hinweis: Dim db sollte als DAO.Database deklariert werden, nicht einfach als Database.

Was mir nicht klar ist, wie die Variable lngArtIDNew gefüllt wird. Ich verstehe diesen Code nicht
        lngArtIDNew = db.OpenRecordset("Select @@Identity")(0)

Kannst du mir den erklären? Woher kommt("Select @@Identity")(0). Was bedeutet @@Identity")(0)?

@Rimondo
Die Datenquelle der Unterformulare enthält 2-mal "ID_Artikel". Das führt in der späteren Verwendung zu Expr1000.
Damit erfolgt in deiner Version auch die Verknüpfung zwischen HF und UF.
Mein Tipp: Verwende in der Datenquelle nur einmal "ID_Artikel". Und verknüpfe dann HF und UF direkt über ID_Artikel. Das ist lesbarer.

@ Franz vom Bodensee
Grüsse vom anderen Ufer des Bodensees.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: DF6GL am Juni 03, 2022, 17:28:10
Hallo Köbi,


ZitatDim db sollte als DAO.Database deklariert werden, nicht einfach als Database.

Das ist nicht unbedingt erforderlich, weil "Database" nur in der DAO-Library vorkommt und somit eindeutig ist. Aber Du hast Recht, zwecks Transparenz kann/sollte man den Qualifizierer durchaus dazu schreiben.

"@@Identity"  kommt aus T-SQL und enthält als "SQL-Variable" den Wert des neu angelegten Primärschlüssels (ID_Artikel). Das gilt allerdings über alle Tabellen gesehen in der aktuellen DBEngine-Instanz (Set db = Currentdb), so dass man den richtigen Wert nur dann erhält, wenn zwischenzeitlich kein weiterer/anderer Insert erfolgt ist.  Also sofort nach dem db.Execute auslesen.


Das "(0)" ist lediglich die Referenz auf das erste (0) Feld im geöffneten Recordset und ist  gleichbedeutend mit
lngArtIDNew = db.OpenRecordset("Select @@Identity").Fields(0)

 oder:
.
Set rs = db.Openrecordset("Select @@Identity")
lngPKWert = rs.Fields(0) 
.
.


@Köbi

wir kennen uns schon lange, zumindest namentlich.  ;)

und ebenso Grüße vom nördlichen Ufer.

Vom "anderen Ufer"  sehe ich mich nicht  ;D  ;D  ;D  ;D  ;D
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Rimondo am Juni 13, 2022, 08:42:01
Hallo,

vielen Dank für die Unterstützung, hat jetzt alles geklappt.

@Köbi hatte mich schon gewundert wo der Begriff "Expr1000" herkommt. Hab jetzt auch die Bezeichnungen angepasst.

Gruß
Rimomndo
Titel: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am Oktober 26, 2022, 02:02:36
@ Franz DF6GL, Franz vom Bodensee

Ich versuche in der beiliegenden abgespeckten DB ein Hauptformular inkl. Unterformular zu duplizieren. Besser gesagt die entsprechenden Daten zu duplizieren.
Dabei stütze ich mich auf deine Demo-DB vom 03.06.2022.
Das Duplizieren der Daten im Hauptformular funktioniert. Hingegen beim Duplizieren der Daten im Unterformular scheitere ich kläglich. Siehe Schreenshot Bild_2022-10-26_015315040.png

Ich lade meinen Entwurf hier mal hoch. Kannst du mir bitte helfen.
Auch andere Helfer sind natürlich eingeladen.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Beaker s.a. am Oktober 27, 2022, 17:42:48
Hallo Köbi,
Ist das ein real verwendetes DM?
Wenn Ja, frage ich mich, was ein FK auf einen Kunden in der tblArtikel
zu suchen hat?
Die Verbindung von Kunden und Artikeln wird bei mir über Belege hergestellt
(Kopf/Details).
Einen Lieferanten-FK könnte ich mir ja gerade noch vorstellen, entspricht
aber wohl auch selten der Realität. Also besser gleich n:m.

gruss ekkehard
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: DF6GL am Oktober 27, 2022, 19:13:21
Hallo Köbi,


Me.ArtId bezieht sich auf ein Feld in der Datenherkunft desjenigen Formulars, in der der Code abläuft.


Wenn es in diesem Formular ein UFO gibt, das die ArtID anzeigt, dann muss auch das UFO referenziert werden:

Me!UFO_SteuerelementName!ArtID



Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am Oktober 31, 2022, 18:22:50
Leider bin ich ein paar Tage krankheitshalber ausgefallen. Darum antworte ich erst jetzt.
@ekkehard
Nein, es ist kein reales DM. In #12 habe ich erwähnt, dass es sich um eine abgespeckte Version handelt.

@franz DF6GL, Franz vom Bodensee
Ich habe das Duplizieren der Artikel-Datensätze jetzt nochmals versucht, mit verschiedenen Varianten in der WHERE-Klausel. Entweder wird das Feld ArtID nicht gefunden oder es folgt die Fehlermeldung "Syntaxfehler in der INSERT INTO-Anweisung. Zum Beispiel mit folgendem Code
        strSQL = "INSERT INTO tblArtikel ( KdID_F, ArtNr, Artikel, Farbe, Marke, Groesse, Beschreibung, Eingang, Verkauf, Preis ) " & _
                  "Provision, Rueckgabe, abgerechnet, KaeuferID ) " & _
                  "SELECT tblArtikel.KdID_F, tblArtikel.ArtNr, tblArtikel.Artikel, tblArtikel.Farbe, tblArtikel.Marke, tblArtikel.Groesse, tblArtikel.Beschreibung,  " & _
                  "tblArtikel.Eingang, tblArtikel.Verkauf, tblArtikel.Preis, tblArtikel.Provision, tblArtikel.Rueckgabe, tblArtikel.abgerechnet, tblArtikel.KaeuferID " & _
                  "FROM tblArtikel WHERE ArtID = " & Forms![frmKunden]![frmUfo1].Form![ArtID] '#### SYNTAXFEHLER in der INSERT INTO-Anweisung

Im Unterformular ist das Feld ArtID vorhanden.
Kannst du (oder jemand anderes) bitte nochmals einen Blick auf Datenbank werfen? Und vielleicht eine Lösung aufzeigen.
Ich selbst verstehe anscheinend die Sache nicht.
Vielen Dank jetzt schon.

Grüsse, Köbi
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: DF6GL am November 01, 2022, 08:32:10
Hallo Köbi,


Zitat von: undefinedstrSQL = "INSERT INTO tblArtikel ( KdID_F, ArtNr, Artikel, Farbe, Marke, Groesse, Beschreibung, Eingang, Verkauf, Preis , " & _
                  "Provision, Rueckgabe, abgerechnet, KaeuferID ) " & _
                  "SELECT tblArtikel.KdID_F, tblArtikel.ArtNr, tblArtikel.Artikel, tblArtikel.Farbe, tblArtikel.Marke, tblArtikel.Groesse, tblArtikel.Beschreibung,  " & _
                  "tblArtikel.Eingang, tblArtikel.Verkauf, tblArtikel.Preis, tblArtikel.Provision, tblArtikel.Rueckgabe, tblArtikel.abgerechnet, tblArtikel.KaeuferID " & _
                  "FROM tblArtikel WHERE ArtID = " & Forms![frmKunden]![frmUfo1].Form![ArtID]



rot:  korrigieren  Komma statt KlammerZu

blau:  Feldnamen prüfen  (ArtID --> ArtNr )   


PS: hatte Dir eine PN geschickt bzgl. Bilder
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am November 01, 2022, 15:49:35
Hallo an alle

Hallo Franz, von der nördlichen Seite des Schwäbischen Meers

Ich kriege es nicht hin, die Detailsätze auch zu duplizieren. Das Hauptformular zu duplizieren ist einfach. Aber bei den Detail-Sätzen gibt es Probleme.
Ich lade her nochmals die neueste Version hoch. Vielleicht schaust du nochmals rein.
Ich kriege die Fehlermeldung 3201, "Der Datensatz kann nicht hinzugefügt werden, da ein Datensatz in der Tabelle 'tblKunde' mit diesem Datensatz in Beziehung stehen muss."
Ich meine, diese Beziehung existiert, aber anscheinend ist meine Meinung falsch.
Ich sehe da nicht durch.

Franz, ich habe dir eine PN gesandt, mit dem Link für die Bilder. Hoffentlich funktioniert der jetzt.

In diesem Zusammenhang habe ich noch eine Frage. Offensichtlich habe ich heute nicht meinen besten Tag. :-[  :-\  Also zur Frage: Wo finde ich meine gesendeten und erhaltenen PN? Und wo kann ich irgendwo einstellen, dass ich beim Eingang einer PN benachrichtigt werde?
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: PhilS am November 01, 2022, 16:40:53
Zitat von: Köbi am November 01, 2022, 15:49:35Wo finde ich meine gesendeten und erhaltenen PN? Und wo kann ich irgendwo einstellen, dass ich beim Eingang einer PN benachrichtigt werde?
Ganz oben auf der Seite "Meine Mitteilungen", "Inbox" klicken. Wenn die Inbox angezeigt wird, kannst du von dort zu den gesendeten PNs umschalten.
2022-11-01_16h30_061.png
Benachrichtigungen kannst du in deinem Profil unter "Notifications (https://www.access-o-mania.de/forum/index.php?action=profile;area=notification)" verwalten.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: DF6GL am November 01, 2022, 19:31:43
Hallo Köbi,

ich denke, es gibt noch Änderungs/Erweiterungs-Bedarf am Aufbau des Tabellenmodells und der Beziehungen.


Zudem solltest Du erklären, was überhaupt mit der DB angestellt werden soll.

Die Fehlermeldung an sich ist ja eindeutig und authentisch. Es fehlt einfach die Angabe (Speicherung) der Kundenid für den neuen Datensatz. Anhand der Beziehungen ist (mir) nicht klar, was die Kopiererei bewirken soll.


Ansonsten schreib mir mal eine Email:

https://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738


PS: Der Download funktioniert immer noch nicht. Vermutlich läßt die Website keine Anfragen aus dem Ausland zu.
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am November 02, 2022, 19:11:00
@PhilS
Besten Dank für die Erklärung zu den PN.

OT: Deine Links in der Signatur führen ins Leere. Webseite nicht erreichbar.

Gruss, Köbi
Titel: Re: Formular Daten mit Unterformular Daten kopieren im neuen Datensatz (als Vorlage)
Beitrag von: Köbi am November 02, 2022, 19:39:21
Zitat von: DF6GL am November 01, 2022, 19:31:43Hallo Köbi,
ich denke, es gibt noch Änderungs/Erweiterungs-Bedarf am Aufbau des Tabellenmodells und der Beziehungen.
Zudem solltest Du erklären, was überhaupt mit der DB angestellt werden soll.
Bei der DB handelt es sich um die Verwaltung einer Secondhand Boutique.
Ich möchte die Kundendaten, oder einen Teil davon, duplizieren. Diese enthalten im Original noch weitere Felder, welche häufig identisch sind.
Weiter möchte, oder mochte ich bisher, die Artikeldaten duplizieren. Wenn ich mir das jetzt aber genauer überlege, ist das Unsinn. Welche neue Kundin hat denn schon die gleichen Artikel gekauft, wie die vorherige Kundin. Also, das lasse ich bleiben.
Damit wäre die Sache erledigt, denn das Duplizieren der Kundendaten funktioniert ja.

Ich bitte um Entschuldigung für die Verwirrung, die ich angestiftet habe.

PS: Wegen des Downloads habe ich mich mit dem Admin der Seite in Verbindung gesetzt, warte aber noch auf Antwort.