ich habe schon mit Datenbanken zu tun gehabt, aber nicht mit Access 2010 - hier sieht alles vö-hö-llig anders aus - und würde mich über jeden Beitrag freuen, der mir geduldig über die Einstiegshürde hilft.
Ich bin es gewohnt, dass Feldnamen im Entwurf (z.B. von Formularen) in der Form Tabelle.Feldname identifizierbar sind.
Wie ist das in Access ?
Mir scheint, dass Access die Feldnamen ändert, wenn ich sie in eine Tabelle ziehe:
z.B. habe ich eine Tabelle Aufgabe_Aktenplan mit den Feldern ID, ID_Aufgabe, ID_Aktenplan (die letzteren sind zwei Fremdschlüssel).
Wenn ich die ID in mein Formular ziehe, heißt sie dort ID_Aufgabe_Aktenplan.
Lösche ich das Feld und wiederhole die obige Aktion, heißt sie dann ID_Aufgabe_Aktenplan1, ID_Aufgabe_Aktenplan2, usw. ....
Diese Namensklone kommen in die Feldliste und bleiben auch dort stehen, wenn ich die Felder wieder aus dem Formular gelöscht habe (wie kriege ich sie aus der Feldliste wieder raus ?).
Manchmal wird der Tabellenname mit einem Unterstrich noch an den Feldnamen angehängt - wie soll man da noch den Überblick behalten, wenn evtl. Tabellen- und Feldnamen auch schon Unterstriche enthielten ?
Vermutlich hängt das auch damit zusammen, welcher Tabelle das Formular zugeordnet ist - daher meine zweite Frage:
Ich kenne das so: Einem Formular ist eine Haupttabelle zugeordnet (deren Datensätze werden beim Blättern alle gezeigt), Felder aus anderen (Neben-)Tabellen werden nur gezeigt, wenn die Relation passt.
Wo sieht man bei einem Formular nachträglich, welches die Haupttabelle ist ?
Hallo,
Ist mir noch nie so untergekommen.
ZitatWenn ich die ID in mein Formular ziehe
Aus der Feldliste?
Dann heisst das Feld normalerweise genauso wie das Tabellenfeld
(steht in der Eigenschaft "Steuerelementeinhalt").
Wenn dem Formular eine Abfrage mit mehr als einer Tabelle zu
Grunde liegt und es in mehreren dieser Tabellen ein Feld "ID" gibt
schreibt Access den Tabellennamen
davor mit einem "." als
Trennzeichen, - das siehst du dann aber auch schon in der Feldliste.
Ein "_", automatisch erzeugt, habe ich noch nie gesehen.
Tabellenname.Feldnamegruss ekkehard
Ach so
Zitat
Wo sieht man bei einem Formular nachträglich, welches die Haupttabelle ist ?
Formularentwurf -> Eigenschaftenblatt -> Register "Daten" -> "Datensatzquelle".
Ja, ich habe die Felder aus der Feldliste ins Formular gezogen.
Ich habe versucht, zuhause die Datenbank aus dem Kopf nachzubilden und auch hier gibt es diesen Effekt, dass Feldnamen verändert werden und auch in der Feldliste auftauchen (siehe Bildschirmfoto). So wie Du es beschreibst, ist es ja wünschenswert, aber vielleicht muss man dafür erst irgendwelche Access-Grundeinstellungen dafür verändern ?
Als Datensatzquelle für meine Tabelle steht im Eigenschaftsfeld nicht einfach der Tabellenname, sondern SELECT Aufgaben_test.*,
Aufgaben_Aktenplan.ID_Aufgaben, Aufgaben_Aktenplan.ID_Aktenplan, Aufgaben_Aktenplan.ID AS ID_Aufgaben_Aktenplan, Aktenplan_eins.ID AS ID_Aktenplan_eins, Aktenplan_eins.ID AS ID_Aktenplan_eins1, Aktenplan_eins.Beschreibung AS Beschreibung_Aktenplan_eins
FROM Aktenplan_eins
INNER JOIN (Aufgaben_test INNER JOIN Aufgaben_Aktenplan ON Aufgaben_test.ID = Aufgaben_Aktenplan.ID_Aufgaben) ON Aktenplan_eins.ID = Aufgaben_Aktenplan.ID_Aktenplan; ! Das hab ich nicht bestellt. Aber wahrscheinlich durch das Hineinziehen der Felder ins Formular erzeugt. :P
Eigentlich hatte ich erwartet, dass ein Formular mit Haupttabelle Aufgaben mir vier Datensätze anzeigt, wenn ich in der Tabelle Aufgaben 4 Datensätze erfasst habe. Tatsächlich werden 6 Datensätze angezeigt, entsprechend der 6 Datensätze in der Verbindungstabelle Aufgabe_Aktenplan. Auch ganz nett, aber für mich schon überraschend.
Hallo,
entferne die Aliase ("...AS ID_Aufgaben_Aktenplan") aus dem SQL-String (und korrigiere die Steuerelement-Namen im Formular)
Und wozu benutzt Du eine verknüpfende Abfrage? Solche Joins in Abfragen sind in vielen Fällen nicht aktualisierbar, d. h. die Abfrage taugt nur zur Datenanzeige, nicht zur Datenmanipulation.
Genau.
Und wenn du allen IDs gleich einen aussagekräftigen Namenszusatz gönnst,
kannst du eh auf die Aliase verzichten.
Und dann noch eine Bemerkung, ein Tabellenname mit einer Nummerierung
(wenn's keine Abfrage ist) deutet auf ein nicht korrektes Datenmodell hin.
gruss ekkehard
Zitat von: DF6GL am November 02, 2018, 14:33:28entferne die Aliase ... und korrigiere die Steuerelement-Namen im Formular
Muss ich mich darauf einstellen, dass Access regelmäßig sowas erzeugt und ich es dann von Hand wegmachen muss ? Das wäre ja lästig.
Ich habe die Aliase (z.B. AS ID_Aufgaben_Aktenplan) aus dem SQL-Ausdruck entfernt. Jetzt steht in der Feldliste unter
ID aber immer noch ein Alias, nur dass er jetzt
Aufgabe_Aktenplan.ID heißt (von der Form her schon besser, aber immer noch überflüssig oder ?). Im Formular muss ich nicht nur den Feldnamen im Beschreibungsfeld änder , sondern auch im Datenfeld (sonst kommt #Name?) ? Oh mannomann, so viel Handarbeit nötig ?
Weiter oben ist ein neuer Feldname aufgetaucht:
Expr1004. Kann ich gar nicht zuordnen. :(
Zitat von: DF6GL am November 02, 2018, 14:33:28Und wozu benutzt Du eine verknüpfende Abfrage? Solche Joins in Abfragen sind in vielen Fällen nicht aktualisierbar, d. h. die Abfrage taugt nur zur Datenanzeige, nicht zur Datenmanipulation.
Das verstehe ich nicht. Ich habe nicht bewusst eine Abfrage erzeugt, sondern nur Felder in ein Formular gezogen, damit mal was angezeigt wird. Dabei habe ich erwartet, dass mir so viele Datensätze angezeigt werden, wie in der Haupttabelle stehen. Oder liege ich da ganz falsch ? Aber bisher bin ich mir nicht sicher, welches die Haupttabelle für das Formular überhaupt ist.
Zitat von: Beaker s.a. am November 02, 2018, 14:55:56wenn du allen IDs gleich einen aussagekräftigen Namenszusatz gönnst, kannst du eh auf die Aliase verzichten.
Muss ich mich also daran gewöhnen, den Tabellennamen von Hand in den Feldnamen mit reinzuschreiben, weil Access das nicht automatisch kann ? Ekkehard hatte mir eigentlich Hoffnung gemacht, dass Access die Feldnamen als
Tabelle.Feld eindeutig ausweist.
Auf die Aliase verzichte ich gerne - ich habe sie ja nicht erzeugt, sondern sie sind von alleine entstanden, als ich Felder aus der Feldliste ins Formular gezogen habe.
Zitat von: Beaker s.a. am November 02, 2018, 14:55:56
...Tabellenname mit einer Nummerierung...deutet auf ein nicht korrektes Datenmodell hin
Einverstanden. Der Name war willkürlich von mir gewählt, hätte auch
Aktenplan_test heißen können.
Hallo,
Du machst es viel zu kompliziert....
erzeuge Tabellen mit aussagekräftigen Feldnamen (können auch "abgekürzt" sein, lediglich Leer- und Sonderzeichen sind zu vermeiden) . Vermeide (!) Angaben in der Tabelleneigenschaft "Beschriftung" , denn das würde zu Aliasen führen. Desgleichen Angaben unter "Format" und "Eingabeformat".
Formulare haben die Eigenschaft "Datenherkunft". Dort wird ein Tabellenname oder ein Abfragename angegeben.
Anstelle eines Abfragenamens kann auch ein "SQL_String" vorhanden sein, der speziell dann generiert wird, wenn rechts am Eigenschaftenfeld auf die 3 Pünktchen geklickt wird. Es öffnet sich dadurch der Abfrageentwurf, worin die benötigte Tabelle, bzw. Tabellen hinzugefügt werden können. Es ist (zumindest am Anfang) davon abzuraten, mehrere Tabellen mit Verknüpfungen dort zu platzieren. (Die Abfrage (SQL-String) mit Joins wird oft nicht aktualisierbar sein. d. h. es sind im dazugehörenden Formular keine Datenänderungen möglich.)
Nachdem der Abfrageentwurf verlassen wird, steht in "Datenherkunft" der generierte SQL-String, der durchaus den Tabellennamen als Qualifizierer bei den Feldnamen enthält, aber keine Aliase aufweist.
In der Feldliste der Formular-Entwurfsansicht tauchen lediglich die Tabellenfeldnamen auf und können in das Formular an passende Stelle gezogen werden. In Deinem Fall empfiehlt es sich, vorher alle anderen Steuerelement zu löschen, wenn die nicht manuell angepasst werden sollen (Steuerelementname, Steuerelementinhalt).
"Expr1004" ist ein automatisch generierter Aliasname, der bei einem Ausdruck entsteht, der eben keinen Namen hat. (z. B. fehlerhaft geschriebener Tabellenfeldname.)
ZitatMuss ich mich darauf einstellen, dass Access regelmäßig sowas erzeugt
Generell ja, Access hat einige Assistenten, die auch von Anfängern zusammengeklickte Schwächen bis Unmöglichkeiten oft zu etwas "Funktionierenden" führen können.
Aber bitte nicht vergessen: Ursachen hast Du selber gelegt durch eigene Taten.
Wenn man sich Deine Abfrage anschaut, sind da drei Tabellen verknüpft per JOIN. In jeder gibt es ein Feld ID und ein Feld Beschreibung. Innerhalb der Abfrage ist es o.k., wenn solche Felder mit dem vorangestellten Tabellennamen qualifiziert werden und somit die Herkunft der Daten eindeutig ist. Nach außen, also zum Beispiel als Datenherkunft für das Formular, ist die Abfrage für sich eine neue (virtuelle) Tabelle. Auch dort müssen Tabellenfelder eindeutig identifiziert werden können.
Dreimal (mehr als 1)
Abfrage.Beschreibung ist sichtbar keine Eindeutigkeit, also wird da "selbständig" umbenannt, um über diese Aliase erneut Eindeutigkeit herzustellen.
ZitatEigentlich hatte ich erwartet, dass ein Formular mit Haupttabelle Aufgaben mir vier Datensätze anzeigt, wenn ich in der Tabelle Aufgaben 4 Datensätze erfasst habe. Tatsächlich werden 6 Datensätze angezeigt, entsprechend der 6 Datensätze in der Verbindungstabelle Aufgabe_Aktenplan. Auch ganz nett, aber für mich schon überraschend.
Wenn man weiß, was passiert (und was man tut), wird man weniger überrascht.
Durch die Verknüpfung von Tabellen werden deren Datensätze kombiniert über die vorhandenen Schlüssel. Das kann einerseits zu Filterungen und damit zu weniger Datensätzen führen (wenn Schlüssel nur auf einer Seite vorhanden sind). Parallel kann und wird es auch Datensatzvervielfältigung (bezogen auf eine Tabelle im Blickpunkt) geben, wenn solche Schlüssel auf einer Seite mehrfach vorhanden sind und selbstredend jede übereinstimmende Datensatzkombination im Ergebnis zu berücksichtigen ist.
Die tollste Verfielfältigung erhält man über einen CROSS JOIN, also wenn man Tabellen ohne Verknüpfung zwischen Feldern in der Abfrage führt.