ich arbeite mit Access 2002 Sp2. und habe folgendes Problem.
Ich habe ein Formular mit Unterformular.
Im Formular werden die Grunddaten für eine Rezeptur angezeigt. -> Name der
Rezeptur, Basis für wie viele Personen die Rezeptur geschrieben wurde, wie
groß ist der Zeitaufwand beim Kochen usw.
Im Unterformular (Endlosformular) stehen das dann die Zutaten für die
Rezeptur -> Zuatatbezeichnung, Menge, Einheit
Nun kommt es auch vor das man aus Rezepturen Abwandlungen herstellen kann.
Z.B. Steinpilzrisotto, Basilikumrisotto, Tomatenrisotto usw. da liegt es
nah ein Rezept immer wieder zu kopieren und dann leicht zu verändern. Dies
würde ich gerne mit "einem Knopfdruck" tun.
Das Formular mit den Grunddaten bekomme ich kopiert. Dabei lasse ich über
die Inputbox eine neue Bezeichnung für die Rezeptur eintragen.
******
Private Sub Kopieren_Click()
Dim db As DAO.Recordset
Dim strRsp As String
Set db = CurrentDb.OpenRecordset("tbl_Rezeptur", dbOpenTable)
strRsp = InputBox("Rezepturbezeichnung")
With db
.AddNew
![Ge_Bez] = strRsp
![Ge_Zubereitung] = Me.Ge_Zubereitung
![Ge_Kategorie_ID] = Me.Ge_Kategorie_ID
![Ge_Zeitaufwand] = Me.Ge_Zeitaufwand
![Ge_Zahl] = Me.Ge_Zahl
![Ge_Pers] = Me.Ge_Pers
.Update
End With
db.Close
Set db = Nothing
End Sub
*****
Nur habe ich im Unterformular immer mehr als einen Datensatz und da weiß ich
nicht wie ich alle Datensätze, egal ob es 2 oder 20 sind in die Tabelle
kopiert bekomme. Das Unterformular basiert auf die Tabelle tbl_Zutaten.
Verbindung besteht über "Ge_ID" das bei der Tabelle "tbl_Rezeptur" ein
Autowert ist und in der Tabelle "tbl_Zutaten" zugeordnet wird.
Ich hoffe ich habe alle relevanten Angaben gemacht damit Ihr mir helfen
könnt.
Vielen Dank im Voraus für Eure Hilfe.
Frank Kötting
"Frank Kötting" <Frank.K...@web.de> schrieb:
> Ich habe ein Formular mit Unterformular.
> Im Formular werden die Grunddaten für eine Rezeptur angezeigt. -> Name
> der Rezeptur, Basis für wie viele Personen die Rezeptur geschrieben
> wurde, wie groß ist der Zeitaufwand beim Kochen usw.
> Im Unterformular (Endlosformular) stehen das dann die Zutaten für die
> Rezeptur -> Zuatatbezeichnung, Menge, Einheit
>
> Nun kommt es auch vor das man aus Rezepturen Abwandlungen herstellen
> kann. Z.B. Steinpilzrisotto, Basilikumrisotto, Tomatenrisotto usw. da
> liegt es nah ein Rezept immer wieder zu kopieren und dann leicht zu
> verändern. Dies würde ich gerne mit "einem Knopfdruck" tun.
>
> Das Formular mit den Grunddaten bekomme ich kopiert. Dabei lasse ich
> über die Inputbox eine neue Bezeichnung für die Rezeptur eintragen.
>
> Nur habe ich im Unterformular immer mehr als einen Datensatz und da
> weiß ich nicht wie ich alle Datensätze, egal ob es 2 oder 20 sind in
> die Tabelle kopiert bekomme. Das Unterformular basiert auf die Tabelle
> tbl_Zutaten. Verbindung besteht über "Ge_ID" das bei der Tabelle
> "tbl_Rezeptur" ein Autowert ist und in der Tabelle "tbl_Zutaten"
> zugeordnet wird.
das kannst Du mit einer Anfügeabfrage lösen. Dazu erstellst Du Dir
ersteinmal eine Auswahlabfrage. Diese Abfrage zeigt Dir alle Datensätze
der Tabelle Zutaten an. Diese Abfrage grenzt Du durch ein Kriterium auf
das aktuelle Rezept ein. Jetzt wandelst Du die Auswahlabfrage um in eine
Anfügeabfrage. Für das Feld mit der ID des Rezepts trägst Du die ID des
neuen Rezepts ein. Wenn Du diese Abfrage jetzt von Hand ausführst,
werden alle Zutaten kopiert.
Den SQL-String dieser Abfrage kannst Du jetzt in Deinen VBA-Code in eine
String-Variable einfügen. Dann ersetzt Du die Werte für die IDs im Code
durch Variablen, die Du vorher mit dem passenden Inhalt gefüllt hast. Am
Ende führst Du die Abfrage mittels CurrentDB.Execute aus.
HTH
--
Thomas
Homepage: www.Team-Moeller.de
Hallo Thomas,
vielen Dank für deine Antwort.
Nur wenn ich ehrlich bin habe ich diese nicht ganz verstanden.
Eine Abfrage habe ich erstellt und sie über die ID des Formuars
eingeschränkt. So bekam ich dann nur die zwei Datensätze die hinter der ID
stecken.
Danach habe ich diese in eine Anfüge-Abfrage umgewandelt. Hier kommt aber
nun eine Fehlermeldung: MS Access kann nicht alle Datensätze anfügen.
Sicher mache ich da noch was verkehrt.
Mfg
Frank Kötting
> vielen Dank für deine Antwort.
> Nur wenn ich ehrlich bin habe ich diese nicht ganz verstanden.
>
> Eine Abfrage habe ich erstellt und sie über die ID des Formuars
> eingeschränkt. So bekam ich dann nur die zwei Datensätze die hinter
> der ID stecken.
>
> Danach habe ich diese in eine Anfüge-Abfrage umgewandelt. Hier kommt
> aber nun eine Fehlermeldung: MS Access kann nicht alle Datensätze
> anfügen.
> Sicher mache ich da noch was verkehrt.
> Eine Abfrage habe ich erstellt und sie über die ID des Formuars
> eingeschränkt.
Du meinst sicher die ID deiner Haupttabelle, die mit deiner Untertabelle
verknüpft ist ?
(Ein Formular hat erstmal für dich keine ID)
Meine Glaskugel meint, dass der Fehler damit zusammenhängen könnte, dass du
ein "Autowert" Feld (als Primärschlüssel ?) in deinen Tabellen hast. Dieses
darf NICHT mit kopiert werden, sondern du musst die Anfügeabfrage OHNE das
Autowert-Feld machen bzw. dort das Autowert Feld rausnehmen.
Wenn deine Tabellenstrukur stark vereinfacht so aussieht:
Haupttabelle Rezept
MainID Autowert = Primärschlüssel
FeldM1
FeldM2
...
Untertabelle Zutaten
SubID Autowert = Primärschlüssel
MainID Zahl = ID der Rezepttabelle
FeldS1
FeldS2
...
Und du willst per Anfügeabfrage bestehende Datensätze kopieren, dann darfst
du fasst alles kopieren, aber das Feld SubID darfst du NICHT mitkopieren,
das meinte ich. Die Nummer wird - bei neuen Datensätzen - automatisch vom
System selbst generiert...
Also ein SELECT * FROM geht hier nicht, sondern du musst die Felder einzeln
auswählen.
Du erzeugst eine Neue Abfrage in der Entwurfsansicht. Wählst die Tabelle
Zutaten aus.
Dann ein Doppelklick auf den Namen der Tabelle (das blaue Feld oberhalb der
Feldnamen).
Dann sind alle Felder blau markiert, die kannst du dann alle runterziehen,
und das eine Feld wieder löschen. Dann die Selektion wie du sie brauchst.
Dann rechte Maustaste und Anfügeabfrage auswählen. ...
--
mit freundlichen Grüßen aus Nürnberg
Klaus Oberdalhoff KO...@gmx.de
Ich beantworte keine NG-Fragen und -Nachfragen per Mail!
Newbie-Info: http://www.doerbandt.de/Access/Newbie.htm
KnowHow-mdb und andere Beispiele: http://www.freeaccess.de
Sofern Access 200x bitte beachten:
http://www.freeaccess.de/MS-Access-Artikel.asp?ID=99
Ich unterstütze PASS Deutschland e.V. (http://www.sqlpass.de)
Nächstes Treffen in Nürnberg am 06.05.2008
Hallo Klaus,
danke für Deine Hilfe. Der Teil hat nun geklappt und per "Hand" werden die
entsprechenden Datensätze in die Tabelle dazu gefügt.
Wie Du sicher gemerkt hast bin ich nicht grade sehr visiert in der ganzen
Sache. Ich habe nun die SQL Angabe. Wie gehe ich damit weiter um?
INSERT INTO tbl_Zutaten ( Art_ID, Zutat_Menge, Ge_ID, Zutat_Anzahl,
Zutat_Zahl )
SELECT tbl_Zutaten.Art_ID, tbl_Zutaten.Zutat_Menge, tbl_Zutaten.Ge_ID,
tbl_Zutaten.Zutat_Anzahl, tbl_Zutaten.Zutat_Zahl
FROM tbl_Zutaten
WHERE (((tbl_Zutaten.Ge_ID)=[Formulare]![frm_Rezeptur]![Ge_ID]));
Vielen Dank
Mfg
Frank Kötting
> danke für Deine Hilfe. Der Teil hat nun geklappt und per "Hand"
> werden die entsprechenden Datensätze in die Tabelle dazu gefügt.
>
> Wie Du sicher gemerkt hast bin ich nicht grade sehr visiert in der
> ganzen Sache. Ich habe nun die SQL Angabe. Wie gehe ich damit weiter
> um?
> INSERT INTO tbl_Zutaten ( Art_ID, Zutat_Menge, Ge_ID, Zutat_Anzahl,
> Zutat_Zahl )
> SELECT tbl_Zutaten.Art_ID, tbl_Zutaten.Zutat_Menge, tbl_Zutaten.Ge_ID,
> tbl_Zutaten.Zutat_Anzahl, tbl_Zutaten.Zutat_Zahl
> FROM tbl_Zutaten
> WHERE (((tbl_Zutaten.Ge_ID)=[Formulare]![frm_Rezeptur]![Ge_ID]));
Unter der Voraussetzung, dass dein Formular frm_Rezeptur am Bildschirm immer
nur ein Rezept anzeigt, ist es doch relativ einfach:
(es gibt sicherlich elegantere Methoden, aber das dürfte die einfachste
sein)
Schritt 1: Erstelle aus dem SQL-Statement genauso wie es jetzt ist, eine
Abfrage und benenne sie vernünftig z.B.: qry_InsertZutaten
Schritt 2: In das Formular frm_Rezeptur bastelst du eine Befehlsschaltfläche
rein
Schritt 3: Du benennst den Button sinnvoll z.B. "btnZutatencopy" und lässt
dir eine vernünftige Beschriftung einfallen
Schritt 4: Eigenschaft Beim Klicken: [Ereignisprozedur] auswählen
dann rechts auf die 3 Punkte klicken ...
Dann kommst du in den VBA Modus, dort steht dann:
Private Sub btnZutatencopy_Click()
End Sub
Schritt 5:
Text einfügen, Ergebnis:
Private Sub btnZutatencopy_Click()
CurrentDb.Execute ("qry_InsertZutaten")
End Sub
Schritt 6: Speichern
Schritt 7: Debuggen / Kompilieren von Access
Schritt 8: Ausprobieren ...
--
mit freundlichen Grüßen aus Nürnberg
Klaus Oberdalhoff KO...@gmx.de
"Frank Kötting" <Frank.K...@web.de> schrieb:
> danke für Deine Hilfe. Der Teil hat nun geklappt und per "Hand" werden
> die entsprechenden Datensätze in die Tabelle dazu gefügt.
Bist Du sicher, dass die Abfrage so richtig ist? IMHO werden zwar die
Zutaten aus dem aktuellen Rezept kopiert. Dabei wird immer noch die ID
des aktuellen Rezepts gespeichert. Wenn ich das richtig sehe musst Du
noch die Spalte "tbl_Zutaten.Ge_ID" durch die ID für das neue Rezept
ersetzen.
> Wie Du sicher gemerkt hast bin ich nicht grade sehr visiert in der
> ganzen Sache. Ich habe nun die SQL Angabe. Wie gehe ich damit weiter
> um?
>
> INSERT INTO tbl_Zutaten ( Art_ID, Zutat_Menge, Ge_ID, Zutat_Anzahl,
> Zutat_Zahl )
> SELECT tbl_Zutaten.Art_ID, tbl_Zutaten.Zutat_Menge, tbl_Zutaten.Ge_ID,
> tbl_Zutaten.Zutat_Anzahl, tbl_Zutaten.Zutat_Zahl
> FROM tbl_Zutaten
> WHERE (((tbl_Zutaten.Ge_ID)=[Formulare]![frm_Rezeptur]![Ge_ID]));
Wenn Du Deine Abfrage vollständig hast, dann kannst Du das per VBA
ungefähr so umsetzen [Air-Code]:
- - 8< - - 8< - - 8< - -
Dim strSQL As String
strSQL = "INSERT INTO tbl_Zutaten ( Art_ID, Zutat_Menge, Ge_ID,
Zutat_Anzahl, " & _
"Zutat_Zahl ) SELECT tbl_Zutaten.Art_ID,
tbl_Zutaten.Zutat_Menge, " & _
"tbl_Zutaten.Ge_ID, tbl_Zutaten.Zutat_Anzahl,
tbl_Zutaten.Zutat_Zahl " & _
"FROM tbl_Zutaten " & _
"WHERE (((tbl_Zutaten.Ge_ID)=" &
[Formulare]![frm_Rezeptur]![Ge_ID] & "));"
CurrentDB.Execute strSQL, dbFailOnError
- - 8< - - 8< - - 8< - -
> Bist Du sicher, dass die Abfrage so richtig ist? IMHO werden zwar die
> Zutaten aus dem aktuellen Rezept kopiert. Dabei wird immer noch die ID
> des aktuellen Rezepts gespeichert. Wenn ich das richtig sehe musst Du
> noch die Spalte "tbl_Zutaten.Ge_ID" durch die ID für das neue Rezept
> ersetzen.
ach du meinst er hat eine einzige, rekursive Tabelle ?
Dann wäre meine Anweisleitung natürlich falsch. Ich bin von der klassischen
Eltern / Kind Beziehung ausgegangen (wie in meinem ersten Posting
geschrieben) Ich dachte er hat eine Rezepte-Tabelle und dann separat die
Zutaten dazu ....
--
mit freundlichen Grüßen aus Nürnberg
Klaus Oberdalhoff KO...@gmx.de
"Klaus Oberdalhoff" <ko...@gmx.de> schrieb:
>> Bist Du sicher, dass die Abfrage so richtig ist? IMHO werden zwar die
>> Zutaten aus dem aktuellen Rezept kopiert. Dabei wird immer noch die
>> ID
>> des aktuellen Rezepts gespeichert. Wenn ich das richtig sehe musst Du
>> noch die Spalte "tbl_Zutaten.Ge_ID" durch die ID für das neue Rezept
>> ersetzen.
>
> ach du meinst er hat eine einzige, rekursive Tabelle ?
Nein, das meine ich nicht. Da hast Du mein Posting falsch interpretiert.
> Dann wäre meine Anweisleitung natürlich falsch. Ich bin von der
> klassischen Eltern / Kind Beziehung ausgegangen (wie in meinem ersten
> Posting geschrieben) Ich dachte er hat eine Rezepte-Tabelle und dann
> separat die Zutaten dazu ....
Ich denke auch, dass die Tabellen Rezept und Zutaten 1:n verknüpft sind.
Worauf ich hinaus wollte ist, dass IMHO beim Kopieren der Zutaten immer
noch der Fremdschlüssel für das ursprüngliche Rezept gespeichert wird.
CU
--
Thomas
Homepage: www.Team-Moeller.de
Hallo Thomas,
Danke für Deine Antwort.
Das stimmt. Es fehlt mir noch die Anbind der ID.
Du hattest geschrieben:
"Jetzt wandelst Du die Auswahlabfrage um in eine
Anfügeabfrage. Für das Feld mit der ID des Rezepts trägst Du die ID des
neuen Rezepts ein. Wenn Du diese Abfrage jetzt von Hand ausführst,
werden alle Zutaten kopiert."
Hatte es zuerst so verstanden das im SQL-Code direkt was umgesetzt werden
müßte.
Wie Du siehst habe ich das ganze nicht wirklich verstanden. Meine Kenntnisse
sind da hin doch eher beschränkt.
Kannst du mir sagen wie ich diese Anbindung hinbekomme? Wie ich die ID des
alten Rezept durch die ID des neuen Rezeptes ersetzen kann? Denn die neue ID
wird ja duch das kopieren der Grunddaten, die sich im Hauptfomular der
Rezeptur befinden, erzeugt.
Vielen Dank
Frank Kötting
"Frank Kötting" <Frank.K...@web.de> schrieb:
> Danke für Deine Antwort.
>
> Das stimmt. Es fehlt mir noch die Anbind der ID.
>
> Du hattest geschrieben:
> "Jetzt wandelst Du die Auswahlabfrage um in eine
> Anfügeabfrage. Für das Feld mit der ID des Rezepts trägst Du die ID
> des
> neuen Rezepts ein. Wenn Du diese Abfrage jetzt von Hand ausführst,
> werden alle Zutaten kopiert."
>
> Hatte es zuerst so verstanden das im SQL-Code direkt was umgesetzt
> werden müßte.
> Wie Du siehst habe ich das ganze nicht wirklich verstanden. Meine
> Kenntnisse sind da hin doch eher beschränkt.
>
> Kannst du mir sagen wie ich diese Anbindung hinbekomme? Wie ich die ID
> des alten Rezept durch die ID des neuen Rezeptes ersetzen kann? Denn
> die neue ID wird ja duch das kopieren der Grunddaten, die sich im
> Hauptfomular der Rezeptur befinden, erzeugt.
In Deinem ersten Posting nennst Du folgenden Code. Diesen kannst Du
ergänzen, um die ID des neu eingefügten Rezeptes zu ermitteln:
> Private Sub Kopieren_Click()
>
> Dim db As DAO.Recordset
> Dim strRsp As String
Dim lngID As Long
> Set db = CurrentDb.OpenRecordset("tbl_Rezeptur", dbOpenTable)
> strRsp = InputBox("Rezepturbezeichnung")
>
> With db
> .AddNew
> ![Ge_Bez] = strRsp
> ![Ge_Zubereitung] = Me.Ge_Zubereitung
> ![Ge_Kategorie_ID] = Me.Ge_Kategorie_ID
> ![Ge_Zeitaufwand] = Me.Ge_Zeitaufwand
> ![Ge_Zahl] = Me.Ge_Zahl
> ![Ge_Pers] = Me.Ge_Pers
lngID = !Ge_ID
> .Update
> End With
>
> db.Close
> Set db = Nothing
>
> End Sub
Das Vorgehen wird hier genauer beschrieben:
http://www.access-im-unternehmen.de/589.0.html
(Link in einer Zeile)
In Deinem Code verwendest Du übrigens eine sehr ungewöhnliche und daher
verwirrende Bezeichnung für die Recordset-Variable. Der Name "db" wird
i. d. R. für den Verweis auf eine Datenbank verwendet. Eine
Recordset-Variable hat häufig den Namen "rs" oder "rst" oder verwendet
diese Zeichenfolgen als Präfix.
Deinen bisherigen Code könnte man wie folgt ergänzen/umschreiben:
- - 8< - - 8< - - 8< - -
Private Sub Kopieren_Click()
'Variablen deklarieren
Dim db AS DAO.Database
Dim rst As DAO.Recordset
Dim strRsp As String
Dim lngID As Long
'Initialisieren
Set db = CurrentDB()
Set rst = db.OpenRecordset("tbl_Rezeptur", dbOpenTable)
strRsp = InputBox("Rezepturbezeichnung")
'Neues Rezept speichern
With rst
.AddNew
![Ge_Bez] = strRsp
![Ge_Zubereitung] = Me.Ge_Zubereitung
![Ge_Kategorie_ID] = Me.Ge_Kategorie_ID
![Ge_Zeitaufwand] = Me.Ge_Zeitaufwand
![Ge_Zahl] = Me.Ge_Zahl
![Ge_Pers] = Me.Ge_Pers
lngID = !Ge_ID
.Update
End With
'Zutaten kopieren
' ...
rst.Close
Set rst = Nothing
Set db = Nothing
End Sub
- - 8< - - 8< - - 8< - -
An der Stelle mit dem Kommentar "Zutaten kopieren" kannst Du dann den
Code für das kopieren der Zutaten einfügen:
- - 8< - - 8< - - 8< - -
Dim strSQL As String
strSQL = "INSERT INTO tbl_Zutaten ( Art_ID, Zutat_Menge, Ge_ID, " &
_
"Zutat_Anzahl, Zutat_Zahl ) SELECT
tbl_Zutaten.Art_ID, " & _
"tbl_Zutaten.Zutat_Menge, " & lngID & ", " & _
"tbl_Zutaten.Zutat_Anzahl, tbl_Zutaten.Zutat_Zahl "
& _
"FROM tbl_Zutaten " & _
"WHERE (((tbl_Zutaten.Ge_ID)=" & _
[Formulare]![frm_Rezeptur]![Ge_ID] & "));"
db.Execute strSQL, dbFailOnError
- - 8< - - 8< - - 8< - -
Die ID des neuen Rezeptes wird in der Variable "lngID" gespeichert. In
den SQL-String zum Einfügen der Zutaten wird dann die ID des Rezeptes
als Konstanter Wert eingetragen.
vielen, vielen Dank für Eure Hilfe. Hier habt sicher einiges an Zeit und
Mühe darin investiert. Mit Eurer Hilfe habe ich es endlich geschafft.
Wobei es sicher eine Mischung von allen ist. Euren Angaben und meiner naiven
Denkweise ist.
Unten habe ich nun den Code gepostet und Thomas seine Anmerkung bezüglich
der Namensgebung eingepflegt.
Sicher werdet ihr all eure vorhandenen Hände über den Kopf zusammenschlagen
und fragen was mein Misch-Masch-Code soll, aber wie gesagt: Es klappt.
Die hier benannte Tabelle tbl_Zutaten_Zusatz habe ich als Hilfstabelle
genommen. Dort werden nur die zu kopierenden Daten abgelegt, deren Ge_ID ich
ändern muß. Zuvor wurden mit in der Tabelle tbl_Zutaten alle Ge_ID
geändert. Das machte ja nicht den Sinn.
Nochmals vielen Dank für Eure Hilfe und die Mühe die Ihr mit mir hattet.
Mfg
Frank Kötting
Private Sub Kopieren_Click()
Dim RS As DAO.Recordset
Dim RS_Zutaten As DAO.Recordset
Dim Msg As String
Dim strRsp As String
Dim SQL As String
Dim ID As String
SQL = "SELECT tbl_Zutaten_Zusatz.Art_ID,tbl_Zutaten_Zusatz.Zutat_Menge,
tbl_Zutaten_Zusatz.Ge_ID,
tbl_Zutaten_Zusatz.Zutat_Anzahl,tbl_Zutaten_Zusatz.Zutat_Zahl FROM
tbl_Zutaten_Zusatz;"
Set RS = CurrentDb.OpenRecordset("tbl_Rezeptur", dbOpenTable)
Set RS_Zutaten = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
' ******
' Die Grunddaten werden kopiert
' ******
Msg = "Möchten Sie die Rezeptur kopieren?"
strRsp = InputBox("Rezepturbezeichnung")
If IsNull(strRsp) = True Then
MsgBox "Test"
Exit Sub
End If
With RS
.AddNew
![Ge_Bez] = strRsp
![Ge_Zubereitung] = Me.Ge_Zubereitung
![Ge_Kategorie_ID] = Me.Ge_Kategorie_ID
![Ge_Zeitaufwand] = Me.Ge_Zeitaufwand
![Ge_Zahl] = Me.Ge_Zahl
![Ge_Pers] = Me.Ge_Pers
.Update
End With
RS.Close
Set RS = Nothing
' ******
' Die einzelnen Zutaten werden kopiert
' ******
ID = DMax("Ge_ID", "tbl_Rezeptur")
Forms!frm_Rezeptur_Suche!Suchfeld = ID ' Die neue ID
wird in das Suchfeld der Rezeptursuche abgelegt um die neue Rezeptur später
zu öffnen
SQL = "SELECT tbl_Zutaten_Zusatz.Art_ID,tbl_Zutaten_Zusatz.Zutat_Menge,
tbl_Zutaten_Zusatz.Ge_ID,
tbl_Zutaten_Zusatz.Zutat_Anzahl,tbl_Zutaten_Zusatz.Zutat_Zahl FROM
tbl_Zutaten_Zusatz;"
DoCmd.SetWarnings False
DoCmd.OpenQuery "qry_Duplizieren_von_Rezepten_1"
Set RS_Zutaten = CurrentDb.OpenRecordset(SQL, dbOpenDynaset)
Do While Not RS_Zutaten.EOF '
Durchläuft alle Datensätze
' Datensätze Ändern oder Hinzufügen
RS_Zutaten.Edit
RS_Zutaten!Ge_ID = ID ' Die neue ID wird
den Zutaten zugeordnet
RS_Zutaten.Update
RS_Zutaten.MoveNext
Loop
RS_Zutaten.Close
If Not RS_Zutaten Is Nothing Then Set RS_Zutaten = Nothing
DoCmd.OpenQuery "qry_Duplizieren_von_Rezepten_2" ' legt
die geänderten Daten in die Tabelle tbl_Zutaten ab
DoCmd.OpenQuery "qry_Duplizieren_von_Rezepten_3" ' löscht
die vorhandenen Zutaten aus der Tabelle tbl_Zutaten_Zusatz
DoCmd.SetWarnings True
Echo off ' die
kopierte Rezeptur wird geöffnet
DoCmd.Close acForm, "frm_Rezeptur"
DoCmd.OpenForm "frm_Rezeptur", , , , , acDialog
Echo True
End Sub
"Frank Kötting" <Frank.K...@web.de> schrieb:
> vielen, vielen Dank für Eure Hilfe. Hier habt sicher einiges an Zeit
> und Mühe darin investiert. Mit Eurer Hilfe habe ich es endlich
> geschafft.
> Wobei es sicher eine Mischung von allen ist. Euren Angaben und meiner
> naiven Denkweise ist.
es ist Deine Lösung. Du musst sie verstehen und damit glücklich werden.
Zwei Hinweise hätte ich aber trotzdem noch für Dich:
> ' ******
> ' Die einzelnen Zutaten werden kopiert
> ' ******
>
> ID = DMax("Ge_ID", "tbl_Rezeptur")
Bist Du der einzige, der mit der Dtaenbank arbeitet? Dann wird dieser
Code wunderbar funktionieren. Wenn Du allerding in einer
Mehrbenutzerumgebung unterwegs bist kann es Dir passieren dass in
derZwischenzit ein weiterer Datensatz angelegt wird und Dir DMAX nicht
den richtigen Datensatz zurückliefert.
> Echo off '
> die kopierte Rezeptur wird geöffnet
> DoCmd.Close acForm, "frm_Rezeptur"
> DoCmd.OpenForm "frm_Rezeptur", , , , , acDialog
> Echo True
Wenn Du mit Echo die Bildschirmaktualisierung ausschaltest, dann
solltest Du auf jeden Fall eine Fehlerbehandlung einfügen. Sonnst kann
es Dir passieren, dass im Fall eines Fehlers die Oberfläche von Access
einfriert.
On Error Goto Error_Handler
....
ExitHere:
On Error Resume Next
Echo True
Exit sub
ErrorHandler:
MsgBox Err.Description, vbCritical, Err.Number
Resume ExitHere
Hallo Thomas,
vielen Dank für Deine Informationen.
Das Programm ist für mich und Freunde, Bekannte die es haben möchten. So
wird dies mit dem "DMax" kein Problem darstellen. Aber gut zu wissen wenn
ich mal was für eine Mehrbenutzerumgebung schreiben sollte.
Deinen zweiten Hinweiß habe ich mit eingepflegt.
Vielen Dank für Deine Hilfen.
Mfg
Frank Kötting