Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Baeny am Februar 19, 2018, 20:07:05

Titel: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am Februar 19, 2018, 20:07:05
Liebe Forummitglieder
Ich bin neu im Access und erstelle ein Journal für meinen privaten Haushalt. Aus der Access-Datenbank erstelle ich dann im Excel mit Pivot-Tabellen praktische Auswertungen. Das Journalformular funktioniert bis auf die Kontierungsangaben. Nach Eingabe der Kontonummer im frmJournal.Kontonr, respektive beim Übergang zum nächsten Feld "Konto", sollten die Felder frm.Journal.Konto und frm.Journal.Kategorie als Text automatisch von der Abfrage AbfKonto_Kat, den der Kontonummer entsprechenden Text übernehmen.
Im Fomular habe ich im Feld "Konto" im Eigenschaftsblatt den Auswahltyp "Kombinationsfeld". Datensatzherkunft ist AbfKonto_Kat, wo beide Texte enthalten sind. Im Tab Ereignis/BeimKlicken habe ich die folgende Prozedur integriert:
__________________________________________________
Option Compare Database
Option Explicite
Private Sub Konto_Click()
Update tblJournal
INNER JOIN tbl AbfKonto_Kat
ON tblJournal.Kontonr = AbfKonto_Kat.IDKonto
Set tblJournal.Konto = AbfKonto_Kat.Konto
Set tblJournal.Kategorie = AbfKonto_Kat.Kategorie
End Sub

_________________________________________________
Da ich das erste Mal nach 20 Jahren wieder etwas mit Access zu tun habe, fange ich praktisch wieder neu an. Wenn ich versucht habe die Prozedur auszuführen, hat sich im Formular nichts verändert.
Mit freundlichen Grüssen
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am Februar 19, 2018, 20:11:26
Hallo,
wenn man mit einem Kombifeld etwas auswählt, wird der Fremdschlüssel der Zieltabelle gefüllt.
Weitere Felder des Kontos zu übertragen ist überflüssig.
Es wird auch nicht die Kontonummer übertragen, sondern die IDKonto.

Für das Schreiben geänderter/angelegter Daten in Tabellen benötigt man im Regelfall keine einzige Aktualisierungsabfrage. In der ganzen Datenbank nicht. Mir scheint daher, dass Du da eher ein grundsätzliches Problem hast.

Zeige mal ein Bild des Beziehungsfensters, damit man der Sache auf den Grund gehen kann. Auf dem Bild sollte man alle Tabellen sehen und die Tabellen so groß dass man alle Felder sieht.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am Februar 19, 2018, 21:05:39
Hallo Mz
Beiliegend die Datenbankbeziehungen.
Mit freundlichen Grüssen
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am Februar 19, 2018, 21:37:36
Hallo,
ich fürchte, das kannst Du alles in die Tonne treten. Da gibt es keine einzige richtige Beziehung. Eine Beziehung läuft immer über den Primärschlüssel und in der anderen Tabelle ein extra Feld als Fremdschlüssel. Niemals über den Klartext. Das ist ja der Sinn eines Primärschlüssels.
Im Anhang ein Bild mit einer Beziehung. Das gilt dann sinngemäß für die anderen Beziehungen auch. Für alle Beziehungen stellt man grundsätzlich den Typ 1 ein. Das ändert man bei Bedarf nur in Abfragen.
Was ist eigentlich der Unterschied zwischen tblKontierung und tblKonto ?
Die Tabellen für Monat und Jahr sind überflüssig, die Felder auch. Nimm statt dessen ein Datum. Das alles bedarf der gründlichen Überarbeitung, so kannst Du nicht weiter machen.

PS:
Lade Bilder bitte im Forum hoch.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am Februar 20, 2018, 19:06:36
Hallo
Die alte Datei ist nun in der Tonne. Eine neue DB aufgebaut. Siehe Beilage. Die Verknüpfungen kann ich jedoch nicht richtig herstellen, denn ich habe es noch nicht begriffen, das Endlosformular richtig zu machen. Zu sagen ist noch, dass ich für meine Zwecke die Eingaben Jahr und Monat so machen möchte wie gehabt im Excel, wo ich die Pivot-Tabellen nach Übertrag der Daten vom Access behandle. Die Kontoangaben habe ich noch nicht ins Formular übernommen. Nur Jahr und Monat. Sobald ich diese jedoch verknüpfen möchte mit der Journaltabelle, so kommt referentieller Integrität angeklickt, die Meldung "dieselbe Anzahl an Feldern mit denselben Datentypen erforderlich". Dies stimmt wohl. Aber im Journal will ich den Datentyp von Jahr und Monat als Text. Das System möchte jedoch Fremdschlüssel mit Primärschlüssel verbinden. Was soll ich da machen??
Die neu aufgebaute Datenbank liegt als Bild bei.
Gruss
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am Februar 20, 2018, 19:30:03
Hallo,
ZitatAber im Journal will ich den Datentyp von Jahr und Monat als Text.
Wieso Text ? beides sind Zahlen, mit Text hast Du mindestens beim Monat keine sinnvolle Sortierung mehr.
Und warum die in die Tabelle sollen ist mir auch unklar, hast Du kein Datum im Journal ? Buchungen ohne Datum machen doch keinen Sinn ?
ZitatDas System möchte jedoch Fremdschlüssel mit Primärschlüssel verbinden.
So ist es ja auch richtig. In die Das System möchte jedoch Fremdschlüssel mit Primärschlüssel verbinden. So ist es ja auch richtig. Der Fremdschlüssel ist mit einem Autowert als PS immer eine Zahl (Longinteger). Kontonr, Kat, Kto haben im Journal nichts zu suchen. Ins Journal kommt nur ein Fremdschlüssel zum Konto, sonst keine Felder.
ZitatZu sagen ist noch, dass ich für meine Zwecke die Eingaben Jahr und Monat so machen möchte wie gehabt im Excel,
Vergiss Excel, Access erfordert eine völlig andere Vorgehensweise.

Das Ganze ist immer noch ziemlich unbrauchbar.
Im Anhang mal ein Bild wie das im einfachsten Fall auszusehen hat.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am Februar 20, 2018, 19:58:49
Hallo Klaus
Wieso Excel? Solche Auswertungen, die ich möchte und auch schon realisiert habe mit Power Pivot, kann Access nicht. Auf der anderen Seite bietet Access für das Handling der Daten viele Vorteile, wo Excel sehr umständlich ist. Apropos Datum: für meine private Buchhaltung genügt mir Monat und Jahr für die Ausgaben und Einnahmen, mindestens vorläufig, wie ich es im Excel bisher handhabte. Wie ich nun mit Deinem DB-Vorschlag umgehen werde, brauche ich jetzt etwas Zeit und eine Pause.
Jedoch vielen Dank für die bisherige Hilfe. Vielleicht werde ich später wieder darauf zurückkommen, wenn andere Probleme anstehen. Jedenfalls bleibe ich bei Access, welches so viele Möglichkeiten bietet.
Mit freundlichen Grüssen
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am Februar 20, 2018, 20:17:02
Hallo,
ZitatZu sagen ist noch, dass ich für meine Zwecke die Eingaben Jahr und Monat so machen möchte wie gehabt im Excel,
Das halte ich für einen Fehler. Speicher das Datum, da lässt sich problemlos Jahr und Monat ableiten.
Eine Datenbank erfordert für eine vernünftige Arbeitsweise einen normalisierten Aufbau. Die Exporte macht man dann mit Abfragen die die Tabellen entsprechend den Anforderungen für Excel umstrukturieren.
Außerdem, glaube ich dass Du Deine Auswertungen bei korrektem Aufbau auch direkt in Access machen kannst.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Beaker s.a. am Februar 21, 2018, 13:13:16
Hallo,
Zitatmindestens vorläufig
Das impliziert doch, dass es später einmal anders sein könnte.
Warum dann also umbauen, wenn's doch gleich ein Datum sein kann.
Folge Klaus' Rat und verwende ein komplettes Datum. Damit lässt sich
alles machen.
gruss ekkehard
Titel: Re: Ereignisprozedur in Endlosformular/Nachlagefelder
Beitrag von: Baeny am April 04, 2018, 12:43:13
Hallo Ekkehard und Klaus
Inzwischen habe ich am Modell weiter gebastelt und bin etwas weitergekommen, aber wegen den Nachlagefeldern, die ich beim Erfassen im Endlosformular praktisch fand, beim Export der Tabelle ins Excel auf ein neues grosses Problem gestossen. Ich bin dann bei DBWIKI auf die Nachteile der Nachschlagefelder gestossen. Jetzt weiss ich nicht mehr weiter, da im Excel, wo ich die Pivottabellen sehr schätze und davon nicht abgehen will, nur die Zahlen der Schlüsselfelder transportiert werden. Auf diese Lösung bin ich aufgrund des Nordwind-Beispiels gekommen. Vom Endlosformular möchte ich auch nicht weggehen. Betreffend Datum möchte ich sagen, dass ich dies auch noch belassen habe, da mir meine Lösung keine weiteren Probleme verursachte. Bei den Nachschlagefeldern Kontobezeichnung und Kategorie kann ich mit der Kontonummer Eingabe die Texte in der Tabelle speichern und diese werden als Texte dort angezeigt, jedoch beim Transportieren ins Excel nicht mehr. Ein weiteres Problem ist auch noch, dass ich wegen den Nachschlagefeldern keine Standartwerte mehr benutzen kann.
Im Anhang sende ich mein komplettes Modell mit einigen realistischen Journalbuchungen zum besseren Verständnis. Bin bereit, allenfalls auch Makros von Access zu verwenden, wenn das hilft, schlimmstenfalls auch VBA.
Besten Dank für Eure Hilfe im voraus

Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am April 04, 2018, 13:30:10
Hallo,
wirf die Nachschlagefelder raus ohne Wenn und Aber, Du hast dadurch nicht die geringsten Nachteile. Nachschlagefelder sind als Kombinationsfelder nur in Formularen sinnvoll. In Tabellen haben die nicht zu suchen.
In der Tabelle werden auch nicht die Texte gespeichert, das kriegst Du nur vorgegaukelt. In der Tabelle steht die Zahl, wie Du ja beim Export merkst.
Für den Export verwendet man eine Abfrage die alle relevanten Tabelle mit den Verknüpfungen enthält. Dann nimmt man die Felder in die Abfrage auf die man für den Export braucht. Also nicht die Schlüsselfelder, sondern die Klartextfelder. Und dies Abfrage wird exportiert.
ZitatEin weiteres Problem ist auch noch, dass ich wegen den Nachschlagefeldern keine Standartwerte mehr benutzen kann.
Aber natürlich kannst Du auch dann Standardwerte benutzen, es muss nur die Schlüsselzahl als Standardwert verwendet werden.
ZitatBetreffend Datum möchte ich sagen, dass ich dies auch noch belassen habe,
Das halte ich für einen groben Fehler, Buchungen sollten mit Datum gebucht werden, alles andere ist Krampf.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Beaker s.a. am April 04, 2018, 14:31:24
Hallo,
In der Zwischenzeit hat Klaus ja schon geantwortet, und es ist eigentlich
genau das, was ich auch anmerken wollte.
Ich habe es dir mal (ohne in die Tiefe zu gehen*) ) in der o.a. Zeit zurecht
geschustert.
gruss ekkehard

*) Indices, Gültigkeiten usw.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am April 04, 2018, 16:50:14
Hallo Beaker, Klaus
Herzlichen Dank für Eure prompten Antworten, welche meinem Weitermachen sicher helfen werden, so wie die überarbeitete DB von Beaker mit den neuen Beziehungen aussieht. Den Import in die Excel Powerpivottabellen werden ich noch testen. Zuerst muss ich noch die Kategoreinamen in der Abfrage anzeigen lassen. Diese fehlen noch.
Vorläufig Besten Dank
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am April 05, 2018, 12:06:16
Hallo Beaker
Bis auf eine Fehlermeldung klappte alles picobello. Die Query brachte ich supereinfach und schnell zur Exceltabelle. Bei der KontoKategorie musste ich noch die Beziehungen ergänzen. Aber das Wort "txtKategorieName" stammt nicht von mir, was genau die Fehlermeldung beim Oeffnen des Formulars, und beim Versuch eine Neueingabe zu machen, verursachte. Siehe Anhänge. Besten Dank für Fehlerbehebung im voraus.
Gruss
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am April 05, 2018, 12:23:38
Hallo,
der Code zur Zuweisung der Kategorie ist überflüssig. Die Kategorie zeigt man über eine Abfrage direkt an.
Geänderte DB anbei.

Die Nachschalgefelder habe ich mal einfach entfernt, Du hast es ja trotz mehrfachen Hinweisen nicht gemacht.
Die ID für das Jahr in der Jahrestabelle ist nicht notwendig. Du kannst Die Jahreszahl direkt als ID nehmen. Und in der Monatstabelle ist das Textfeld überflüssig, den Monatsnamen kann man über die Zahl direkt anzeigen. Dann kannst Du auch ohne Krücken direkt richtig sortieren.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am April 05, 2018, 13:20:05
Hallo Klaus
Herzlichen Dank für die Behebung des Fehlers. Die Nachschlagefelder in der Tabelle liess ich stehen, weil sie mich nicht mehr störten durch das Weglassen der Direktabfragen des Textes im betreffenden Feld, was eben nicht gut war. Ihr Vorschlag und das Entfernen der Nachschlagefelder in der Tabelle ist mir mehr als recht. Danke.  :) Von den Nachteilen dieser Felder erfuhr ich erst etwas als ich beim Export ins Excel nicht das bekam, was ich wollte. Die sogenannten Textkrücken bei den Feldern Monat und Jahr werde ich auch noch entfernen, was mir natürlich noch Zusatzarbeit im Excel für die Pivottabellen (ganzes Vorjahr) bescheren wird.  :( 
Damit kann ich jetzt mit diesem für mich ersten Access Projekt leben und habe in diesem Forum einiges gelernt, was man sonst nicht so einfach in Büchern oder Hilfen zum Programm lernt.
Gruss
Baeny
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am April 05, 2018, 13:36:55
Hallo,
Zitatwas mir natürlich noch Zusatzarbeit im Excel für die Pivottabellen (ganzes Vorjahr) bescheren wird.
Daher halte ich es für einen groben Fehler nicht das Datum zu speichern sondern nur Monat und Jahr.
Mit einem Datum wird jede zeitraumbezogene Auswertung zu einem Kinderspiel, was mit Monat und Jahr nur mit Krücken und Aufwand zu erledigen ist.
Daher verstehe ich immer noch nicht, warum Du hier unbedingt auf ein Datum verzichten willst.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am April 05, 2018, 14:26:38
Hallo Klaus
Ganz einfach. Ich würde immer dasselbe Datum, nämlich den letzten Tag eines Monats eingeben. Ich brauche nichts taggenaues bei meinen Auswertungen und Suchen. Die genauen Datums von den Bankbelegen und von den Quittungszetteln suchen und im Formular eingeben ist mühsamer als 03 eintippen. Für meine Haushaltbuchhaltung ist der Monat, um eine Ausgabe zu finden genügend hilfreich. Für ein Geschäftsbuchhaltung ist natürlich mein System ungeeignet.
Wenn die Bank mir digital Bankdaten mit Kontierung und nach Zahlungsempfänger liefern würde, so würde ich mir vielleicht die Mühe nehmen von den Quittungen der verschiedenen Geschäfte das Datum zu suchen und einzutippen. Aber warum auch?
Das ist der einfache Grund
Gruss
Walter
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: MzKlMu am April 05, 2018, 14:34:17
Hallo,
Du hast mich nicht überzeugt. Wenn Du unbedingt bei Monat und Jahr bleiben willst, so würde ich in einer Abfrage ein Datum erzeugen, das immer den letzten eines Monats verwendet. Und über dieses Datum dann auswerten.
Du bist Dir über die Problematik der Auswertung eines Zeitraums ohne Datumsfeld nicht im Klaren.
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Beaker s.a. am April 05, 2018, 14:35:21
Hallo Klaus,
ZitatDie Nachschalgefelder habe ich mal einfach entfernt, Du hast es ja trotz mehrfachen Hinweisen nicht gemacht.
Da muss doch nochmal nachfragen wie man die entfernt. Ich hatte das,
muss jetzt sagen, schon versucht, indem ich einfach nur die DS-Herkunft
gelöscht hatte. Das scheint aber nicht zu reichen. Muss man die Felder
neu anlegen?
Zitatder Code zur Zuweisung der Kategorie ist überflüssig. Die Kategorie zeigt man über eine Abfrage direkt an.
Manchmal hat man echt ein Brett vor'm Kopf  >:(
gruss ekkehard
Titel: Re: Ereignisprozedur in Endlosformular
Beitrag von: Baeny am April 05, 2018, 14:40:44
Hallo Klaus
Ja, Du hast sicher recht. Aber ich kenne die Problematik über die Auswertung über einen Zeitraum weder im Excel noch im Access nicht. Vielleicht könntest Du mir hierüber Hinweise geben.
Gruss
Baeny