Neuigkeiten:

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

Mobiles Hauptmenü

Datensatzvorlage

Begonnen von Jochen1, Juli 13, 2016, 15:29:34

⏪ vorheriges - nächstes ⏩

Jochen1

Hallo,

ich nutze Access 2010 und habe eine DB mit verschiedenen Formularen, u.a. für das Anlegen eines neuen Datensatzes (einschliesslich Unterformular).

Nun treten bei der Neuanlage eines Datensatzes manche Konstellationen/Feldinhalte in den Datensätzen in ihrer Kombination regelmässig erneut auf, und ich muss die Daten jedesmal erneut eingeben, auch wenn ich mir mit Drop-Down Listen schon viel vereinfacht habe.

Gibt es evtl. eine Möglichkeit, sich "Datensatzvorlagen" anzulegen, die ich dann bei der Neuanlage eines Datensatzes über ein Makro o.ä. aufrufen kann (ich meine damit nicht die Hinterlegung von Standardwerten in den Feldern der Tabelle).

Vielen Dank für Eure Unterstützung !

_______________
Access 2010

Lachtaube

Für Textfeld-, Kombifeld- etc.-Steuerelemente kann man Standardwerte (auch mittels Programmsteuerung) vorgeben. Eine Möglichkeit wäre, auf dem Formular einen Knopf zu implementieren, der dann die von Dir festgelegten Werte als Standardwerte übernimmt und danach einen neuen Datensatz erscheinen lässt.

Hier ist etwas VBA-LuftcodePrivate Sub CloneValuesAsStandardAndGotoNewRecord_Click()

   Me.MeinLongIntegerfeld.DefaultValue = Me.MeinLongIntegerfeld
   
   Me.MeinTextfeld.DefaultValue _
         = Chr$(34) & Replace(Me.MeinTextfeld, Chr$(34), _
                              Chr$(34) & Chr$(34)) & Chr$(34)
   
   Me.MeinDatumUhrzeitfeld.DefaultValue _
         = Format(Me.MeinDatumUhrzeitfeld, "\#yyyy-mm-dd hh:nn:ss\#")
   
   Me.MeinNachkommastellenfeld.DefaultValue _
         = Str(Nz(Me.MeinNachkommastellenfeld, 0))
   
   DoCmd.RunCommand acCmdRecordsGoToNew
End Sub
Grüße von der (⌒▽⌒)

Jochen1

Hallo Lachtaube,

danke für die Antwort - grundsätzlich verstehe ich die Vorgehensweise, aber im Detail brauche ich mangels Programmierkenntnis bitte noch etwas Hilfestellung:

- wenn ich die Anweisung einem "Knopf" hinterlege, wird dann der so gesetzte Standardwert nur für diesen einen neuen Datensatz hinterlegt oder gilt dieser dann -was ich vermute- für alle neuen Datensätze der DB ?

Ich möchte nur einige Vorlagen erstellen, die ich erst nach Aufruf nutze- ansonsten sollen weiterhin standardmässig die "leeren" Felder angezeigt werden.

Müsste daher nicht erst ein neuer Datensatz angesteuert werden und dann die Felder mit den zu hinterlegenden Vorlageninhalten gefüllt werden ?

- Heisst z.B.
ZitatMe.MeinLongIntegerfeld.DefaultValue = Me.MeinLongIntegerfeld
für mich "übersetzt":

Me.Feldname.DefaultValue = Me.DerWertfürdasFeldimneuenDatensatz ?

Vielen Dank für die Hilfe.
_______________
Access 2010

Lachtaube

Diese Einstellungen gelten dann für die Sitzung (solange das Formular offen ist). Mit einem anderen Knopf kann man die Standardwerte auch wieder entfernen, indem überall "" oder gleichwertig vbNullString bei DefaultValue hinterlegt wird.

Wenn Du Versionen fixer Standardwerte speichern willst, kann dies in einer Tabelle geschehen. Dazu benötigst Du zumindest einen Bezeichner oder einen Dir bekannten Zahlenwert in einem Feld, ein Textfeld sollte den Namen des Steuerelements beinhalten und in einem dritte Textfeld wird der Standardwert abgelegt. Wichtig: in diesem Feld müssen Zahlenwerte einen Punkt (.) als Dezimaltrennzeichen aufweisen, falls Nachkommastellen existieren. Texte müssen in einfache (') oder doppelte Hochkommata (") eingeschlossen sein, ein Datum ist zwischen Rauten im ISO- oder US-Format abzulegen, Ja/Neinwerte können als -1 bzw 0 oder als True bzw. False verwendet werden.

Eine Auswahl wäre dann z. Bsp. in einem Kombi- oder Listenfeld, in dessen Nach Aktualisierung Ereignis man das Setzen der Standardwerte vornimmt, realisierbar. In der Prozedur selbst kann ein Recordset mit dem gewählten Identifier geöffnet werden, und es wird für jeden gefundenen Eintrag der Standardwert im Steuerelement des Formulars gesetzt.

Wenn das die angestrebte Version sein soll, könnte man einen Beispielcode basteln.
Grüße von der (⌒▽⌒)

MzKlMu

Hallo,
man könnte auch Vorlage wörtlich nehmen und eine Hilfstabelle erstellen mit verschiedenen Datensätzen für die entsprechenden Vorlagenwerte.
Und dann einfach per Anfügeabfrage die gewünschte Vorlage als neuen Datensatz an die Datentabelle anhängen.
Gruß Klaus

Lachtaube

Was dann allerdings vorraussetzt, dass alle Pflichtfelder vorhanden sein müssen.
Grüße von der (⌒▽⌒)

Jochen1

Hallo,

puh, das klingt nicht einfach. Ich denke aber, dass für mich der von Lachtaube vorgeschlagene Weg sinnvoller wäre als eine Hilfstabelle mit den Vorlagedatensätzen, da meine Grundtabelle recht umfangreich ist und ich Änderungen in dieser dann vermutlich auch in der Hilfstabelle nachziehen müsste, damit die Felder der Tabellen "synchron" sind.

Ein Kombinations-/Listenfeld für die Vorlagen mit anschliessender Aktualisierung dieses neuen Datensatzes wäre natürlich eine Superlösung.

Ich brauche z.B. Vorlagen 1-4 nur mit einzelnen Textfeldern, keine Zahlen, Datumsfelder etc. (andere Daten werden dann im Formular im Datensatz noch ergänzt). Es geht also um eine Art "Vorausfüllen" mehrerer Felder innerhalb eines Datensatzes.

Z.B.:

SteuerelementA mit 'Name1' als Identifizierer der Vorlage1; SteuerelementB mit 'Text1', SteuerelementC mit 'Text1;

SteuerelementA mit 'Name2' als Identifizierer der Vorlage2; SteuerelementB mit 'Text2', SteuerelementC mit 'Text2

Ich hoffe, ich habe es richtig verstanden.

Und wie steuere ich, dass entweder die "normalen" Standardwerte oder die des Kombinations-/Listenfeldes verwendet werden ?

Hättest Du einen generischen (Beispiel-) Code für mich, damit ich mich daran probieren kann ?

Vielen Dank für die Hilfe !
_______________
Access 2010

MzKlMu

Hallo,
bei solchen Aktionen stellt sich oft auch die Frage ob das grundsätzlich richtig ist.
Insbesonders auch durch die Bemerkung, dass die Grundtabelle recht umfangreich ist. Umfangreiche Tabelle machen immer hellhörig.
Was macht denn die Grundtabelle so umfangreich ?
Wie viele Felder sind das ?
Enthält die Grundtabelle auch Werte die sich bei einem neuen Datensatz nie ändern ?
Was sind das für Felder die Standardwerte brauchen ?

Kannst Du das mal bitte ausführlicher beschreiben?
Gruß Klaus

Lachtaube

Ich habe mal ein kleines Beispiel mit dynamischer Zuweisung von Standardwerten im Formular gebastelt.
Grüße von der (⌒▽⌒)

Jochen1

#9
@Lachtaube:

Vielen Dank, das sieht nach Erfüllung meiner geheimsten Wünsche aus ! Allerdings kann ich das Formular nicht als Entwurf aufrufen, obwohl ich schon eine Kopie der DB gespeichert habe. Woran kann das nun wieder liegen ? Manchmal scheitere ich bereits an Kleinigkeiten....

@Klaus

Ich verstehe Deine Bedenken. Die Tabelle ist so umfangreich, da sie rund 100 Felder enthält (hat mich selber erschreckt), und über die Jahre neue Felder hinzugekommen sind. Es handelt sich um eine Wertpapierdatenbank, in der Transaktionen geplant, Positionen vorab berechnet, und deren anschliessenden Ausführungen gespeichert werden, so dass sich Performanceauswertungen über die Zeit vornehmen lassen. Ich habe bereits Aufteilungen in weitere Tabellen (z.B. Teilausführungen, Erträge etc.) vorgenommen.

Alle Felder ändern sich bei einem neuen Datensatz, ausser der Standardwert wird verwendet; der verändert sich aber hin- und wieder für künftige Datensätze (z.B. Risikomanagement-Parameter). Diese Standardwerte werden dann z.B. für Berechnungen im Formular verwendet, die auch in dem Datensatz gespeichert werden. Auf diese Weise sind alle erforderlichen Daten in einem Datensatz vorhanden und lassen sich dann historisch nachvollziehen. Man kann sicher noch weiter aufteilen (nach Modulen), aber am Ende müsste ich das dann wieder über Abfragen für jede Transaktion zusammensetzen, und das ist nicht minder kompliziert und vor allem fehleranfällig. Ich habe auch Angst, das noch weiter aufzuteilen, weil es sehr viel Zusatzaufwand bedeuten würde und ich den Mehrwert (noch) nicht erkennen kann.

Es funktioniert jedenfalls recht gut, auch wenn die DB sicher zweifellos professioneller gestaltet werden kann.  Ursprünglich hatte ich das mal mit Excel begonnen, aber das war bei weitem nicht so leistungsfähig und komfortabel wie mit Access.

Die Vorlage resultiert also aus dem Wunsch, bei erneuten Transaktionen mit dem gleichen Instrument Werte nicht immer erneut eingeben zu müssen, z.B. eine Wertpapier-ISIN. Die Lösung von Lachtaube erscheint mir hier sehr zielführend, und alleine kann ich das leider nicht -aber ich kann es mit dieser Hilfe zur Selbsthilfe weiter umbauen und bin für diese Unterstützung sehr dankbar.

Vielen Dank und Grüße,
Jochen
_______________
Access 2010

MaggieMay

Hallo,
Zitat von: Jochen1 am Juli 14, 2016, 13:46:15Allerdings kann ich das Formular nicht als Entwurf aufrufen
doch, das kannst du schon, du siehst es nur nicht. ;-)

Schau mal nach unten auf den Scrollbalken, das Formular befindet sich vermutlich außerhalb des sichtbaren Teils deines Fensters.
Freundliche Grüße
MaggieMay

Jochen1

Jetzt habe ich es - über die Navigationsleiste, denn das Formular öffnet sich als Pop-Up, und weder in der Menü- noch der Symbolleiste unten rechts kann ich auf Entwurf umschalten.

Das muss ich mir in Ruhe ansehen, und vor allem, wie ich es in mein bestehendes System einbauen und nutzbar machen kann.

Erst einmal vielen Dank, tolle Unterstützung !

Jochen
_______________
Access 2010

Beaker s.a.

Hallo Jochen,
Zitatdenn das Formular öffnet sich als Pop-Up, und weder in der Menü- noch der Symbolleiste unten rechts kann ich auf Entwurf umschalten.
Rechtsklick auf die Titelleiste.
gruss
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Jochen1

Danke für den Tip !

... und ich habe es mir angesehen, aber es scheint -wie befürchtet- alles andere als trivial zu sein...ich muss da mal etwas am Wochenende  "herumspielen", um es zu verstehen....

Viele Grüße,
Jochen
_______________
Access 2010