PDA

Vollständige Version anzeigen : Datenmodell Mandatenverwaltung


Marsu65
24.01.2008, 21:11
Tach zusammen,
ein paar Tage raus aus dem Geschehen und schon streiken meine grauen Zellen :eek:
Da nun untergegangenen Talente neu entdeckt wurden, hab ich ein neues Projekt zu dem ich ein paar Denkanstöße brauche und hoffe auf eure Hilfe zur Datenmodellierung und Visualisierung.

tbl Mandaten
-MID
-Name
-...

tbl Berater
-BID
-Name
-...

tblSprechzeiten
-ID
-Uhrzeit
Gefüllt mit
1 7:00
2 7:20
3 7:40
...
38 19:00
39 19:20

tblTermin 'verbindet alle anderen Tabellen zu einem Gesprächstermin
-TID
-MID
-BID
-T_Datum
-T_Uhrzeit

nun möchte ich gerne als Erstes eine Tagesübersicht in einem Formular erstellen bei dem
- 1. Spalte die Standardsprechzeiten (Alle, nicht nur die Belegten)
- Als weitere Spaltenköpfe die Namen der Berater
- in den Schnittpunkten die Namen der Mandanten zu finden sind

_________Meier________Müller________Möllemann
07:00____Schulze
07:20
07:40_____________________________Schmitt
...
19:00____Kemper______Hubert
19:20

Als praktikable Lösung geht mir bisher nur die Erstellung einer temporären Tabelle durch den Kopf, welche die Daten in der gewünschten Form aufbereitet.
Vielleicht würde aber auch eine andere Datenstruktur helfen ...

Schon mal besten Dank!

Josef P.
24.01.2008, 21:59
Kreuztabellen-Abfragen kennst du?
Vielleicht liefern die dir das gewünschte Ergebnis.

hcscherzer
24.01.2008, 22:13
Moin,
erste Idee: Pivot-Tabelle.
Zweiter Gedanke: ein Formular mit 'dynamischen' Steuerelementen. Du brauchst die Tbl_Sprechzeiten dafür nicht sondern gestaltest die erste Spalte als fixes Bezeichnungsfeld mit den Uhrzeiten untereinander.
Für die Berater und die jeweiligen Schnittpunkte mit dem Zeitraster legst Du je ein Textfeld hin und schaltest alle unsichtbar. Abhängig von der Zahl der Berater und den belegten Zeiten am jeweils angezeigten Tag werden die Controls sichtbar gemacht und mit den Namen der Mandanten gefüllt.

Marsu65
25.01.2008, 12:14
Schon mal besten Dank für die Anregungen
@Josef
Kreuztabellen kenne ich schon. Sie haben in diesem Fall nur zwei entscheidende Nachteile
1. Hat ein Berater keine Mandanten taucht er nicht als Spaltenüberschrift auf
2. und gravierender ist das die Daten in einer Kreuztabelle nicht verändert werden können, d.h. Einträge in der Übersicht selbst sind nicht möglich, was dem Benutzer die Eingabe erschweren würde.
@hc
Bei deiner zweiten Idee würde das Form ca. 40 x 10 = 400 Steuerelemente beinhalten. Ob Access das auf Dauer verkraftet ??? Ausserdem ist das Korekte Füllen - und bei Änderungen zurückschreiben - sehr aufwendig.

Ich denke, dass das Grundproblem so einer tabellarischen Terminübersicht nicht neu ist, da es ja auch in vielen anderen Bereichen zur Anwendung kommt. Leider habe ich hier und im Netz keine Anregungen finden können.
Lasst also bitte weiterhin die Köpfe qualmen:p

Josef P.
25.01.2008, 12:28
zur Kreuztabellenabfrage:
1) lässt sich mit fixierten Spaltenüberschriften lösen
2) könnte man mit einem ADODB-RS umgehen, das man nach dem Laden der DS ungebunden macht und damit eine Bearbeitung ermöglicht. Das ist aber sicher nicht angenehm zu programmieren. Angenehmer wäre in diesem Fall vermutlich für eine Änderung ein Zusatz-Formular zu öffnen. (z.B. bei Doppelklick auf das Feld o.ä.)

zum Ansatz mit den vielen Textfeldern:
Du kannst die Anzahl reduzieren, wenn du UF verwendest.
z.B. ein Endlos-UF für die DS je Berater und mehrere UF nebeneinander im HF.
Das horizontale scrollen müsste dann per VBA durch einen Wechsel der Berater-Kennung in den UF durchgeführt werden.
Aber auch das vertikale scrollen wird nicht ohne VBA-Code lösbar sein, wenn sich die DS aller UF parallel zur Zeit o.ä. mitbewegen sollen.

Andererseits sind viele Felder auch wartbar, wenn man z.B. eine Hilfsklasse einrichtet oder zumindest Code schreibt, der mehrfach verwendet werden kann. (z.B. nicht mit direkten Steuerelementbezug arbeiten, sondern Objektreferenzen verwenden)

Marsu65
03.02.2008, 21:40
Habe mich nun mal Testweise auf mehrere UF im Übersichts-HF eingelassen. Schon ergibt sich auch schon das nächste Problem.
Ein HF, mehrere UF, welche alle das selbe Herkunftsobjekt (Name) haben. Diese besitzen natürlich unterschiedliche Objektnamen im HF

Focus liegt auf einem Textfeld in einem der UFs.
Wie komme ich in VBA an den Namen des Unterformulars im HF?

hcscherzer
03.02.2008, 22:04
Vom UF aus ist das HF das Objekt Me.Parent.
Ein anderes UF in diesem HF ist also z.B. so zu adressieren:Me.Parent!UFOName.Form.Requery

Marsu65
03.02.2008, 22:42
HC,
danke dir aber so herum ist das ja einfach ;-)
Bin in einem Textfeld eines der identischen Unterformulare und will nun im BeforeUpdate des Textfeldes den Unterformularnamen ermitteln.
Vielleicht macht es ein Beispiel deutlicher
Hauptformular-Name: HF1
Unterformular-Name UF1 (Herkunftsobjekt)
dieses Unterformular ist als Subform1, Subform2 ... (Controls) Bestandteil des HF1
Benutze ich im Textfeldereignis strFormName = Me.Name so erhalte ich als Ergebnis UF1 brauche aber z.B. Subform3

ebs17
04.02.2008, 00:22
Probiere mal
Debug.Print Me.ActiveControl.Parent.Parent.ActiveControl.Name

Marsu65
04.02.2008, 01:17
Eberhard ... was soll ich sagen ... et funktioniert ... warum auch immer!
Der Logik nach müsste dann ja auch
Me.Parent.ActiveControl.Name
funktionieren ... tut´s aber nicht. Ich hoffe es hat dich nicht um den Schlaf gebracht, den ich dank deiner Hilfe nun genießen darf, sofern meine Schnupfennase mich lässt.
Glück auf aus dem Kohlenpott nach Sachsen!

ebs17
07.12.2009, 11:19
Aus anderem Anlass heraus hatte ich noch einmal getestet, und unter Acc2000 funktioniert die Ermittlung der Steuerelementnamens des aktuellen UFos im HFo
- aus dem BeforeUpdate eines UFo-Textfeldes und auch
- aus dem Klick eines UFo-Buttons
mit
Debug.Print Me.Parent.ActiveControl.Name

Warum es bei Marsu65 / Acc2003 nicht funktionieren wollte, wäre vielleicht noch einmal zu hinterfragen.

Marsu65
07.12.2009, 17:32
Hallo Eberhard,
da hast du aber tief gebuddelt ;)
Die Anwendung läuft nun ein knappes halbes Jahr produktiv (auch unter RT07), wie die Zeit vergeht.

Ich hab gerade noch mal getestet.
Bestimmung des UFO anhand des aktiven Screen Steuerelements inzwischen aus einem Modul heraus, was aber ja eigentlich keinen Unterschied machen dürfte.

Screen.ActiveControl.Parent.Parent.ActiveControl.Name
=> liefert den Steuerelementnamen des Ufos wie gewünscht
Screen.ActiveControl.Parent.Name
=> liefert den Herkunftsnamen des Ufos

Anne Berg
02.05.2013, 16:14
Hallo miteinander,

interessant, dass sich das Ergebnis der letzten Variante von den anderen unterscheidet. Und das ist (fast) genau das was ich suche, doch leider brauche ich die Information des Steuerelementnamens bei einem Unterbericht.

Gibt es da wohl irgendeine Chance, den herauszubekommen?

hcscherzer
02.05.2013, 16:27
Moin Anne,

Du fragst:
die Information des Steuerelementnamens

/Edit: zuerst falsch verstanden.
Du suchst den Namen des Unterbericht-Controls?
Vielleicht so ähnlich:Sub test()
Dim c As Control

For Each c In Reports("Dein_Bericht").Controls
If TypeOf c Is SubForm Then
Debug.Print c.Name
End If
Next
End Sub

Anne Berg
02.05.2013, 20:50
Hallo Hans-Christian,

ja, genauso ist es, ich möchte den Namen des zugehörigen Unterbericht-Steuerelements aus dem Unterbericht heraus ermitteln.

hcscherzer
02.05.2013, 22:40
Hallo Anne.
Wann genau?
Wenn der Unterbericht gedruckt wird?
Und was soll dann mit dem ermittelten Namen geschehen?
Gibt es in dem Hauptbericht mehrere Unterberichte?

Anne Berg
03.05.2013, 00:16
Hallo Hans-Christian,

es gibt mehrere Unterberichte identischen Aufbaus. Und damit man nicht mehrere Kopien dieses Unterberichts vorhalten und pflegen muss, dachte ich, man könnte es mit einem einzigen lösen. Das Problem dabei ist aber, dass im Open-Ereignis der Unterberichte die Datenherkunft abhängig von der "Position" des Unterberichts bzw. des Unterbericht-Steuerelements, eingestellt werden soll.

Bei Formularen lässt sich das aufgrund des unterschiedlichen Ablaufs der Ereignisse aus dem HF heraus regeln, bei Berichten scheint das so nicht zu funktionieren, die Datenherkunft (ersatzweise die Filter-Einstellung) kann wohl nur im Open-Ereignis manipuliert werden.

Marsu65
03.05.2013, 06:15
Hallo Anne,
ich hatte mal die selbe Frage in Bezug auf Forulare gestellt.
Hier kannst du sehen, was dabei rausgekommen ist.
Ich denke, dass man das auch für Unterberichte anpassen kann:
http://ms-office-forum.net/forum/showthread.php?t=289364#12

Ob die Information allerdings schon beim OPEN-Event vorliegen, müsste man testen.

hcscherzer
03.05.2013, 09:39
Vielleicht so (im Open des Hauptberichts):
Private Sub Report_Open(Cancel As Integer)
Dim c As Control

For Each c In Me.Controls
If TypeOf c Is SubForm Then
Debug.Print c.Name, c.Top
End If
Next
End SubAllerdings kann ich jetzt nicht sagen, ob und wie Du die RecordSource für die Unterberichte umbiegen kannst ...

Anne Berg
03.05.2013, 11:54
@Marsu:
Genial, das funktioniert auch mit Berichten, ich bin begeistert!

@Hans-Christian:
Die Auflistung der Unterberichte aus dem Hauptbericht heraus nützt mir nichts, da ich den umgekehrten Weg gehen muss, weil die Einstellung der Recordsource der Unterberichte nicht aus den Hauptbericht heraus funktioniert. Ich muss also im UB wissen, wie sein "Container" heißt (ersatzweise wo er platziert ist), um die Recordsource bestimmen bzw. den Filter festlegen zu können.