Hallo Zusammen,
ich dachte das ich eine vernünftige DB-Struktur mit Beziehungen (bild3) aufgebaut hätte.
Habe nun auch ein Formular angelegt und wollte Daten eingeben. Funktioniert leider nicht. Bin vermutlich wieder mal auf dem Holzweg.
Als erstes gebe ich im HF Daten zum entsprechend Lehrgang ein, sobald ich den ersten zugehörigen Namen um UF eingeben möchte kommt die Fehlermeldung wie im bild1 gezeigt.
Wenn ich zuerst unten einen Namen eingebe und dann den Lehrgang in HF bzw. einen zweiten Namen eingeben will, kommt eine ähnliche Fehlermeldung, Bild2.
Ich verstehe diese Meldungen auch nicht, um ggf. anzupassen. Was mache ich wieder falsch?
Habe die DB auch mal mit angehängt.
Gruss
mad
Hallo,
Zitatich dachte das ich eine vernünftige DB-Struktur mit Beziehungen (bild3) aufgebaut hätte.
Nein, leider noch ziemlich weit davon entfernt.
IDs werden als Primärschlüssel benutzt, das ist der Sinn der IDs.
In den abhängigen Tabellen sind entsprechende Fremdschlüsselfelder anzulegen.
Auch ein zusammengesetzter Primärschlüssel ist nicht zu empfehlen und hier auch nicht notwendig, da es einen Autowert gibt.
Auch die Verknüpfung von Hafo und Ufo wird mit einem Feld als PS-FS Kombination einfacher.
Ein Feldname "Name" ist tabu, da gab es auch eine Warnung die Du ignoriert hast.
Der Ort erhält einen Primärschlüssel und wird über diesen zum Personal verknüpft. Die Gemeinde ist ein Feld des Ortes (Tabelle für Gemeinde erforderlich ?)
Die PLZ ist ein Text und keine Zahl (es gibt PLZ mit 0 vorne, was mit Zahl nicht geht)
Und die Felder Ladresse, Lhausnr, Lplz, Lwohnort, Lgeb gehören doch zum Lehrgang und
nicht in die Registrierung oder ?
Und wieso hat ein Lehrgang ein Wohnort (Lwohnort) ?
Was willst Du jetzt mit dem Formular machen, Teilnehmer zu einem Lehrgang erfassen ?
Wenn das alles klar ist, mache ich Dir noch ein Formular.
Neues Beziehungsbild anbei.
Daneben wird man einem Formular i.d.R. immer nur eine Tabelle als Datenherkunft geben und somit das Unterformular von Tabellenfeld zu Tabellenfeld verknüpfen.
Hallo Klaus,
ZitatUnd die Felder Ladresse, Lhausnr, Lplz, Lwohnort, Lgeb gehören doch zum Lehrgang und nicht in die Registrierung oder ?
Hierbei handelt es sich um die Anschrift des Lehrgangsteilnehmers die ich zur Anmeldung benötige.
ZitatUnd wieso hat ein Lehrgang ein Wohnort (Lwohnort) ?
Der Lehrgangsort ist "Lort" in der tblLehrgang
ZitatWas willst Du jetzt mit dem Formular machen, Teilnehmer zu einem Lehrgang erfassen ?
Ja, 1-x-Teilnehmer erfassen.
ZitatDie Gemeinde ist ein Feld des Ortes (Tabelle für Gemeinde erforderlich ?)
Diese Tabelle gibt, habe ich nur weggelassen. Sorry
Danke schon mal.
Gruss
mad
Hallo,
die Felder Ladresse, Lhausnr, Lplz, Lwohnort, Lgeb kannst Du ersatzlos löschen. Die hast Du doch schon bei den Personen (bzw. LOrt beim Lehrgang), wozu noch mal erfassen ?
Ich mache Dir heute Mittag ein Formular mit Ufo.
Hallo,
noch eine Frage:
Was für eine Datum kommt in die beiden Datumsfelder Ldat1 und Ldat2 ?
Hallo,
Ldat1 ist Beginn der Schulung (nur Tag, keine Zeit)
Ldat2 ist Ende der Schulung (nur Tag, keine Zeit)
Bei einer Eintagesschulung reicht es wenn Ldat2 (Mußfeld) ausgefüllt wird.
Gruss
Hallo,
und warum nennst Du dann die Felder nicht so, statt der kryptischen Umschreibung ?
Und wieso hast Du jetzt plötzlich Schulungen, die ganze Zeit (und in der DB) waren es Lehrgänge.
Du sollte Dir eine vernünftige einheitliche Nomenklatur zulegen.
Das macht es für einen Außenstehenden viel klarer. Und für Dich auch, wenn Du mal nach länegerer Pause in der DB was nachsehen musst.
Ich mache Dir das nachher mal fertig.
Hallo,
im Anhang die umgebaute DB.
Alle Kombifelder habe ich angepasst. Gebundene Spalte ist immer die 1, und das ist immer die ID.
Diese Columngeschichte im VBA Code ist ersatzlos überflüssig. Die notwendigen Felder holt man einfach über eine Abfrage.
Ich habe noch mehr geändert, schaue es Dir sorgfältig an.
Die Hausnummer habe ich gelöscht, die gehört in die Adresse. Oder brauchst Du die Hausnummer in einem extra Feld. Immer auch an einfache Dateneingabe denken.
Für den Veranstalter sollte es auch eine Tabelle geben.
Bei Fragen melden.
Hallo Klaus,
erstmal herzlichen Dank für die umfangreiche Unterstützung.
Habe es mir intensiv angesehen. Ist natürlich für einen Leien wie mich erstmal schwierig zu verstehen das jetzt in den Registriertabellen auf einmal nur noch Zahlen stehen und kein Klartext. Bin aber dann doch drauf gekommen wie das funktioniert das im Formular doch der Klartext angezeigt wird, zB. im Feld PID_F
ZitatSELECT Personal.PID, Personal.Name, Personal.Namekenn FROM Personal;
.
Weiter ist mir aufgefallen das die Beschriftung Beginn und Ende vertauscht waren. Hab ich korrigiert.
Die Haus-Nr werde ich beibehalten, da wir Kollegen haben die in der selben Straßen wohnen aber natürliche eine andere Huas-Nr haben. Sonst funktioniert mit der tblStrassen nicht mehr. Ich hatte diese Tabelle nicht zur Verfügung gestellt gehabt. Ich hoffe das bekomme ich selbst hin.
Jetzt kämpfe ich aber gerade wieder mit dem Umschalt-Button, habe gedacht ich müsste den nur schnell ändern, klappt aber wieder nicht.
Private Sub btnUmschaltErledigt_Click()
If Me.Filter = "Erledigt = '0'" Then
Me.Filter = "Erledigt = '-1'"
Me.FilterOn = True
Else
Me.Filter = "Erledigt = '0'"
Me.FilterOn = True
End If
End Sub
Bei der Abfrage "qryLehrgaenge" habe ich das Feld "Erledigt" gefiltert: "wie 0".
Nun hätte ich noch zwei Fragen: Gibt es eine einfache Beschreibung wie man Idealerweise eine Datenbank aufbaut? So könnte ich immer wieder nachlesen?
Die andere Frage:
ZitatEin Feldname "Name" ist tabu, da gab es auch eine Warnung die Du ignoriert hast.
Denn Feldnamen "Name" gibt es in meiner Tabelle "Personal" schon seid Jahren. Über die Jahre taucht "Name" nun in unzähligen Abfragen, Formularen, Berichten auf. Gäbe es eine Möglichkeit das automatisiert zB. mit einer Aktualisierungsabfrage über die ganze DB hinweg zu ändern? "Name" in zB. "NVName"? Oder bleibt mir nur das händisch zu machen?
Deine DB werde ich mir als Muster-DB ablegen.
Gruss
mad
Hallo,
Erledigt ist eine Zahl 0 steht für False und -1 für True.
Du musst also auf eine Zahl vergleichen, mit den Hochkomma machst ein Text aus der Zahl.
Private Sub btnUmschaltErledigt_Click()
IF Me.FILTER = "Erledigt = '0'" THEN
Me.FILTER = "Erledigt = True" 'oder = -1
Me.FilterOn = TRUE
ELSE
Me.FILTER = "Erledigt = False" 'oder = 0
Me.FilterOn = TRUE
END IF
END Sub
Da aber die Umschaltfläche selbst auch True bzw. False liefert, geht es noch viel einfacher. Dem Filter wird als Wahrheitswert die Umschaltfläche direkt zugewiesen.
Private Sub btnUmschaltErledigt_Click()
Me.FILTER = "Erledigt = " & btnUmschaltErledigt
Me.FilterOn = TRUE
END Sub
Wenn Du die Hausnummer für sinnvoll hältst, kannst Du die natürlich lassen.
Was das Feld "Name" betrifft mache das halt manuell. Es gibt Tools dazu, die man aber installieren muss.
Name ist auch in der VBA Umgebung der englische Name für ein Objekt.
So gibt = Me.Name keinesfalls den Inhalt des Feldes Name aus, sondern den Namen des Formulars.
Du solltest es auch unbedingt tun, es gibt keine Alternative, sonst kann es böse Überraschungen geben, wenn es auch bis jetzt funktioniert hat. Eine Aktualisierungsabfrage geht da nicht, denn die ändert ja Daten und Du willst ja Feldnamen ändern.
Hier noch 2 Links zum Lernen:
https://www.hdm-stuttgart.de/~riekert/lehre/db-kelz/
und
https://www.access-tutorial.de/
Hallo Klaus,
danke nochmals für die Hilfe und die Links zum Nachlesen. Das mit meiner Feldbezeichnung "Name" werde ich die nächste Zeit anpacken.
Danke
Gruss
mad