Ichg will mittels TableDef.CreateField-Methode (DAO) ein neues Feld zun einer vorhandenen tabelle hinzufügen.
Dazu muss der Variable vom Typ TableDef ein Wert zugewiesen werden.
In den Beispielen hier
https://learn.microsoft.com/de-de/office/client-developer/access/desktop-database-reference/tabledef-object-dao
wird mit bei der Zuweisung (SET) immer zugleich eine neue Tabelle erzeugt. Das will ich aber nicht - ich will ein Feld an eine vorhandene Tabelle anhängen. Kann jemand helfen, wie dann der TableDef-Variable ein Wert zugeweisen wird?
Wolfgang
Hallo,
wozu per Code?
Fügen das Feld doch einfach im Tabellenentwurf hinzu.
Oder muss das regelmäßig gemacht werden?
Wenn ja, wäre das ein Designfehler.
Ja, es muss regelmäßig gemacht werden, und nein, ein Designfehler ist es aus meiner Sicht nicht, weil in der Benutzerversion der Benutzer nicht an den Tabellen herumlaborieren soll.
Wolfgang
Hallo,
doch, es ist ein Designfehler, jede Wette ;D . Wer regelmäßig Felder hinzufügen muss hat einen Fehler im Aufbau. In einer fertigen Datenbank sollte es niemals notwendig sein Felder hinzufügen zu müssen. Wahrscheinlich fehlt hier einfach noch eine Tabelle.
Was kommt denn in die Felder die da regelmäßig hinzugefügt werden müssen?
Hallo Wolfgang,
alleine mit der Zuweisung Set wird nicht eine neue Tabledef erzeugt. Die Zuweisung an eine Referenzvariable per Set erfolgt genauso wie bei allen anderen Auflistungen in VBA und ist auch in dem Artikel (https://learn.microsoft.com/de-de/office/client-developer/access/desktop-database-reference/tabledef-object-dao#to-link-a-table-to-a-database) beschrieben:
ZitatUm auf ein TableDef-Objekt in einer Auflistung durch die Ordnungszahl oder die Einstellung der Name-Eigenschaft zu verweisen, verwenden Sie eine der folgenden Syntaxformen:
TableDefs(0)
TableDefs("name")
TableDefs![Name]
Unabhängig davon nehme ich auch an, daß das Datenmodell so nicht stimmen kann, wenn ständig neue Felder angelegt werden müssen.
OK - wenn die Experten der Meinung sind, dass ein anderes DB-Design besser wäre, dann hier der Zweck der Tabelle: Die Datensätze stellen Wertpapiere dar. Feststehendes Feld sollte nach meienr Vorstellung die Kenn.-Nr. des Wertpapieres sein. Die weiteren Felder nehmen tagesaktuelle Kurse auf; Feldnamen sollte das Kursdatum im Formatt JJJMMTT sein, das aus now() über eine bei der Eingabe aufzurufende Funktion erfolgt . Die Feldnamen von vorneherein festzulegen verbietet sich, weil nicht feststeht, an welchen Tagen Kurse eigegeben werden, aber es werden im Laufe des Jahres um die zwölf Felder sein (die Tabelle ist jahresbezogen). Die Kurseingaben sollen nicht direkt in die Tabelle, sondern über ein spezifisches Formular erfolgen.
Was wäre nun das bessere Design?
Danke für Eure Hilfe.
Wolfgang
Hallo,
die Kurse sind in einer extra Tabelle zu erfassen mit einem Fremdschlüssel zum Wertpapier. Die Tabelle mit dem Wertpapier sollte als Primärschlüssel einen Autowert (nicht KennNr als PS) erhalten. Jeder Kurs wird mit Datum in einem Datensatz erfasst, also statt 12 Felder 12 Datensätze. Der Fremdschlüssel verweist dann auf den Autowert der Wertpapiertabelle. Du kannst so beliebig viele Kurse zu einem Wertpapier erfassen, egal ob 1 oder 20. Das gibt eine klassische 1:n Beziehung mit 2 Tabellen.
Zitat(die Tabelle ist jahresbezogen).
Auch das ist falsch. Die Kurse werden einfach fortlaufend erfasst, keine Trennung nach Jahren. Über das Kursdatum und Abfragen können jederzeit jahresbezogene Daten dargestellt werden.
Mit einer Kreuztabellenabfrage ist auch eine Jahresdarstellung mit dem Kursdatum als Spaltenüberschrift möglich.
So wie Du ursprünglich die Tabelle machen wolltest.
Hier noch was zum Lernen:
https://www.access-tutorial.de/
Ihr habt mich überzeugt. Danke an alle.
Wolfgang