Hallo
ich habe mir eine kleine Projektverwaltung gebastelt. Jedem Projekt sollen beliebig viele Gewerke zugeordnet werden können (1:n)
dazu habe ich mir ein Unterformular für die Gewerke in das Hauptformular gelegt und ich kann jedem Projekt beliebige Gewerke zuordnen. Das funktioniert soweit sehr gut. Nur möchte ich das Gewerk nicht in der Liste anlegen, sondern über Doppelklick in das UFO (Feld Bezeichnung) ein weiteres Formular (Gewerkedetails) aufrufen, wo ich die entsprechenden Eingaben bezogen auf das aktuell ausgewählte Projekt machen kann.
Der Aufruf funktioniert, ich sehe bislang angelegte Gewerke zum Projekt, aber wie gebe ich an, das sich das neu anzulegende Gewerk auf das aktuelle Projekt bezieht?
Vielen Dank für die Mühe die sich hier auch mit Anfängern wie mir gemacht wird :)
Hallo,
1) der Tabellenaufbau ist noch unvollständig. tblGewerke müsste eigentlich tblProjektGewerke heißen und in einer Tabelle "tblGewerke" gehören nur die Gewerke als solches erfasst. Sodann sollten im Ufo die eigentlichen Gewerke mittels Kombifeld ausgewählt werden und die restliche Daten im Endlos-Ufo direkt eingegeben werden.
Wenn wirklich ein separates (Einzel-)Form für die Eingabe benutzt werden soll, dann übergebe beim Öffnen des Formulares die akt. PrjektID ("proj_id_f") beim Openform-Parameter "Openargs"
hallo
zu 1: Das Datenmodell würde dann so aussehen, das ich in der tblGewerke die Gewerketypen (Rohbau, Heizung etc.) verwalte und diese mittel Kombifeld im UFO auswähle? Die Gewerkedetails (Preise, Nachlass, Skonto etc.) würde ich dann mittels 1:n beziehung diesen "Gewerketypen" zuordnen?
Wo liegt der Vorteil dieser Trennung? Ich hatte das vorher so, dachte aber dann, das es einfacher wäre es mit nur einer Tabelle zu machen.
zu 2:
Ich müsste also beim Laden des Formulars die aktuelle ID übergeben. Nur wie lautet der konkrete Befehl. Gibt es da irgendwo ein Beispiel?
In der Access Hilfe ist da etwas beschrieben, aber ich kann das nicht auf meinen Fall übertragen
Hallo,
ZitatDie Gewerkedetails (Preise, Nachlass, Skonto etc.) würde ich dann mittels 1:n beziehung diesen "Gewerketypen" zuordnen?
Was genau willst Du mit der Tabelle Gewerkedetails erreichen?. Im einfachsten Fall gehören diese Felder direkt in die Gewerketabelle. Es sei denn, Du willst eine Preishistorie, dann gehört aber in diese Tabelle noch ein Datum, ab wann die Preise gültig sind.
Was Franz meinte, ist eine Tabelle zur Zuordnung der Gewerke zum Projekt. In diese Tabelle kommt ein Fremdschlüssel zum Projekt und ein Fremdschlüssel zum Gewerk.
Und wenn die Tabelle Gewerkedetails nicht angelegt wird, noch ein Feld um den aktuellen Preis des Gewerks redundant zu speichern.
Und noch etwas, Rohbau, Heizung ist eigentlich kein Gewerk, das Gewerk wäre Maurer und Installateur. Und dann wäre noch zu bedenken, dass an einem Projekt 2 unterschiedliche Maurerfirmen beteiligt sind, mit unterschiedlichen Preisen, wie willst Du das abbilden?
Hallo
So komplex soll das gar nicht werden. Es werden dort einfach vergebene Aufträge eingegeben, incl der Auftragdetails (Nachlass etc.) Sollten zwei Rohbaufirmen beteiligt sein, wird das Gewerk Rohbau Bereich xxx angelegt. Würde ich die Gewerke Rohbau etc. über extra Tabellen verwalten, wäre das zu umständlich. Das Ganze ist eine kleine Projektverwaltung mit den wichtigsten Infos zum Projekt, mehr nicht.
Allerdings möchte ich jedem Gewerk noch einen Kontakt zuweisen. In der Beispieltabelle Projekte aus Access ist das genau wie ich es möchte, nur das es dort Aufgaben heißt, und alles mit Makros gesteuert wird. Nun hab ich mehrfach gelesen Makros wären nicht optimal.
Also ich habe jetzt die Tabelle "tblPro_Gew" mit folegnden Feldern angelegt: "pro_id_f" und "gew_id_f" sowie das zusätzliche Feld "gew_preis" (letzteres als Währungsfeld)
Nur wie bekomme ich nun die Übergabe an diese Tabelle bzw. an das Detailformular hin. Ich verstehe die openargs Anweisung nicht wirklich.
Hallo,
nur zu Openargs:
Öffnen des Forms:
Docmd. Openform "frmMeinForm1", , , , ,acDialog, Me!proj_id_f
Im Form "frmMeinForm1":
Sub Form_Load()
If not Isnull(Me.Openargs) Then Me!proj_id_f = Me.Openargs
End Sub
Hallo Franz
erst mal wieder ein dickes Dankeschön, wenn auch verspätet (meine Frau hat mich vom Rechner zur Gartenarbeit getrieben ???)
Ich habe das genau so gemacht wie Du mir beschrieben hast mit der openargs Methode. Leider kommt immer eine Fehlermeldung: ... kann in der Tabelle 'tblProjekt' keinen Datensatz mit passenden Schlüsselfeldern 'pro_id_f' finden.
Ich habe die DB nochmal angehängt. Wenn es nicht zuviel Mühe macht, könntest Du mal draufschauen, wo der Fehler liegt.
Was mir noch Kopfzerbrechen bereitet: Ist das Datenmodell generell so korrekt, oder würdest Du es anders empfehlen?
Hallo,
naja, mit den Beziehungen und der Datenkonstellation kann ich mich nicht anfreunden..
Da ist Überarbeitungsbedarf vorhanden...
Hallo Franz,
Du bist ja echt schnell. Ich habe mir deine Version mal heruntergeladen. Trotzdem funktioniert die Eingabe über das Detailformular nicht. Es kommt immer noch die Fehlermeldung wenn ich unten auf Datensatz neu gehe und diesen dann speichern will. Ich könnte die Navigationsleiste ausblenden, aber über einen Schalter (Datensatz neu) hab ich dasselbe Problem.
Hallo,
warum auf "neu"..?
Wenn das Form geöffnet wird, steht es schon auf einem neuen DS und es kann ein Gewerk eingeben werden. Nach dem (beim) Schließen wird das UFO aktualisiert, damit der neue DS auch angezeigt wird.
Oder was wolltest Du sonst mit dem separaten Form durchführen?
Hallo
Also Grundsätzlich sollte das Startformular nur der Übersicht und Auswahl des Projektes dienen.
alle weiteren Eingaben zum Projekt sollten dann in Detailformularen stattfinden. Das Detailformular für die Gewerke sollte dann die üblichen neu, speichern, kopieren Schaltflächen aufweisen. Das ist soweit kein Problem. Nur habe ich bislang nicht hinbekommen, wie ich in access einen Datensatz (Projekt) auswähle und sich alle weiteren eingaben (anhängen von Datensätzen etc.) nur auf dieses Projekt beziehen. Es ist ja ziemlich umständlich und Anwenderunfreundlich bei komplexeren Datenbanken, alles eingaben über ein Formular mit zig Unterformularen zu machen.
Hallo,
nun, ich rate (wie so oft) die Datenkonstellation zu überprüfen und zu korrigieren. Formulare , Berichte, etc. sind noch lang nicht Thema der Überlegungen.
So komplex soll das gar nicht werden. Es werden dort einfach vergebene Aufträge eingegeben, incl der Auftragdetails (Nachlass etc.) Sollten zwei Rohbaufirmen beteiligt sein, wird das Gewerk Rohbau Bereich xxx angelegt. Würde ich die Gewerke Rohbau etc. über extra Tabellen verwalten, wäre das zu umständlich. Das Ganze ist eine kleine Projektverwaltung mit den wichtigsten Infos zum Projekt, mehr nicht.Nach dieser Denke zu handeln, wird auch bei kleinen Datenbanken viel mehr Arbeit erfordern als eine richtig aufgebaute Tabellenkonstruktion.
1) Normalisiere die Daten und Tabellen.(!)
2) Überprüfe die entstandenen Beziehungen auf Plausibilität und Funktion.
3) Erstelle für jede(!) Tabelle ein Formular. Bei (kleinen) Stammdatentabellen und N-Tabellen kommt in den meisten Fällen ein Endlosform in Frage.
4) Stelle n-Tabellen als UFO mit Endlos-Formular dar, sofern das sinnvoll ist.
5) Wähle in Formularen Stammdaten-Werte mittels Kombifeldern aus.
Zitatund alles mit Makros gesteuert wird. Nun hab ich mehrfach gelesen Makros wären nicht optimal.
Bei o. g. Vorgehen reduziert sich VBA-Code ( Makros sind zu vergessen!) auf ein Minimum und es ist keine "Trickserei" erforderlich.
Hallo Franz
ich werde also das ganze Konzept nochmals überarbeiten und wenn ich das gemacht habe, werde ich nochmal deinen Rat einholen. Ich will nicht in eine Sackgasse reinarbeiten und später alles nochmal machen müssen.
Danke erstmal für die Hilfe und die Zeit die Du geopfert hast.
:)