Liebe Access-Helfer,
es gibt wieder ein Problem! Ich möchte mit Access 2010 einen Stammbaum erstellen.
Habe 2 Tabellen
1. Mastertabelle:
bytMasterID (Primärschlüssel)
txtLabNum
txtName
txtLitterID - optional nur wenn es einen Eintrag in Littertabelle gibt
2. Littertabelle
bytLitterID (Primärschlüssel)
txtLitterID
bytMotherID = Master.bytMasterID
bytFatherID = Master.bytMasterID
Es sind 4-5 Generationen möglich! Reichen die Informationen? Kann mir jemand helfen?
Grüße und schon mal Danke von ElkeS
Hallo,
was ist denn jetzt das Problem ?
Das Feld txtLitterID in der Mastertabelle ist auch optional überflüssig.
Die Präfixe bei den Feldnamen sollen das die Datentypen sein ?
Wenn ja, bist Du Dir über den Zahlenumfang von Byte im Klaren (-128 bis +127) ?
Byte ist viel zu klein.
Außerdem würde ich Dir dringend raten auf ein Präfix für die Feldnamen zu verzichten. Jede nachrägliche Änderungen eines Datentyps erfordert ein Haufen Anpassungen in jeder Abfrage, jedem Formular, Bericht VBA Code. Wenn Du konsequent bist. Und das hältst Du nicht durch. Alos lasse es lieber gleich.
Hallo,
nein, überflüssig ist das nicht, denn zu einer LitterID können mehrere MasterID's gehören und so bekomme ich auch die richtigen Eltern zugeordnet:
z.B. Mastertabelle
MasterID LitterID
258 3
259 3
260 2
1
2 56
Littertabelle:
LitterID MotherID FatherID
3 1 2
56 100 300
Ergebnis: männl. Linie
Kind (258) ---------Mutter(1)---------Vater(2)-------Großmutter(100)------Großvater(300)
Das Problem, wie bekomme ich das hin?
Gruß ElkeS
Hallo,
ich denke schon, dass die LitterID in der Mastertabelle überflüssig ist. Man muss in einer DB aufpassen, dass man nicht zu viele Beziehungen anlegen muss (bzw. entstehen), sonst gibt es schnell nicht aktualisierbare Abfragen.
Ich bin aber mit der Materie (Stammbaum) nicht so vertraut.
Was versteht man denn unter Litter ?
PS:
Es wäre höflich, wenn man auf alle Hinweise die gegeben werden eingeht.
Hast Du das gelesen mit dem Präfix und dem Wertebereich von Byte ?
Hallo und Sorry,
eigentlich bin ich ein höflicher Mensch aber mein Problem überschattet alles Andere. Der Präfix bedeutet für mich - ich erkenne sofort um welchen (globalen) Datentyp es sich handelt (char, num, dat) - bei der Programmierung ist dann etwas einfacher und ich muss nicht dauernt überprüfen ob ich den richtigen Typ anspreche (schlichtweg - ich hab es in einem Tutorial so gelesen "ungarische Notation").
Litter - bedeutet Nachkommen oder auch Reproduktion. Ich muss die Littertabelle halten, weil da außerdem noch weitere Informationen zu den Nachkommen als auch zu den Eltern stehen die gebraucht werden.
Ist jetzt alles beantwortet? Leider bringt mich das nicht weiter - was ist mit Treeview - kann ich das verwenden?
Gruß ElkeS
Hallo,
Zitatschlichtweg - ich hab es in einem Tutorial so gelesen "ungarische Notation").
das halte ich schlichweg für überflüssig, im Gegenteil, das ist nur hinderlich. Und Du wirst das auf Dauer niemals konsequent durchhalten, weil der Aufwand viel zu groß ist. Das kannst Du jetzt schon sehen, da Du ja das mit dem Byte ändern musst. Jetzt stelle Dir mal vor, was das für ein Aufwand wird, wenn es Abfragen, Formulare und Berichte gibt. Lasse es sein, Du hast nur jede Menge Aufwand. In diesem Punkt (Feldnamen) betrachte ich die "ungarische Notation" als übertrieben.
Zitatund ich muss nicht dauernt überprüfen
und wozu soll es erforderlich sein den Typ
dauernd überprüfen zu müssen ?
ZitatIch muss die Littertabelle halten
natürlich muss die Littertabelle bleiben, ich habe ja auch nichts gegenteiliges geschrieben. Ich meinte das Feld in der Mastertabelle.
Ein Treeview könnte geeignet sein, aber da fehlt mir vollständig die Erfahrung.
Such mal nach Stückliste oder BOM (Bill of materials). Das ist die gleiche Problematik (rekursive Beziehungen).
Z.B. hier:
http://www.access-im-unternehmen.de/index1.php?id=300&BeitragID=923
Hallo,
kann das nicht mehr ohne großen Aufwand ändern – es gibt schon Abfragen, Formulare und und...
Überprüfen muss ich das beim Programmieren (z.B. bytLitterID und txtLitterID – 2 Felder in der gleichen Tabelle – bytLitterID ist AutoWert und txtLitterID eine vorgegebene Bezeichnung für erfolgte Reproduktion. Für mich war und ist es wichtig, das Programmiercode nachvollziehbar ist und einfach zu verstehen und dazu gehört auch die Variablen (Feldnamen) so zu benennen, dass man gleich erkennt welcher DatenTyp sich dahinter verbirgt.
In der Mastertabelle muss ich das Feld auch halten, denn darüber komme ich nur zu den Einzelindividuen die zu dieser Reproduktion gehörenden. Beispiel:
Littertabelle
LitterID: 56 (mit den entsprechenden Eltern)
Mastertabelle:
MasterID LitterID
234 56
235 56
236 56
Jetzt weiß ich, dass die Individuen 234, 235 und 236 zum Reproduktionserfolg 56 gehören mit den Eltern (X und Y)
Vielen Dank für Deine Suchhinweise! Bin aber trotzdem am Treeview interessiert.
Gruß ElkeS
Hallo,
Zitatkann das nicht mehr ohne großen Aufwand ändern – es gibt schon Abfragen, Formulare und und...
das ist genau das was ich sage, denn wenn Du konsequent bist, so musst Du die 1. Änderung bereits machen. Der Autowert ist nicht vom Datentyp Byte, sondern LongInteger (lng), das Fremdschlüsselfeld muss dann ebenfalls LongInteger sein. Das gilt sinngemäß auch für die anderen Felder. Viel Spaß beim ändern. Dass Byte zu klein ist hatte ich im 1.Beitrag schon geschrieben, bist Du aber nicht darauf eingegangen.
Ich habe oben noch nachträglich einen Link eingefügt. Da wird auch auf ein Treeview eingegangen.
Und zu den Präfixen lese mal den Artikel in Wikipedia. In den Abschnitten weiter (Einwände gegen die ungarische Notation) unten findest Du auch meine Meinung dazu wieder. Die Feldnamen mit Präfixen zu versehen ist so überflüssig wie ein Kropf.
https://de.wikipedia.org/wiki/Ungarische_Notation
Zitat von: ElkeS am August 28, 2015, 11:20:49
Das Problem, wie bekomme ich das hin?
Ich bin mit Stücklisten, rekursiver Programmierung und Treeview gut vertraut.
Ich habe aber das Problem nicht verstanden. Stimmt die Datenstruktur nicht? Die sollte am besten ganz einfach sein. Jeder hat eine Mutter und einen Vater, außer Adam und Eva. Es reicht eine Tabelle mit PersonID (PKey), VaterID (FKey) und MutterID (FKey) völlig. Mach die Mastertabelle und die Littertabelle mit einem Join "flach", lies ein in Recordsets und fülle das Treeview.
Oder geht es um Algorithmen? Besonderheiten der VB-Programmierung? Ich kenne deine Skills nicht. Ich würde erstmal Google fragen. Und manche Hilfesteller, die beim eigentlichen Problem nicht helfen können, sollten deshalb nicht ersatzweise über in dem Zusammenhang irrelevante Konventionen belehren.
Hallo,
ZitatUnd manche Hilfesteller, die beim eigentlichen Problem nicht helfen können, sollten deshalb nicht ersatzweise über in dem Zusammenhang irrelevante Konventionen belehren.
manche Personen sind auch für Hinweise dankbar die etwas außerhalb des Themas liegen. Es muss ja auch nicht unbedingt der eigentliche Fragesteller sein. Und wenn mir etwas auffällt, dann äußere ich das.
Jeder kann diese Info nutzen wie er will.
Und Tipps zum eigentlichen Problem habe ich ja auch gegeben. Auch dass es mir an Erfahrung dafür fehlt habe ich nicht verschwiegen.
Hallo liebe Problemhelfer,
ich wollte eigentlich keinen Zoff vom Zaun brechen. Die Hinweise hinsichtlich der Konventionen habe ich zur Kenntnis genommen – sind sicherlich auch berechtigt – aber ich habe so angefangen – byt-Bezeichnung (Präfix) meiner Variablen – bedeuten für mich nur es handelt sich um eine nummerische Variable (egal ob es nun long, integer oder double...ist) ...
Trotzdem Danke!!!
Und nun zu den Ausführungen von ,,Wurliwurm". Ich hatte meine Datenstruktur schon oben beschrieben.
Mastertabelle: MasterID, LitterID, ......
Littertabelle: LitterID, MotherID, FatherID, .......
Bei mir hat nicht jeder Mutter und oder Vater, kann sein muss aber nicht.
Die Verbindung zwischen Mastertabelle und Littertabelle funktioniert zum Ersten nur über die LitterID und dann im 2. Schritt über die Mother- und FatherID = MasterID.
3.Schritt nachsehen ob es für die MotherID eine LitterID in der Mastertabelle existiert.
4.Schritt – in der Littertabelle die MotherID und oder FatherID zur LitterID – es geht im Moment bis zur 4. Generation. Ich kann zum jetzigen Zeitpunkt nicht sagen, ob noch mehr Generationen relevant werden. Was heißt Master- und Littertabelle mit einem Join ,,flach" machen? Wenn Du mit ,,Skills" meine Fähigkeiten hinsichtlich Datenbank, VBA usw. meinst – sie sind sicherlich nicht überragend – also Anfänger. Ich muss zwischen Mastertabelle und Littertabelle ständig hin- und herschalten. Wie bekomme ich sowas mit Treeview hin?
Vielleicht kann mir doch jemand helfen? Über Abfragen läßt sich das sicherlich auch hinbekommen aber das erscheint mir etwas zu unkomfortabel...
Danke und viele Grüße an alle, die sich redlich bemühen den ,,DaU's" etwas beizubringen
ElkeS
Ich fand die Ausführungen weiter oben spontan etwas schulmeisterlich. Die Benamsung ist aber auch meiner Meinung nach unglücklich. Zoff sucht hier denke ich keiner und die Hilfsbereitschaft und Kompetenz der Kollegen sind sicher bewundernswert.
Ich bin kein Access-Profi im eigentlichen Sinne (verdiene mein Geld mit Oracle/SAP) und für mich steht mehr das Grundproblem im Vordergrund. Bei Baumstrukturen stößt die Fertigbauweise von Access an ihre Grenzen. Mit Access-SQL Abfragen kann man meines Wissens keine Bäume abfragen mit variabler Tiefe (im Oracle gibt es solche Konstrukte). Und selbst wenn es ginge, könnte man ein Treeview nicht an eine solche Abfrage binden. Es geht nur über rekursive (zur Not auch über iterative) Programmierschleifen. Dazu braucht es fortgeschrittene Programmierkenntnisse (die Sprache ist dabei sekundär). Ein Programmierer, der "Algorithmen und Datenstrukturen" absolviert, lernt Baum- und Graphenprogrammierung und kann das dann in C, Java o.ä. und lernt das schnell für VBA. Ich würde mir ein Skript für die Vorlesung A&D von einer Hochschul-Site laden und mir die entsprechenden Kapitel zu Gemüte führen.
Hallo,
nein, Zoff will hier keiner, ich habe das auch nicht so empfunden. Ich habe mich nur etwas daran aufgehalten weil es so vehement verteidigt wurde. Meiner Erfahrung nach ist jeder der für die Feldnamen die ungarische Notation verwendet hat wieder davon abgekommen, weil man nicht in der Lage ist, das konsequent durchzuhalten bzw.der Aufwand dazu viel zu groß ist. Und im Profi Programmierbereich (wo mehrere Programmierer bestimmte Teilaufgaben lösen), hat man es direkt verboten.
Zitatschlichtweg - ich hab es in einem Tutorial so gelesen "ungarische Notation").
Und im Grunde ist es auch nur halbherzig umgesetzt, denn die ungarische Notation unterscheidet sehr wohl zwischen Byte, Long, Integer usw.
Aber alles nur nebenbei. Ich habe in #5 einen Link gepostet, hast Du Dir den schon mal angesehen ?
Und zu guter Letzt, hast Du schon mal nach Freeware für einen Stammbaum gesucht ?
Zitat von: MzKlMu am August 31, 2015, 17:29:55
Meiner Erfahrung nach ist jeder der für die Feldnamen die ungarische Notation verwendet hat wieder davon abgekommen, weil man nicht in der Lage ist, das konsequent durchzuhalten bzw.der Aufwand dazu viel zu groß ist.
Meiner Meinung nach ist die ungarische Notation im Code im kleinen Rahmen nicht verkehrt, aber bei Feldnamen in der Datenbank rollt es einem die Zehennägel auf.
Wie gesagt, ist das größere Problem imho, ohne Programmierkenntnisse hier sich etwas vorgefrickeltes abholen zu wollen.