Hallo - ich arbeite mit Acc2010, habe eine Tabelle Geräte, welche Daten aus in Beziehung stehenden Tabellen erhält - zb aus Tabelle Hersteller und Tabelle Typ. Geräteart wird in die Zelle eingegeben. Nun gibt es eine weitere Tabelle, welche die Geräteart in ein Feld speichert. Um die Auswahl zu ermöglichen benötige ich jedoch im Dropdown Hersteller, Typ und Art (Wurde mit Nachschlageass. erstellt - 3 Felder aus Tabelle Geräte). Jedoch erhalte ich bei den in Beziehung stehenden Tabellen Hersteller und Typ nur die ID - somit ist eine Auswahl nicht möglich. Das selbe Problem habe ich, wenn ich dies mit Abfrage oder Formular mache. Wie kann ich dies lösen - erbitte Info - Danke! Ich habe für leichteres Verständnis 2 Bildanhänge.
[Anhang gelöscht durch Administrator]
Hallo,
grundsätzlich ist es so, dass ein Nachschlagefeld ein Kombifeld ist und daher die gleichen Einstellungen erfordert.
Wenn du mehrere Spalten der referenzierten Tabelle sehen willst, musst du diese in die Datenherkunft auch aufnehmen.
Wenn du im Entwurfsmodus die Eigenschafen des Nachschlagefeldes anschaust wird dort u.U. ein SQL-String zu sehen sein, den du entweder manuell erweitern kannst oder durch klick auf die 3 Punkte im Abfrageentwurf.
Weiter muss die Anzahl der anzuzeigenden Spalten und deren Breite angegeben werden.
Gleiches gilt übrigens auch, wenn du das Kombifeld im Formular verwendest.
Aber!
Lass die Finger von Nachschlagefeldern in Tabellen, die sind nichts Gutes!
Löse den Eintrag des Fremdschlüssels ausschließlich auf Formularebene mit einem Kombifeld.
Man sollte GRUNSÄTZLICH vermeiden Daten in die Tabellen direkt einzugeben.
Siehe dazu auch:
http://www.dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern (http://www.dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern)
Hallo - Danke für die Info. So funktioniert es. Jedoch hat mich deine andere Info komplett aus dem Konzept gebracht. Ich bin normaler User und mir wurde es so beigebracht - deshalb bitte ich jetzt schon für meine dumme Fragestellung um Entschuldigung.
Die Dateneingabe ist über Formular vorgesehen. Meine normale Vorgehensweise ist - erstelle einige Tabellen - wie in den Bildern zu sehen war. Diese in Beziehung bringen und das Fremdschlüsselfeld angeben - ich erhalte ein Nachschlagefeld. Dann ein Formular mit dem Formularassistenten erstellen (der übernimmt dann auch das Nachschlagefeld von der Tabelle), in welchem ich die Daten eingebe. Ist dies falsch? Wenn ja hättest du eine Beispieldatenbank, dass ich mir das Vorstellen kann? Danke
Hallo,
ZitatDann ein Formular mit dem Formularassistenten erstellen (der übernimmt dann auch das Nachschlagefeld von der Tabelle), in welchem ich die Daten eingebe. Ist dies falsch?
Ja, in Tabellen legt man keine Nachschlagefelder an. Und wenn man Dir das so beigebracht hat, hat man Dir etwas grob falsches beigebracht. Begründung steht in dem Link von Peter.
Wenn Du die Nachschlagefelder (Kombinationsfelder) im Formular angelegt sind, machst Du in der Tabellen/den Tabellen wieder normale Textfelder. Das hat auf die bestehenden Formulare keinen Einfluss.
Zukünftig legst Du diese Felder nur in Formularen an, geht auf die gleiche Weise wie in den Tabellen. Du hast absolut keine Nachteile wenn diese Art Felder nur in Formularen verwendet werden.
Dazu bedarf es auch keines Beispiels, wie bereits gesagt, einfach in den Tabellen die Nachschlagefelder löschen, fertig.
Alles klar - hab nun alles gelöscht und auf Textfeld ohne Nachschlagen umgestellt. Im Grunde begriffen - in der Ausführung hapert es noch. Ich habe ein Eingabeformular mit dem Formularassistenten erstellt (Daten aus etlichen Tabellen). Ich erhalte jedoch immer Fehlermeldungen - eine siehe Bild. Wenn ich alles Feld für Feld per Hand erstellen muss sitze ich bei 10 Formularen ewig. Sollte dies mit dem Assistenten funktionieren?
[Anhang gelöscht durch Administrator]
Hallo,
ich kann Deine Probleme nicht nachvollziehen. Es ist absolut der gleiche Aufwand und die völlig identische Vorgehensweise ob das Nachschlagefeld in der Tabelle oder als Kombinationsfeld im Formular angelegt wird. Es ist auch jeweils der gleiche Assi.
Es bedeutet auch keinen Mehraufwand die Kombis im Formular anzulegen.
Es gibt auch keinerlei Funktionseinschränkungen. Und wenn Du ein funktionierendes Nachschlagefeld in der Tabelle gemacht hast, sollte das auf exakt die gleiche Weise auch im Formular gelingen.
Danke, ich werde es nochmal versuchen. Vorerst möchte ich jedoch die Datenbank von Grund auf richtig aufbauen - um nicht noch mal alles neu zu machen. Hierzu meine Frage bzgl Beziehungen (hier wird mir wahrscheinlich auch was falsches gelernt worden sein - darum Entschuldige meine für dich sicherlich dämliche Fragestellung). Ich habe wie du gesagt hast die Felder auf Text gestellt. Wenn ich eine 1:n Beziehung erstelle kann ich dies nur ohne ref. Integrität machen, da ich bei Tabelle Geräte die ID mit PK nehme und FK in Tabelle Prüfprotokoll das Textfeld Gerätetyp, wo ich dann den Namen des Gerätes stehen habe. Oder wäre es besser alles mit ref. Integrität zu erstellen, also auch in Tabelle Prüfprotokoll Zahl zu wählen und dann die ID des Herstellers stehen zu haben? (alle Beziehungen siehe Bild) In der Formular oder Abfrageansicht sehe ich dann mit Bezug auf ID_Prüfprotokoll eh wieder den Namen des Gerätes oder bekomme ich in späterer Folge wieder irgendwo Probleme, wenn ich im Hintergrund die ID stehen habe?
[Anhang gelöscht durch Administrator]
Hallo,
es ist für eine Datenbank unerlässlich referentielle Integrität (RI) einzustellen. Daher ist der Fremdschlüssel immer eine Zahl. Das Feld für den Fremdschlüssel muss daher auf den Datentyp LongInteger eingestellt sein. Dann kannst Du auch RI einstellen. In der Tabelle siehst Du also immer die Zahl und niemals den Text.
Üblicherweise hängt man an den Fremdschlüssel ein _F an (Siehe Bild), damit es in der Datenbank keine gleichen Namen gibt. Außerdem muss man Primär und Fremdschlüssel immer einwandfrei unterscheiden können.
ZitatOder wäre es besser alles mit ref. Integrität zu erstellen, also auch in Tabelle Prüfprotokoll Zahl zu wählen und dann die ID des Herstellers stehen zu haben?
das ist nicht nur besser, sondern die einzige richtige Lösung. Die Problem gibt es nur wenn im Fremdschlüsselfeld nicht die ID stehen würde.
Die Felder Rast1 OK, Rast 2 OK halte ich auch für den falschen Ansatz. Hier fehlt noch eine weitere Tabelle, oder gar zwei.
Was bedeutet denn Rast1 usw. ?
[Anhang gelöscht durch Administrator]
Hallo,
ZitatVorerst möchte ich jedoch die Datenbank von Grund auf richtig aufbauen - um nicht noch mal alles neu zu machen
Da beißen sich dann ein paar Stellen...
Grundsätzlich ist der Versuch, die Tabellen in Beziehung zu setzen , schon mal nicht ganz schlecht... :)
Beginnen würde ich so:
eindeutige Benamsungen (können auch anders lauten als in den folgenden Beispielen, aber eben eindeutig) der Felder benutzen, z. B.
KundID
Kund_Kundennummer
Kund_Name1 'diese Feldliste lass ich hier mal gelten...
Kund_Name2 ' "
Kund_PLZ 'Felder atomisieren
Kund_Ort
Kund_Strasse
.
.
.
tbl_Geräte
GerätID (PK)
Gerät_HerstellerID (FK zu Tabelle tbl_Hersteller)
Gerät_GeräteTypID (FK zu Tabelle tbl_Gerätetypen)
Gerät_art
Gerät_Artikelnummer
Gerät_Anschluss
.
.
.
tbl_Prüfprotokoll (diese Tabelle erfordert weitergehende Massnahmen zur Normalisierung (Atomisierung etc..)
PPID (PK)
PP_PrüfnormID (FK zu tbl_Prüfnormen)
PP_GeräteID (FK zu tbl_Geräte)
PP_KundID (FK zu tbl_Kunden)
.
.
.
.
Danach im Beziehungsfenster die Beziehungen weitesgehend mit ref. Integrität (Löschweitergabe ist aber eher mit Vorsicht zu geniessen, weil da auch Löschungen von DS auf der n-Seite passieren können, die man im Grunde eigentlich gar nicht geplant hatte.
Wenn diese Methodik nicht eingehalten wird, wird es früher oder später zu Frust , soll heißen, einer nicht funktionierenden DB kommen.
ZitatWenn ich eine 1:n Beziehung erstelle kann ich dies nur ohne ref. Integrität machen, da ich bei Tabelle Geräte die ID mit PK nehme und FK in Tabelle Prüfprotokoll das Textfeld Gerätetyp, wo ich dann den Namen des Gerätes stehen habe.
Das ist im Grundsatz falsch gehandelt und somit zu verwerfen.
Zitatbekomme ich in späterer Folge wieder irgendwo Probleme, wenn ich im Hintergrund die ID stehen habe?
Wenn Du Dich an die o. beschriebene Vorgehensweise hältst, bekommst DU keine Probleme, eher im anderen Fall. Access ist eine relationales DB-System und erwartet demzufolge, dass man sich an die Grundlagen solcher DB-System (weitestgehend) hält. (Siehe auch u. st. Links 1 und 1a)
Formulare sind an zu diesem Zeitpunkt erst in weiter Ferne zu sehen... Zudem benutze wie schon anderweitig geraten, KEINE Nachschlagefelder in Tabellen (sorge lieber für die RICHTIGEN und passenden Datentypen der Felder).
Hallo - vieeeelen Dank - sieht echt gut aus ;D. Ich danke euch vielmals für eure guten Tips, die für Ottonormaluser verständlichen Erklärungen und eure Geduld. Ich hoffe euch bei auftretenden Schwierigkeiten wieder kontaktieren zu dürfen - schönen Tag noch - LG