Supportnet Computer
Planet of Tech

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:

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 Sub


Jetzt 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:

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.

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:

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 ...

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!

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....)

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

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

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



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

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

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