Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

anfängerproblem

Begonnen von cervelo, März 05, 2011, 21:19:27

⏪ vorheriges - nächstes ⏩

cervelo

hallo ihr lieben,

ich bin gerade dabei meine ersten schritte bei access zumachen. ich würde gern eine 1:n beziehung einfügen. nur schaffe ich es nicht.

folgende problemstellung z.B:

in tabelle eins habe ich ein paar freunde aufgelistet und in einem feld dann ihre hochschule; jetzt möchte ich in den nächsten spalten z.B ort, plz, adresse der hochschule stehen haben.
da viele ja zur selben hochschule gehen möchte ich gern auf einer zweiten tabelle die hochschule mit den jeweiligen daten eintragen. durch eine verknüpfung möchte ich, dass ich nur noch in der ersten tabelle die hochschule mit hilfe des nachschlage assistenten auswählen. die weiteren felder sollen dann automatisch befühlt werden.

wie schaffe ich das?

lieben dank

Jakobus

Hallo cervelo,

genauso wie Du bin ich A2003 Anfänger, habe mich mit dem gleichen Problem vor ein paar Tagen herumgeschlagen.
Erstelle die Tabelle tblKontakte in die Du die Felder Kontakt_ID (Autowert, Primärschlüssel), NName, VName (jeweils Text) und Hochschule (Zahl, Long Integer) einträgst. Dann die Tabelle tblUni in die Du die Felder Uni_ID (Autowert, Primärschlüssel), Hochschule (Text), PLZ (Text), Ort (Text) schreibst.
Danach im Menü auf Extras Beziehungen und dann beide Tabellen anzeigen. Zieh das Feld Hochschule aus tblKontakte auf das Feld Uni_ID in tblUni und schon hast Du die 1:n Beziehung (an einer Uni können viele Kontakte studieren ... oder zumindest eingeschrieben sein).
Jetzt wieder zurück zu tblKontakte Entwurfsansicht, Feld Hochschule und dort den Nachschlageassistenten öffnen. Bei Steuerelement anzeigen von Textfeld auf Kombinationsfeld wechseln, Herkunftstyp Tabelle/Abfrage, Datensatzherkunft tblUni, gebundene Spalte 1, Spaltenanzahl z.B. 4.
Wenn Du jetzt die Tabelle tblKontakte öffnest, kannst Du im Feld Hochschule aus den in der Tabelle tblUni eingegebenen Hochschulen auswählen.
Wenn Dich die Ansicht von 4 Spalten stört, dann geh zurück in den Nachschlageassistenten im Entwurf von tblKontakte und reduziere die Spaltenanzahl oder setz für alle Spalten, die Du nicht sehen möchtest die Spaltenbreite auf 0 (z.B. 0;2;0;0  entspricht 2cm Spaltenbreite für Spalte 2).
Damit müsste Deine Frage beantwortet sein.
Gruss
Jakobus

MzKlMu

#2
Hallo,
in die Tabelle mit den Namen kommt ein Fremdschlüsselfeld für die Hochschule. Dieses Feld wird mit einemKombinationsfeld in einem Formular aus der Tabelle mit den Hochschulen gefüllt.
Mit einer Abfrage kannst Du dann beide Tabellen (mit der beziehung) darstellen.
Die Hochschulfelder auch in der Namenstabelle zu füllen ist überflüssig, das Fremdschlüsselfeld genügt.

In den Tabellen direkt keine Nachschlagefelder anlegen, die sind von Übel und unbedingt zu vermeiden. Sie verhindern den ordnungsgemäßen Aufbau einer Datenbank. In Formularen (=Kombis) können diese verwendet werden.

@Jakobus
In Anbetracht der voherigen Antwort:
Keine Nachschlagefelder in Tabellen.

ZitatAccess Anfänger: Die Nachteile von Nachschlagefeldern

aus DBWiki, dem Datenbank-Entwickler-Wiki

Man sollte Nachschlagefelder in Tabellen vermeiden, denn

   1. Ein Nachschlagefeld verbirgt den eigentlichen Feldinhalt. Wenn man beispielsweise eine Tabelle in Datenblattansicht öffnet, wird ein Firmenname dargestellt, obwohl in Wirklichkeit im Feld die Kundennummer steht, und der Firmenname aus einer anderen Tabelle stammt. Nachschlagefelder verhindern, dass Datenbanken sauber durchstrukturiert angelegt werden.

   2. Eine Abfrage, die das Nachschlagefeld verwendet und nach dem dargestellten Wert sortieren soll, funktioniert nicht. So wird im obigen Beispiel nicht nach dem Firmennamen, sondern nach der Kundennummer sortiert. Ebensowenig funktioniert die Angabe des Werts als Kriterium - auch hier müsste man die Nummer anstelle des Namens verwenden, um Ergebnisse zu erhalten. Wenn man den Wert aus einer Wertliste eines Kombinationsfelds auswählt, kann es passieren, dass gültige Daten mit falschen Werten überschrieben werden.

   3. Das Nachschlagefeld beinhaltet eine (intern angelegte) Beziehung zwischen den Tabellen sowie die Anlage zusätzlicher Indizes, die in aller Regel überflüssig sind und die Datenbank unnütz aufblähen. Auch kann es vorkommen, dass man auf diese Weise die maximal zugelassene Anzahl von Indizes je Tabelle unwillentlich überschreitet.

   4. Ein Kombinationsfeld auf der Basis eines Nachschlagefelds kann bei Filterung des Formulars dazu führen, dass der Filter mit dem Formular gespeichert wird. Beim nächsten Öffnen des Formulars fehlt der Wert und wird nachgefragt, was wiederum zu einem Fehler führt.

   5. Berichte, deren Datenherkunft Nachschlagefelder enthält, benötigen Kombinationsfelder zu deren Darstellung, die den Bericht langsam und ineffizient machen können.

   6. Die Datenbank kann nicht vernünftig von außen abgefragt (beispielsweise in Form einer Datenquelle eines Word-Serienbriefs) oder exportiert werden, da die Nachschlagefelder nicht nach außen gereicht werden.

   7. Wenn man das Access-Sicherheitssystem verwendet, reichen die Berechtigungen oft nicht aus, um die Nachschlagefelder mit Inhalt zu füllen, was zu schwer nachzuvollziehbaren Fehlern führt. Das gilt insbesondere, wenn man aus Sicherheitsgründen mit Abfragen mit "WITH OWNERACCESS OPTION" arbeitet
DBWIKI ist nicht mehr Online, daher als Zitat.
Gruß Klaus

Jakobus

@MzKiMu

Danke für den Tipp - habe wieder was gelernt

Gruss

cervelo

Vielen Dank!!!

Ich werde jetzt mal mein Glück versuchen :)

cervelo

Habe soweit alle Tabellen erstellt. Hänge jetzt beim Abfrageentwurf.

Wie erstelle ich den Fremdschlüssel? Welche Verbindungslinien sind alle zuziehen?

Habe im Anhang mal ein Screenshot.

Vielen Dank

[Anhang gelöscht durch Administrator]

database

Hallo,

in deinem DB-Diagramm fehlt die Tabelle 'Anrede'

Einen Fremdschlüssel erzeugst du am Besten so:

Benenne das Fremdschlüsselfeld so, dass es als Fremschlüssel erkennbar ist.
In Deinem Fall in der Tabelle 'Kontakte' sollte das in Etwa so aussehen 'Hochschule_f'
Der Datentyp dieses Feldes ist Zahl, Long Integer!

Dem Primärschlüssel der Tabelle 'Hochschule' solltest du nicht ID nennen - besser ist 'Hochschule_ID'

Analog verfährst du mit Tabelle Anrede ... hier eben Anrede_ID für den PK und in der Tabelle Kontakte dann 'Anrede_f'

Dann verbidest du die PK mit den FK und setzt bei 'Mit referenzieller Integrität' einen Haken.

Hiermit hast du dann eine schöne 1:n Beziehung erzeugt (und das macht richtig Sinn).

Am Formular Kontakte, welches hoffentlich an die Tabelle Kontakte gebunden ist (Datenherkunft) befinden sich die Felder Hochschule_f und Anrede_f
bzw Hochschule und Anrede, da die Felder in deiner Tabelle ja noch diesen Namen getragen haben, als du das Formular erzeugt hast.
Bei diesen beiden Feldern stellst du nun im Formularentwurf auf der Registerkarte 'Daten' den Steuerelementinhalt um - der timmt zur Zeit nicht (durch die Umbenennung der Felder)
Für das Feld Anrede .... Anrede_f  .... und für das Feld Hochschule ...  Hochschule_f

Dann änderst du die Textfelder zu Kombifeldern - dazu im Formularentwurf Rechtsklick auf das Feld und 'Ändern zu' anklicken und Kombinationsfeld auswählen.

Bei beiden Feldern diesen Vorgang ausführen!


Als nächstes das Kombifeld Hochschule anklicken und in den Eigenschaften die Registerkarte Daten auswählen.
Unter Datenherkunft tragst du folgendes ein:

SELECT Hochschule_ID, Hochschule FROM Hochschule Order By Hochschule

Analog dazu beim Feld Anrede:

SELECT Anrede_ID, Anrede FROM Anrede

Für BEIDE Felder danach auf der Registerkarte Daten:


Gebundene Spalte: 1
Herkunftstyp: Tabelle/Abfrage

Für BEIDE Felder auf der Registerkarte Format:

Spaltenanzahl: 2
Spaltenbreiten: 0cm;3cm

Speichern und die Formularansicht ansehen.

Nun hast du am FORMULAR 2 Nachschlagefelder erstellt, aus denen du die Texte lesen kannst und welche die richtigen Fremdschlüssel in die Detailtabelle eintragen, wenn du eine Hochschule oder eine Anrede auswählst.
Die Einträge in der Tabelle Kontakte entsprechen nun einer klassischen 1:n Beziehung.

HTH

cervelo

Hi,

vielen Dank für die schnelle antwort. Die ersten Schritte habe ich erfolgreich durchgeführt. Nur bei dem Kombifeld gibt es Probleme. Bei mir gibt es keine Option "Ändern zu" noch irgendwo die möglichkeit eines Kombifeldes.

lg

database

Hallo,

ZitatBei mir gibt es keine Option "Ändern zu" noch irgendwo die möglichkeit eines Kombifeldes

Wenn du dein Formular (Kontakte) im Entwurfsmodus anzeigst müsstest du ja eigentlich die Felder Hochschule und Anrede als TEXTFELDER sehen können oder?

Machst du auf eines der Felder einen Klick mit der rechten Maustaste, dann erscheint ein Kontextmenü und hier kannst du dann diese Änderung verlangen.
Du musst genau nach meiner Anleitung vorgehen!

Wenn du im Formular bereits Kombifelder stehen hast OHNE die selbst erzeugt zuu haben, hast gegen Anraten von MzKlMu in der Tabelle  Kontakte Nachschlagefelder für Hochschule und Anrede erstellt.

Zum Thema 'Ändern zu' siehe Graphik im Anhang



[Anhang gelöscht durch Administrator]

cervelo

Danke!!! Kombifeld hat geklappt.

Werde jetzt weitermachen.

database

#10
Na, geht ja doch!  :D ;) ;D

Hier musst du achtgeben, dass die Feldnamen in den SELECT-Statements auch den tatsächlichen Namen in deinen Tabellen entsprechen!

SELECT Hochschule_ID, Hochschule FROM Hochschule Order By Hochschule

SELECT Anrede_ID, Anrede FROM Anrede

Viel Erfolg!

cervelo

Soweit hat alles geklappt, aber die Felder Adresse PLZ und Ort befüllen sich leider noch nicht automatisch.

Vielen dank für deine Hilfe

MzKlMu

Hallo,
Zitataber die Felder Adresse PLZ und Ort befüllen sich leider noch nicht automatisch.
Nur noch sicherheitshalber der Hinweis: Diese Felder sind in der Tabelle mit den Namen nicht notwendig und das automatischen Füllen demnach auch überflüssig.
Es werden immer nur die entsprechenden Fremschlüsselfelder mit den Kombis gefüllt, sonst keine weiteren Felder. Die Darstellung der restlichen Felder erfolgt mit einer Abfrage.
Gruß Klaus

cervelo

Hi,

das mit der Abfrage klappt jetzt alles so wie ich wollte :)

Eine Kleinigkeit habe ich allerdings noch. Bei meiner jetzigen Abfrage sind ja alle Daten einer Person in einer Zeile. Abundzu benötige ich aber bloß die daten einer Person. Hier wäre es schön wenn man wie bei der Formularansicht alles von einer Person schön übersichtlicht hätte.

Desweiteren habe ich auch versucht ein Bild (gebundenes Objektfeld) von jedem im Formular einzubinden. Problem war hier nur dass, das Foto bei jeder Person immer gleich war. Reicht es aus das Bild bloß hineinzukopieren oder muß noch ein spezieller Ordner erstellt werden?

Vielen Dank

database

Hallo,

sorry ...

ZitatBei meiner jetzigen Abfrage sind ja alle Daten einer Person in einer Zeile. Abundzu benötige ich aber bloß die daten einer Person

??? ??? ???

Häng doch mal deine Datenbank komprimiert/repariert und gezippt hier rein.

Für das Speichern von Bildern in deiner DB kann ich dir nur mit Nachdruck abraten.
Bilder sollen in einer Verzeichnisstruktur abgelegt werden und in den Tabellen werden dazu die Pfade und Dateinamen gespeichert.
Beispiele und Hinweise findest du dazu wenn du die Suche im Forum benützt.
Der Suchbegriff:  Bilder in der Datenbank  liefert dann eine Menge brauchbarer Ergebnisse so wie dieses z.B.:

http://www.access-o-mania.de/forum/index.php?topic=10685.0     ;)

HTH