Forum des VBA-Tutorials

Wert von Bezeichnungsfeld in leere Spalte schreiben (Access)

Adrox, Donnerstag, 12. Januar 2017, 22:57 (vor 103 Tagen)

Hallo!

Ich habe ein kleines Problem bezüglich Access Formular (bin Anfänger) und hoffe, jemand kann mir helfen.

Ich habe eine Datenbank, wo es um Verschiffung von Waren geht. Beziehungen usw. sind richtig gesetzt und Formular funktioniert auch.

Im Formular sind 2 Kombinationsfelder enthalten, eines davon zeigt die Route an mit dem Basispreis und das zweite Kombinationsfeld zeigt die Gewichtsklasse an. (Ich will nun den Gesamtpreis errechnen, basierend auf dem Gewicht der Waren multipliziert mit dem Basispreis)

Als nächstes wird die Operation Kombinationsfeld1*Kombinationsfeld2 ausgeführt und das Ergebnis eben in so einem Bezeichnungsfeld anzeigt (welches nicht bearbeitet werden kann, da deaktiviert).
Ich habe bei den Tabellen in der Datenbank eine leere Spalte "Gesamtpreis" enthalten.. Gibt es nun irgendwie eine Möglichkeit, dass ich den Wert, der im Bezeichnungsfeld steht, in die Datenbankspalte "Gesamtpreis" schreiben kann?

Wäre für Hilfestellungen sehr froh!

Gruß

Wert von Bezeichnungsfeld in leere Spalte schreiben

Nikno, Freitag, 13. Januar 2017, 08:01 (vor 103 Tagen) @ Adrox

Eine Option wäre es, das Ergebnis in einem Textfeld mit Steuerelementinhalt "Gesamtpreis" statt in einem Bezeichnungsfeld einzutragen.

Wenn du bei dem Bezeichnungsfeld bleiben möchtest, könntest du entweder ein zusätzliches, unsichtbares Textfeld wie oben erstellen oder das Feld manuell in VBA mit DAO einfügen.
Zugehöriger VBA-Code im Event NachAktualisierung lautet:

 
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
 
rst.Bookmark = Me.Bookmark
rst.Edit
rst!Gesamtpreis = Bezeichnungsfeld.Value
rst.Update
 
Set rst = Nothing
 

Wert von Bezeichnungsfeld in leere Spalte schreiben

Martin Asal, Freitag, 13. Januar 2017, 11:05 (vor 103 Tagen) @ Adrox

Hallo,

Nikno hat zwar korrekt gezeigt, wie du das umsetzen kannst, aber was die Normalisierung deiner DB betrifft, glaube ich, dass du gegen die Nullte Normalform verstößt.

Martin

Wert von Bezeichnungsfeld in leere Spalte schreiben

Adrox, Freitag, 13. Januar 2017, 18:33 (vor 103 Tagen) @ Martin Asal

Das heißt also, dass ich gemäß dieser Nullten Normalbedingung für den Gesamtpreis keine eigene Spalte erstellen sollte?

Es funktioniert schon, wenn ich mittels Abfrage

SELECT KundenNr, Preis*Aufpreis AS Gesamtpreis

eingebe, dann erhalte ich eine Spalte Gesamtpreis, aber halt nur bei der Abfrage. Ansonsten habe ich in den Tabellen keinen Gesamtpreis. Ob das so wohl gut ist..

Jedenfalls danke für eure Hilfe. Falls ich das mit der Normalbedingung ignoriere, dann funktionierte der von Nikno vorgeschlagene Weg! :-)

Wert von Bezeichnungsfeld in leere Spalte schreiben

PhilS ⌂, Sonntag, 15. Januar 2017, 19:26 (vor 101 Tagen) @ Adrox

Es funktioniert schon, wenn ich mittels Abfrage

SELECT KundenNr, Preis*Aufpreis AS Gesamtpreis

eingebe, dann erhalte ich eine Spalte Gesamtpreis, aber halt nur bei der Abfrage. Ansonsten habe ich in den Tabellen keinen Gesamtpreis. Ob das so wohl gut ist..

Ja, das ist gut, weil du damit die Daten nicht doppelt speicherst und sie jederzeit mit der Abfrage errechnen kannst.

Wenn du das berechnete Feld unbedingt in der Tabelle haben willst, kannst du auch eine berechnete Spalte in der Tabelle erstellen. Das ist zwar aus meiner Sicht weniger sinnvoll, als es in der Abfrage zu berechnen, aber immer noch besser, als es statisch in der Tabelle zu speichern.

Wert von Bezeichnungsfeld in leere Spalte schreiben

Martin Asal, Sonntag, 15. Januar 2017, 21:12 (vor 100 Tagen) @ PhilS

Sorry, Phil, aber ich muss deinem Artikel widersprechen:

Zunächst würde ich den Abschnitt "Grundsätzliches zu berechneten Feldern" an den Anfang stellen. Völlig zu Recht rätst du darin von berechneten Feldern eher ab. Für meinen Geschmack sogar noch zu wenig, den du konstruierst mit Mühe zwei Szenarien, in denen berechnete Felder in Tabellen angeblich Sinn machen könnten. Genau diese beiden Szenarien sehe ich aber gerade nicht:

Wenn das berechnete Feld zentrale Bedeutung innerhalb der Tabelle hat, sollte man sich fragen, ob die Normalisierung nicht anders sinnvoller wäre. Beispiel: Es werden Daten zu Rechtecken gespeichert. Es gibt ein Feld "Länge" und eines "Breite". Für die User ist die Fläche von zentraler Bedeutung. Da kann es sinnvoller sein, nicht die Breite, sondern gleich die Fläche zu speichern. Falls wirklich mal jemand ausnahmsweise die Breite braucht, kann er sie ja berechnen. Die Frage ist also, was weniger häufig benötigt wird.

Wenn man eine "offene Anwendung" erstellt, in der auch Erweiterungen durch Benutzer zulässig oder sogar erwünscht sind, sollte der Benutzer wissen, was er da macht. Sonst hat man es mit einer irgendwann nicht mehr wartbaren Anwendung zu tun. Gerade deshalb würde ich in so einem Fall unter keinen Umständen derartige Felder zulassen.

Meine persönliche Meinung zu berechneten Tabellenfeldern: ms hat da - wie so oft - groben Unfug eingebaut.

Martin

Wert von Bezeichnungsfeld in leere Spalte schreiben

PhilS ⌂, Samstag, 04. Februar 2017, 14:15 (vor 81 Tagen) @ Martin Asal

Nachdem wir uns gestern beim Stammtisch getroffen haben, ist mir eingefallen, dass ich hier noch eine Antwort schreiben wollte.

Es gibt ein Feld "Länge" und eines "Breite". Für die User ist die Fläche von zentraler Bedeutung. Da kann es sinnvoller sein, nicht die Breite, sondern gleich die Fläche zu speichern. Falls wirklich mal jemand ausnahmsweise die Breite braucht, kann er sie ja berechnen. Die Frage ist also, was weniger häufig benötigt wird.

Nach Normalisierungsregeln sind beide Ansätze gleichermaßen gültig. Wenn in dem Beispiel in der Praxis die Fläche als Kriterium für Abfragen verwendet wird, stimme ich dir unbedingt zu, weil damit eine Indizierung möglich ist.

Hier bin ich aber der Meinung, dass der unterschiedliche Nutzen der beiden Ansätze daher kommt, weil Microsoft hier nicht genug getan hat. Wenn man in Access berechnete Felder indizieren könnte (wie beim SQL-Server), dann wären beide Ansätze auch in der Praxis gleichwertig.

Wenn man eine "offene Anwendung" erstellt, in der auch Erweiterungen durch Benutzer zulässig oder sogar erwünscht sind, sollte der Benutzer wissen, was er da macht. Sonst hat man es mit einer irgendwann nicht mehr wartbaren Anwendung zu tun. Gerade deshalb würde ich in so einem Fall unter keinen Umständen derartige Felder zulassen.

Ich sehe das eher so: Wenn eine Berechnung bereits auf Tabellenebene implementiert ist, ist das Risiko wesentlich geringer, dass es nach einer Weile 20 verschiedene Abfragen gibt, die alle diese Berechnung enthalten. Von dem Aufwand einer evtl. irgendwann erforderlichen Änderung abgesehen, führt das langfristig dazu, dass 19 mal die Berechnung korrekt ist und 1 mal falsch.

Dass Änderungen durch technisch inkompetente Personen so oder so zu Problemen führen können ist völlig unbestritten.

RSS-Feed dieser Diskussion
powered by my little forum