Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Parzelle387 am Februar 22, 2020, 11:16:06

Titel: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 22, 2020, 11:16:06
Guten Morgen,

nachdem ich mir eure Ratschläge zu Herzen genommen habe, hab ich meine Datenbank komplett umgestrickt.
Ich habe jetzt eine Tabelle Mandanten, Vorgänge und Rechnungen. Jede mit einem entsprechenden ID Feld
Zur Eingabe der Daten habe ich ein Formular mit UFo basieren auf einer Abfrage aus Vorgang & Rechnungen.
Bei Eingabe der Mandanten und Vorgangsnr funktioniert noch alles. Es wird brav ein Datensatz unter dem Mandanten mit entsprechender Vorgangsnr angelegt.
Springe ich dann aber ins UFo und möchte die Rechnungen eingeben, meckert er: das Datenbankmodul kann in der Tabelle "Vorgang" keinen Datensatz mit passendem Schlüsselfeld "Rechnungen.Vorgangsnr" finden.

Ich denke es braucht noch ein paar mehr Infos zur Lösung des Problems. Da ich nicht weis welche, hoffe ich auf eure Hilfe und nachfragen.

Vielen Dank schon mal

Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: DF6GL am Februar 22, 2020, 11:48:08
Hallo,

lad die DB einfach mal hier hoch,  datenreduziert, komprimiert/repariert und gezippt..


Vermutlich ist das UFO_Steuerelement nicht korrekt mit dem HFO verküpft..
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 22, 2020, 12:22:20
OK, ich versuch das mal mit dem hochladen.

Wo würde ich die Verknüpfung des Steuerelements finden ?
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 22, 2020, 13:05:04
 et voilá

Ich weis das die Beschriftungen der Felder miserabel ist. :-\
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: DF6GL am Februar 22, 2020, 14:07:21
Hallo,

wenn Du es weißt, warum änderst Du es nicht gleich??

(Sonder- und Leerzeichen vermeiden, eindeutige Feldnamen verwenden)

Die Beziehungen sind falsch.  Zudem fehlende Normalisierung der Mandanten-Tabelle (Kinder!).

Der Formularaufbau ist falsch.  (Beziehungsfelder  (Schlüsselfelder), unsinnige Benamsung, Datenherkunft gebunden an Abfragen. In dieser Phase sind Tabellen als Datenherkunft besser geeignet ).

Für für jede Tabelle ein Formular erstellen. FrmRechnungen als Endlosform, wird im HFO (frmVorgang) mit einem UFO-Steuerelement angezeigt.
Der Mandant wird in frmVorgang mittels Kombifeld ausgewählt.


Die Beziehungen sagen aus: 
Ein Mandant besitzt mehrere Vorgänge.
Einem Vorgang werden mehrere Rechnungen zugeordnet.


In jedem Code-Modulkopf "Option Explicit" hinzufügen.


In der anhängenden DB sind nicht alle Punkte behandelt.



Wenn schon, dann so:
et voilà     ;D
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 22, 2020, 14:46:51
Oje,
ehrlich gesagt bin ich jetzt nicht wirklich schlauer, ausser das wohl alles falsch ist was falsch sein kann :'(.

Ist das mit dem Kombifeld für die Mandanten nicht bisschen unglücklich bei vielen Mandanten ?

Vielen Dank fürs ändern.
Aber die Rechnungen werden trotzdem nicht unter dem Vorgang gespeichert, oder ?
Wenn ich Tabelle Mandanten reinschaue, dann ist zwar ein Vorgang da, aber wenn ich den mit  +"erweitern" will, fragt er nach einer Vorgangsnr.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: DF6GL am Februar 22, 2020, 15:09:03
Hallo,

und wo hakt es denn?

ZitatIst das mit dem Kombifeld für die Mandanten nicht bisschen unglücklich bei vielen Mandanten


Was heißt denn "unglücklich"?

Womit wärst Du denn glücklich?

Stimmt denn die Beziehungslogik?:

Ein Mandant kann mehrere Vorgänge haben.
Ein Vorgang kann mehrere Rechnungen haben.

Wenn so, dann ist auch die Reihenfolge (Hirachie)der zu verknüpfenden Formulare so:

HFO "frmMandanten" mit UFO "frmVorgang" mit weiterem UFO "frmRechnung"

oder
HFO "frmVorgang" und Auswahl eines Mandanten (Kombifeld) und mit weiterem UFO "frmRechnung".

Soweit ich alles verstanden habe, bekommst Du "Rechnungsstapel" (--> Vorgänge)  zu einem Mandanten, die auch als Stapel abgearbeitet werden.
Also ist diese Konstellation mit den Tabellen abzubilden. Und das geht mit meinem Vorschlag.
Die Anzahl der Mandanten ist doch unerheblich... Die Mandanten müssen eh vorher eingepflegt werden.

Zitat
Wenn ich Tabelle Mandanten reinschaue, dann ist zwar ein Vorgang da, aber wenn ich den mit  +"erweitern" will, fragt er nach einer Vorgangsnr

Öffne die Tabelle "Vorgang" in der Entwurfsansicht und ändere im Eigenschaftenblatt bei "Verknüpfen von" den Namen in "Rech_VorgangsID".
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 22, 2020, 15:43:58
Mit unglücklich meine ich bei sagen wir 50 Mandanten wäre das Kombifeld ja ziemlich lang.
Ich würde die Mandantennummer halt lieber eingeben. Und um sicher zu gehen ob es der Richtige ist, dann der Name daneben.
Die Beziehungslogig stimmt soweit,
Mandant 1 -> Vorgang 1 -> Rechnung1
                                    -> Rechnung 2
                                    -> Rechnung n
                -> Vorgang 2 -> Rechnung 1
                                    -> Rechnung 2
                                    -> Rechnung n
Mandant 2 dann genauso....

Zitat von: DF6GL am Februar 22, 2020, 15:09:03
HFO "frmVorgang" und Auswahl eines Mandanten (Kombifeld) und mit weiterem UFO "frmRechnung".
Wäre mir lieber  ;)
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: DF6GL am Februar 22, 2020, 15:54:26
Hallo,

irgendwie verwirrst Du mich..

ZitatMit unglücklich meine ich bei sagen wir 50 Mandanten wäre das Kombifeld ja ziemlich lang.
Ich würde die Mandantennummer halt lieber eingeben. Und um sicher zu gehen ob es der Richtige ist, dann der Name daneben.

Genau so geht es doch.. ???
gib in das Kombifeld die Mandantennummer ein und das Kombi springt sofort zum entspr. Mandanten.. 


ZitatWäre mir lieber

??? ??? ???

genau so ist es doch im "frmVorgang"
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 22, 2020, 16:16:46
Achso,
dann hab ich das mit dem Kombinationsfeld falsch verstanden. Ich dachte da kann man nur aus den Feldern auswählen die eingetragen sind. 8)

Liegt wahrscheinlich daran, das ich kurz vor dem verzweifeln bin  ;D

Ich werd mal nen päusschen einlegen und nachher nochmal "neu" dran gehen.... ;)

Aber vielen vielen Dank bis hier.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am Februar 22, 2020, 19:29:00
Hallo,
die komplette Mandantentabelle sollte man in die Tonne treten. Entschuldigung.  ;D
Die Tabellen für Vorgang und rechnung sind OK.

Alle Personen egal ob Mandant, Betreuer, Kind, Lebenspartener, Ehepartner gehören in eine Tabelle mit ihren personenbezogenen Daten. In die Tabelle kommt ein Feld zur Kennzeichnung der Personenart. Mandant, Betreuer oder Andere.
Die Ja/Nein Felder für den Familienstand können ersatzlos entfallen, da doppelt gemoppelt. Gibt es ein Datum bei verheiatet, ist die Person verheiratet, wozu dann noch ein Ja/Nein Feld. Das gilt sinngemäß für verwitwet und geschieden.
In einer weiteren Tabelle in der der Primärschlüssel der Personentabelle 2x als Fremdschlüssel aufgenommen wird, kannst Du den Mandanten die für ihn relevanten Personen (Partner, Kinder, Betreuer) zuordnen.
Dann hat man eine Personentabelle. Dieser dann einen Personentabelle kann man über eine n:m Beziehung die Kommunikationsarten mit den entsprechenden Einträgen zuordnen.
Dann legt man ein Hauptformular an zur Anzeige der Personen.
In dieses Hafo kommt eine Registerseite mit einigen Registerseiten in denn man über Ufo die Kinder, die Partner, den Betreuer und die Kommunikationsdaten übersichtlich auf einen Blick anzeigen kann. Hier können die Daten auch erfasst und bearbeitet werden.

Weiterhin wird je eine Tabelle benötigt für Ort mit PLZ, OrganisationBetreuer und Krankenkasse.

Hier gibt es noch sehr viel zu tun.

Wenn Du die DB umstrukurieren willst, mache ich Dir das mal. Aber nur dann, wenn Du dann so weiter machst.
Lasse es mich wissen.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am Februar 23, 2020, 08:56:42
Klar würde ich tun, möchte ja das es funktioniert.
Bin ja für jede Hilfe dankbar.
Vielleicht kann ich dir dann noch paar Infos und Hintergründe senden (per PN ) wenn ok ist ?
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am Februar 23, 2020, 10:38:20
Hallo,
ja, Informationen zu den Hintergründen wären gut.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 03, 2020, 23:26:19
Hallo,
was lange währt wird endlich zu einem Vorschlag. Ob es gut wird, wird man sehen.

Du wirst Die DB nicht mehr erkennen. Da ist alles umgekrempelt.

Alle Personen werden in einer Tabelle aufgenommen, egal ob Mandant, Betreuer, Kind usw. usw. Nur die reinen Personendaten.
Dann gibt es eine Tabelle für die Zuordnungen. In dieser Tabelle ist der FS zum Mandant und der FS zu einer zugeordneten Person gespeichert. Je Zuordnung gibt es 2 Datensätze, ein DS von Mandant zu Zugeordneter Person und ein DS umgekehrt. Der umgekehrte DS wird automatisch erstellt, wenn eine Zuordnung getroffen wurde.
Dann wurde auch die Kommunikation geändert, da alle Personen in einer Tabelle sind, könne alle Kom.Daten zu einer Person in einem Unterformular angezeigt werden.
Das gleiche gilt sinngemäß für die eingereichten Rechnungen.
Auch die Adressdaten werden in einem Ufo erfasst. Zu einer Person können beliebig viele Adressen gespeichert werden, denn Adressen können sich ändern und die alten Adressen sollten erhalten bleiben. Die Aktuelle Adresse erhält einfach einen Haken.

Alle Dateneingaben/Änderungen erfolgen im Formular ,,Erfassung" das dann in Registern verschiedene Unterformulare zeigt. Es kann nur dieses eine Formular ,,Erfassung" verwendet werden, die anderen Formulare können nicht eigenständig geöffnet werden.
Die Dateneingaben müssen über diese Formulare gemacht werden. Auch müssen die Buttons genutzt werden. Im Formular "Erfassung" hast Du links das lange Listenfeld mit dem Du problemlos jede Person findest und anzeigen kannst.

Es hört sich jetzt alles kompliziert an, aber wenn Du es verstanden hast, ist es einfach.
Es gibt auch relativ wenig VBA Code den ich aber etwas kommentiert habe.
Es ist unerlässlich, dass Du die Zusammenhänge verstehst, sonst wirst Du an dieser DB mal nichts selbständig ändern können, also ran ans Werk.

Schaue Die vor allem mal die Beziehungen an. Da gibt es z.B. die Tabelle ,,tabPersonen_1". Das ist ein automatischer Klon der Tabelle ,,tabPersonen". Das ist notwendig, um 2 Fremdschlüsselfelder in die Tabelle aufnehmen zu können.

Dann schaust Du mal die Formulare im Entwurf an.

Viel Spaß beim Stöbern. Lege Dir sicherheitshalber gleich mal eine Kopie an zum Prüfen und Verstehen, damit da nix schief geht.

Bei Fragen bitte melden.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 04, 2020, 21:49:01
Hallo,

sieht echt super aus. Ich denke ich komme ganz klar. Den Sinn und die Verknüpfungen habe ich verstanenden denke ich. Ich habe auch schon ein Reiter erfolgreich hinzugefügt. Der besteht aber auch nur aus drei Krontrollkästchen.
Jetzt bin ich gerade damit beschäftigt, einen weiteren Reiter für die Kostenträger einzubauen.
Hier dachte ich an zwei Tabellen. Da es 2x immer die gleichen etwa 10 Kostenträger in unterschiedlichen Kombinationen sind. Einen Reiter Kostenträger in dem man dann die entsprechenden 2 auswählt.


Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 05, 2020, 00:08:54
Hallo,
ZitatDer besteht aber auch nur aus drei Krontrollkästchen.
Ein Reiter für 3 Kontrollkästchen ?
Was stellen die denn dar ?

Zu was werden denn die Kostenträger zugeordnet ?
Zum Mandaten ?
Zum Vorgang ?
Zur Rechnung ?

Erkläre das mal genauer.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 05, 2020, 08:36:12
Hallo,

ich habe mittlerweile insgesamt 4 Reiter hinzugefügt.
Alle werden den Personen(Mandanten) zugeordnet, verknüpft über die PersonID
1. Kontoverbindung, 2. Pflegegrad, 3. Verteilschlüssel der Kostenträger, 4. Kostenträger.

Ist es eigentlich nicht vielleicht doch möglich, den Reiter mit den Rechnungen/Vorgängen irgendwie von den anderen zu trennen ? Ich dachte da an das gleiche Formular Erfassen NUR mit dem Ufo Rechnungen....
Hintergrund ist, die Kundendaten gebe ich ja in der regel nur einmal ein, bis auf die ein oder andere Änderung bei Bedarf.
Das mit den Vorgängen und Rechnungen ist die eigentliche "Arbeit".
Hier heraus möchte ich ja auch diverse Berichte erzeugen, die dann an die Kundendaten geknüpft sind. Also z.B. nach Eingabe der Rechnungen entsprechende Schreiben an die Kostenträger erzeugen etc..


Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 05, 2020, 23:55:16
Hallo,
Zitatden Reiter mit den Rechnungen/Vorgängen irgendwie von den anderen zu trennen ?
Ja, das ist schon möglich. Bedenke aber, dass das auf diesem Register/Reiter 2 Unterformulare sind. Ufo1 zeigt die Vorgänge und darin ist ein Ufo das die Rechnungen zum Vorgang zeigt. Du brauchst also ein Formular das die Vorgänge in einem Hafo zeigt und darin muss ein Ufo für die Rechnungen angelegt werden.
Im Hafo für die Vorgänge musst Du eine Möglichkeit schaffen (z.B. mit einem Kombi oder Listenfeld) einen Mandanten zu suchen und anzuzeigen. Dabei ist zu bedenken, dass ein Mandant mehrere Vorgänge haben kann.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 08, 2020, 16:58:59
Kann ich eigentlich die langen Listenfelder (Vorgang suchen & Personen suchen) sortieren ?
Im Moment steht der "älteste" Datensatz oben.
Bei den Personen ist es egal, aber bei den Vorgängen wäre es schön, wenn der "letzte/neueste" oben steht.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 08, 2020, 18:21:35
Hallo,
natürlich kannst Du die sortieren. Die Listenfelder haben als Datenherkunft eine Abfrage (auf die 3 Punkte hinten klicken in der Zeile) und in jeder Abfrage kannst Du wie gewünscht sortieren.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 09, 2020, 10:09:51
In der Datenherkunft war keine Abfrage drin, daher hatte ich mich schon gewundert.
Hab jetzt eine Abfrage eingefügt und "sortieren"eingestellt.

Ich kann aber da eintragen was ich will, absteigend oder aufsteigend, es bleibt immer der 1. Eintrag oben stehen.
Kann das mit den Filterkriterien des Ereignisses beim Anzeigen zusammen hängen ?
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: DF6GL am März 09, 2020, 11:17:21
Hallo,


ZitatIn der Datenherkunft war keine Abfrage drin, daher hatte ich mich schon gewundert.
Dann wird die Datensatzherkunft vermutlich durch VBA-Code eingestellt.


ZitatKann das mit den Filterkriterien des Ereignisses beim Anzeigen zusammen hängen ?


und was stehen denn dort für Kriterien?  Zeig mal den Code..
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 09, 2020, 14:19:11


Das Listenfeld selbst:

Private Sub lstVorgangSuchen_AfterUpdate()
Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[VorgangsID] = " & Me.lstVorgangSuchen
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

Private Sub lstVorgangSuchen_GotFocus()
    Me.lstVorgangSuchen.RowSource = "SELECT VorgangsID, VorgDatum, lfdNr, Vorgabgeschlossen FROM tblVorgang WHERE PersonID_F=" & Me.PersonID_F
End Sub

Das Ufo:

Private Sub Form_Current()
    Me.lstVorgangSuchen.RowSource = "SELECT VorgangsID, VorgDatum, lfdNr, Vorgabgeschlossen FROM tblVorgang WHERE PersonID_F=" & Me.PersonID_F
    Me.lstVorgangSuchen = Me.VorgangsID
End Sub
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 09, 2020, 14:35:07
Hallo,
die Zuweisung von RowSource (Datenherkunft) per VBA hebt die Einstellungen in den Eigenschaften auf. Die kannst Du dort wieder löschen.
Ergäze die "Select ... " Zeile wie folgt.

"SELECT VorgangsID, VorgDatum, lfdNr, Vorgabgeschlossen FROM tblVorgang WHERE PersonID_F=" & Me.PersonID_F & " Order By Feldname"Sortiert aufsteigend.
...Order By Feldname Desc"
sortiert absteigend. Leerzeichen vor Order nicht vergessen.
Beide Select Zeilen entsprechend ergänzen.
Mit Order By kann man auch eine kommagetennte Feldliste übergeben um nach mehreren Feldern zu sortieren.

Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Beaker s.a. am März 09, 2020, 14:37:45
ZitatBeide Select Zeilen entsprechend ergänzen.
Wobei die Zuweisung bei "GotFocus" überflüssig ist.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 09, 2020, 14:51:31
Funktioniert super.

Ihr seid echt Klasse ;D
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 09, 2020, 16:22:14
Halo,
@ekkehard
ZitatWobei die Zuweisung bei "GotFocus" überflüssig ist.
nein, ist es nicht. Wenn in einem bestehenden Datensatz (wegen einer Falscheingabe z.B.) die PersonID_F geändert werden muss, so wird Form_Current() nicht ausgelöst. Das Listenfeld lstVorgangSuchen muss aber trotzdem angepasst werden, daher ist "GotFocus" notwendig.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Beaker s.a. am März 10, 2020, 20:05:12
Hallo Klaus,
Zitatso wird Form_Current() ausgelöst ...
... und das Listfeld aktualisiert, - oder was übersehe ich dabei?
gruss ekkehard
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: DF6GL am März 10, 2020, 20:12:03
Hallo,

Klaus hat hier :

Zitatso wird Form_Current() ausgelöst

"..nicht.." vergessen... ;)
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: MzKlMu am März 10, 2020, 20:14:32
Ja, habe das nicht vergessen. Habe es oben noch nachgetragen.
Danke für den Hinweis.
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Beaker s.a. am März 11, 2020, 18:12:59
Hallo ihr beiden,
Danke, hatte ich wohl zu schnell gelesen/geantwortet.
gruss ekkehard
Titel: Re: Unterformular speichert keine Daten (Stichwort Schlüsselfelder)
Beitrag von: Parzelle387 am März 13, 2020, 22:08:06
Hallo Klaus und auch alle anderen,

bis jetzt funktioniert in der DB alles so wie es soll  :).
Hab nur noch 2 Probleme (glaub ich) an denen ich verzweifle:
Ich fange mit einem erstmal an (geht nämlich eher um Berichte als um Formulare):
Alle Berichte spucken das aus, was sie sollen. Ich bekomme nur eines nicht hin, das mit den Adressen:
Wenn ein Mandant eine Adresse hat, kein Problem. Wenn aber dem Mandanten über die zugeordnete Person ein Betreuer zugeordnet ist, hat der ja eine eigene Adresse. Wie kann ich den Bericht dazu bringen, das er bei diesem Mandanten die Adresse des Betreuers als Anschrift nimmt?

Wünsche euch schon mal eine schönes WE

Soll ich das andere Problemchen dann lieber in "Bericht" schildern ??

Und um noch mal auf das vorherige Problem zurückzukommen, zeigt er mir die ja durch die Ergänzung :
...Order By Feldname Desc"
schön meine Tabelle in dem ungebundenen Textfeld "rückwärts" an. Nun hätte ich gerne noch, das er beim öffnen auch in den letzten (oberen) Datensatz springt.
Me.lstVorgangSuchen.RowSource = "SELECT VorgangsID,.....
ich denke das hat mit dem Me.1stVorgangsuchen zu tun...