Supportnet / Forum / Datenbanken
Bestimmte Felddaten in neuen Datensatz autom. übernehmen
Frage
Hilfe..Probleme.... Ich möchte aus dem Datensatz, den ich in der Maske sehe, nur bestimmte Felder in einen neuen Datensatz übernehmen. Danke für die Mühe.
Antwort 1 von JohnnyLoser
Hi gilli,
sieht ja eigentlich recht einfach aus.
Du erstellst einen neuen Button auf dem Formular und schreibst in das Ereignis "Beim Klicken" folgenden, an Deine Anwendung angepaßten Code:
Jetzt hast Du einen neuen Datensatz mit den Werten aus den Feldern 1, 2, 4 und 7.
Gruß
Johnny
sieht ja eigentlich recht einfach aus.
Du erstellst einen neuen Button auf dem Formular und schreibst in das Ereignis "Beim Klicken" folgenden, an Deine Anwendung angepaßten Code:
Sub Button_Click()
Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Tabellenname")
rs.AddNew
rs!TabellenFeld1 = Me!FormularFeld1
rs!TabellenFeld2 = Me!FormularFeld2
rs!TabellenFeld4 = Me!FormularFeld4
rs!TabellenFeld7 = Me!FormularFeld7
rs.Update
rs.Close
Set rs = Nothing
End SubJetzt hast Du einen neuen Datensatz mit den Werten aus den Feldern 1, 2, 4 und 7.
Gruß
Johnny
Antwort 2 von piano
Hallo
Die Lösung von Jonny ist super, nur müssen die Felder des Formulars ungebunden sein (oder es handelt sich um eine andere Tabelle, als die, die im Formular dargestellt wird), wo noch einige Vorarbeiten zur Anzeige notwendig sind.
Wenn ich die Aufgabe richtig verstanden habe, kann man sie auch so interpretieren,daß einige Felder nicht übernommen werden sollen.
Dazu könntest Du beim Formular-Ereignis "Vor Aktualisierung" für jedes Feld, das nicht verändert werden soll folgenden Code eingeben:
Hier werden die alten Werte vor dem Speichern des Satzes einfach wiederhergestellt.
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
Die Lösung von Jonny ist super, nur müssen die Felder des Formulars ungebunden sein (oder es handelt sich um eine andere Tabelle, als die, die im Formular dargestellt wird), wo noch einige Vorarbeiten zur Anzeige notwendig sind.
Wenn ich die Aufgabe richtig verstanden habe, kann man sie auch so interpretieren,daß einige Felder nicht übernommen werden sollen.
Dazu könntest Du beim Formular-Ereignis "Vor Aktualisierung" für jedes Feld, das nicht verändert werden soll folgenden Code eingeben:
me.NichtÄnderbaresFeld.value=me.NichtÄnderbaresFeld.oldvalue Hier werden die alten Werte vor dem Speichern des Satzes einfach wiederhergestellt.
Gruß piano
Es wäre nett, wenn Du ein Feedback abgeben könntest,
ob der Lösungsvorschlag Dein Problem gelöst hat.
Antwort 3 von gilli
Vielen Dank für die schnellen Tips.
Leider habe ich als Laie wohl die Frage falsch gestellt, denn ich bekomme Fehler angezeigt.
Ich möchte einige Felder die ich im Formular angezeigt bekomme kopieren, dann evtl. verändern und als neuen Datensatz in die gleiche Tabelle speichern.
Leider habe ich als Laie wohl die Frage falsch gestellt, denn ich bekomme Fehler angezeigt.
Ich möchte einige Felder die ich im Formular angezeigt bekomme kopieren, dann evtl. verändern und als neuen Datensatz in die gleiche Tabelle speichern.
Antwort 4 von piano
Hallo
Warum dann nicht eine Befehlsschaltfläche mit Datenssatzoperationen / Datensatz duplizieren ???
Felder, die nicht dupliziert werden sollen kannst Du gleich im Ereignis "Beim Klicken" der Befehlsschaltfläche initialisieren. z.B:
Gruß piano
Warum dann nicht eine Befehlsschaltfläche mit Datenssatzoperationen / Datensatz duplizieren ???
Felder, die nicht dupliziert werden sollen kannst Du gleich im Ereignis "Beim Klicken" der Befehlsschaltfläche initialisieren. z.B:
me.FeldSollLeerSein = null
Gruß piano
Antwort 5 von gilli
vielen Dank Piano.
Dein Hinweis ist super.
Leider war ich so dusselig und versuche dauernd ein Feld, das einen Autowert eingestellt hat, zu kopieren. Da kommt wohl die Fehlermeldung dann her? Kann man so eine Meldung wegbekommen?
Oder geht das doch noch ganz anders?
Ich möchte mir den Autowert erhalten ...
Dein Hinweis ist super.
Leider war ich so dusselig und versuche dauernd ein Feld, das einen Autowert eingestellt hat, zu kopieren. Da kommt wohl die Fehlermeldung dann her? Kann man so eine Meldung wegbekommen?
Oder geht das doch noch ganz anders?
Ich möchte mir den Autowert erhalten ...
Antwort 6 von piano
Hallo
Einen Autowert kannst und darfst Du nicht verändern!!! Wenn Du den alten Wert benötigst, lege einfach ein neues Feld als Zahl und Long Integer an und übertrage dorthin den Autowert des alten Satzes.
Wenn Du dazu Hilfe brauchst, schicke ich Dir gerne ev. morgen eine Beschreibung der Vorgangsweise.
Gruß piano
PS: Du kannst natürlich auch das Feld direkt als Zahl umdefinieren, mußt dann aber selber bei Neuanlage befüllen!
Einen Autowert kannst und darfst Du nicht verändern!!! Wenn Du den alten Wert benötigst, lege einfach ein neues Feld als Zahl und Long Integer an und übertrage dorthin den Autowert des alten Satzes.
Wenn Du dazu Hilfe brauchst, schicke ich Dir gerne ev. morgen eine Beschreibung der Vorgangsweise.
Gruß piano
PS: Du kannst natürlich auch das Feld direkt als Zahl umdefinieren, mußt dann aber selber bei Neuanlage befüllen!
Antwort 7 von gilli
danke piano, ich bastel heute noch mal und melde mich so oder so noch mal
Antwort 8 von klausinger
Servus,
mal kurz gefragt: wenn Du einen Autowert hast, warum willst Du den dann erhalten, wenn Du den Satz duplizierst? Diese Autowerte sind ja meistens deswegen drin, um automatisch eindeutige Werte zu erzeugen, die dürfen also normalerweise nicht doppelt vorkommen. Und was ist, wenn Du den jeweils alten Autowert in ein Feld AlterWert kopierst und dann genau diesen Satz wieder duplizeiren willst? Dann ist ja das Zielfeld wieder belegt?
Oder möchtest Du soetwas erreichen wie ein Versionierung? Also Beispielsweise hast Du eine Artikelnummer (der Autowert) und beim Duplizieren des Satzes wird eine neue Version erzeugt unter Erhaltung der bisherigen? Man könnte dazu beispielsweise zwei eindeutige Felder verwenden, Artnr1 und Artnr2, also ist quasi die Kombination aus beiden der eindeutige Wert. Und dann, als Sicherheit, wenn ein ganz neuer Satz angelegt wird, läßt man das Artnr1-Feld leer, setzt eine Formularfunktion ein die den Wert um eines hochzählt und die Version auf 0 oder 1 setzt (ist ja die erste....)
Und beim Duplizieren würde ich beispielsweise auf ähnlichem weg gleich die Versionsnummer um einen Wert hochzählen .......
Ist nur mal eine Überlegung gewesen ...
Gruß Klaus
mal kurz gefragt: wenn Du einen Autowert hast, warum willst Du den dann erhalten, wenn Du den Satz duplizierst? Diese Autowerte sind ja meistens deswegen drin, um automatisch eindeutige Werte zu erzeugen, die dürfen also normalerweise nicht doppelt vorkommen. Und was ist, wenn Du den jeweils alten Autowert in ein Feld AlterWert kopierst und dann genau diesen Satz wieder duplizeiren willst? Dann ist ja das Zielfeld wieder belegt?
Oder möchtest Du soetwas erreichen wie ein Versionierung? Also Beispielsweise hast Du eine Artikelnummer (der Autowert) und beim Duplizieren des Satzes wird eine neue Version erzeugt unter Erhaltung der bisherigen? Man könnte dazu beispielsweise zwei eindeutige Felder verwenden, Artnr1 und Artnr2, also ist quasi die Kombination aus beiden der eindeutige Wert. Und dann, als Sicherheit, wenn ein ganz neuer Satz angelegt wird, läßt man das Artnr1-Feld leer, setzt eine Formularfunktion ein die den Wert um eines hochzählt und die Version auf 0 oder 1 setzt (ist ja die erste....)
If IsNull(Me!Artnr1) Then
Me!Artnr1 = numstring(CDbl(DMax("[Artnr1]", "Tabellenname")) + 1, 3)
'3 ist die Länge des hochzuzählenden Feldes (ergibt z.B. 001), Wert anpassen bei Bedarf
Me!Artnr2 = 0
End If
Und beim Duplizieren würde ich beispielsweise auf ähnlichem weg gleich die Versionsnummer um einen Wert hochzählen .......
Ist nur mal eine Überlegung gewesen ...
Gruß Klaus
Antwort 9 von Knubbel
Hallo gilli,
wenn auch spät, aber vielleicht doch noch nützlich:
Wenn ich dich richtig verstanden habe, möchtest du aus dem vorherigen Datensatz "einige" Steuerelemente in den neuen Datensatz übernehmen, aber ein Überschreiben ermöglichen?
Mein Lösungsvorschlag:
Erstelle für die Felder, deren Wert du übernehmen willst ein Makro SetzenWert
Dieses Makro bindest du an die Eigenschaft BeiVokuserhalt
In dem Makro nutzt du für den zu setzenden Wert
DomLetzterWert("[Feldname]";"[Domäne]")
Domäne ist der Name deiner Tabelle.
Näheres zu diesen Funktionen siehe unter "Agregatfunktionen" in der Onlinehilfe.
mfg Knubbel
wenn auch spät, aber vielleicht doch noch nützlich:
Wenn ich dich richtig verstanden habe, möchtest du aus dem vorherigen Datensatz "einige" Steuerelemente in den neuen Datensatz übernehmen, aber ein Überschreiben ermöglichen?
Mein Lösungsvorschlag:
Erstelle für die Felder, deren Wert du übernehmen willst ein Makro SetzenWert
Dieses Makro bindest du an die Eigenschaft BeiVokuserhalt
In dem Makro nutzt du für den zu setzenden Wert
DomLetzterWert("[Feldname]";"[Domäne]")
Domäne ist der Name deiner Tabelle.
Näheres zu diesen Funktionen siehe unter "Agregatfunktionen" in der Onlinehilfe.
mfg Knubbel
Antwort 10 von gilli
Hallo Knubbel, es ist nie zu spät. Ich beiße mir immer noch die Zähne an dem "Problem" aus. Ich werde deinen Vorschlag heute abend ausprobieren. Trotzdem Zwischendank an alle für die Vorschläge.
mfg Gilli
mfg Gilli
Antwort 11 von gilli
nun hat es doch schon früher gekribbelt...
Knubbel, das Problem ist, es soll nicht der vorherige Datensatz sein sondern ein beliebiger Datensatz den ich mir anschaue. Z.B. ich habe 30 Datensätze, schaue mir den 12ten an und möchte einige Felder, die ich vorher natürlich (wie auch immer)bestimmen möchte,in den 31.(neuen) Datensatz übernehmen.Die Felder sollten dann natürlich auch änderbar sein.Übrigens der Autowert der im neuen Formular entsteht soll so fortlaufend bleiben wie er bei dem neuen Datensatz entsteht.
Gruß
Gilli
Knubbel, das Problem ist, es soll nicht der vorherige Datensatz sein sondern ein beliebiger Datensatz den ich mir anschaue. Z.B. ich habe 30 Datensätze, schaue mir den 12ten an und möchte einige Felder, die ich vorher natürlich (wie auch immer)bestimmen möchte,in den 31.(neuen) Datensatz übernehmen.Die Felder sollten dann natürlich auch änderbar sein.Übrigens der Autowert der im neuen Formular entsteht soll so fortlaufend bleiben wie er bei dem neuen Datensatz entsteht.
Gruß
Gilli
Antwort 12 von piano
Hallo
Das ist aber geneu mein Lösungsvorschlag gewesen:
Durch ..addnew wird automatisch der Autowert auf den letzen + 1 gesetzt. Hast Du noch immer ein Problem damit?
Gruß piano
Das ist aber geneu mein Lösungsvorschlag gewesen:
Durch ..addnew wird automatisch der Autowert auf den letzen + 1 gesetzt. Hast Du noch immer ein Problem damit?
Gruß piano
Antwort 13 von gilli
Hallo Piano,
dein Vorschlag war genau richtig. Ich hatte in meinem Formular/Datensatz ein Feld gesperrt und deshalb bekam ich das Feld nicht ins neue Formular. Als Laie baut man doch häufiger mal Mist und erkennt es leider erst später.
Herzlichen Dank noch mal für deine Vorschläge.
Auch an alle anderen herzlichen Dank für eure Mühe, es sind Anregungen dabei gewesen die neue Ideen sprudeln lassen.
Ich werde bestimmt bald noch einmal einen Hilferuf starten. Dieses supportnet finde ich übrigens super, vor allem weil das Teil lebt und superschnell qualifizierte Antworten kamen. Werde bestimmt ständiger Gast sein.
mfg
Gilli
dein Vorschlag war genau richtig. Ich hatte in meinem Formular/Datensatz ein Feld gesperrt und deshalb bekam ich das Feld nicht ins neue Formular. Als Laie baut man doch häufiger mal Mist und erkennt es leider erst später.
Herzlichen Dank noch mal für deine Vorschläge.
Auch an alle anderen herzlichen Dank für eure Mühe, es sind Anregungen dabei gewesen die neue Ideen sprudeln lassen.
Ich werde bestimmt bald noch einmal einen Hilferuf starten. Dieses supportnet finde ich übrigens super, vor allem weil das Teil lebt und superschnell qualifizierte Antworten kamen. Werde bestimmt ständiger Gast sein.
mfg
Gilli
Antwort 14 von gilli
Schön dass alles funktioniert, aber .....
ich habe da doch noch eine Frage:
wie kann ich ein Datum beim kopieren in den neuen Datensatz um X Monate erhöhen? Habe schon ein Feld im Formular in dem eine Zahl stehen kann(z.B. 12 oder 24....). Das Feld mit dem Datum heisst Prüfdatum, das mit der Zahl Prüfintervall.
Gruß
Gilli
ich habe da doch noch eine Frage:
wie kann ich ein Datum beim kopieren in den neuen Datensatz um X Monate erhöhen? Habe schon ein Feld im Formular in dem eine Zahl stehen kann(z.B. 12 oder 24....). Das Feld mit dem Datum heisst Prüfdatum, das mit der Zahl Prüfintervall.
Gruß
Gilli

