Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Gültigkeitsregel in Access-Webtabellen

Begonnen von dexter99, Januar 10, 2012, 14:39:32

⏪ vorheriges - nächstes ⏩

dexter99

Hallo zusammen,

in Access konnte man einen zusammengesetzten Primärschlüssel über 2 Felder festlegen. Das funktioniert bei Webdatenbanken nicht mehr, dahier Primärschlüssel nur für AutoWert-Typen angelegt werden können. Die Hilfe sagt, dass man hier eine Gültigkeitsregel in die Tabelle einbauen soll. Doch wie geht das?

Beispiel:
Eine Tabelle mit Firmendaten und der FirmenID als Primärschlüssel (AutoWert)
Eine Tabelle mit Eventdaten und der EventID als Primärschlüssel (AutoWert)

Nun soll es eine gemeinsame Tabelle geben, in der jede Firma an mehreren Events teilnehmen kann, aber nur einmal jedem Event zugeordnet werden darf. Früher bestand diese Tabelle aus den Feldern FirmenID und EventID und man hat über beide Felder den Primärschlüssel gelegt.

Wie geht das heute??

Für Tipps wäre ich dankbar.

Beaker s.a.

Hallo Dexter,
ZitatNun soll es eine gemeinsame Tabelle geben, in der jede Firma an mehreren Events teilnehmen kann, aber nur einmal jedem Event zugeordnet werden darf. Früher bestand diese Tabelle aus den Feldern FirmenID und EventID und man hat über beide Felder den Primärschlüssel gelegt.
Der zusammengesetzte Index muss ja nicht zwangsläufig der PK sein, nur eindeutig.
Füge ein neues AutoWert-Feld ein, und verwenden das als PK.
hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dexter99

Hallo Ekkehard,

danke für die Antwort. Ein Primärschlüssel mit einem AutoWert ist nicht das Problem. Der MUSS in einer Webtabelle sowieso vorhanden sein. Dadurch werden aber keine doppelten Einträge verhindert.

Und genau dafür suche ich eine Lösung:
Was muss in den Tabelleneigenschaften als Gültigkeitsregel eingebaut werden, damit die Kombination aus FirmenID und EventID nur einmal vorkommt?

Hat jemand so etwas schon mal gemacht? Für Beispiele oder für Lösungsvorschläge wäre ich dankbar.

Gruss Dirk

Beaker s.a.

Hallo Dexter,
ZitatUnd genau dafür suche ich eine Lösung:
Was muss in den Tabelleneigenschaften als Gültigkeitsregel eingebaut werden, damit die Kombination aus FirmenID und EventID nur einmal vorkommt?
Kann man in Webtabellen den keine weiteren Indexe anlegen ausser dem PK?
Ein eindeutiger Schlüssel über die beiden ID-Felder verhindert doch sicher doppelte Einträge.
Wie gesagt, der zusammengesetzte Schlüssel MUSS ja nicht der PK sein, nur EINDEUTIG.
Ich würde auch in Access nie einen zusammengesetzten Index als PK verwenden. Ein AutoWert-Feld kostet keine Ressourcen, und ist immer ein sicherer Kandidat zur Identifikation eines DS.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dexter99

Hallo Ekkehard,

wenn du mir jetzt noch sagst, wie man einen zusammengesetzten Index hinbekommt, dann könnte ich das mal ausprobieren. Mit berechneten Feldern klappt das leider nicht. Und: es muss kein PK sein, sondern - wie du schon richtig erwähnt hast - nur eindeutig.

Danke schon mal.

Gruss Dirk

Beaker s.a.

Hallo Dirk,
Zitatwenn du mir jetzt noch sagst, wie man einen zusammengesetzten Index hinbekommt, dann könnte ich das mal ausprobieren.
Ich dachte, das wüsstest Du:
Zitatin Access konnte man einen zusammengesetzten Primärschlüssel über 2 Felder festlegen.
Musst Du doch nur die Eigenschaft "Primärschlüssel" (PrimaryKey) auf Nein setzen.
Ich muss allerdings gestehen, dass ich nicht weiss, was eine Webtabelle ist, wie man die administriert und/bzw. da Indexe setzt.
In Access geht es halt über den Tabellenentwurf.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dexter99

Hallo Ekkehard,

zusammengesetzte Indizes kann ich jetzt  ;D Dazu gibt es zwei schöne Bauanleitungen:
http://www.ardiman.de/datenbanken/grundlagen/tabellen/zusammengesetzten_index_anlegen.html
http://office.microsoft.com/de-de/access-help/erstellen-und-verwenden-eines-indexes-zur-verbesserung-der-systemleistung-HA010341594.aspx

Aber das löst mein Problem nicht, da zusammengesetzte Indizes in Webtabellen auch nicht erlaubt sind.

Webtabellen sind Access-Tabellen, die man in SharePoint hochladen (veröffentlichen) und anschließend mit einer Access-Applikation oder über Webformulare nutzen kann. Diese Webtabellen unterliegen dabei einigen Restriktionen.

Die Frage bleibt: Wie kann man eine Gültigkeitsregel auf Tabellenebene realisieren?

Mit Indizes geht es ja nicht.

Gruss Dirk

Beaker s.a.

Hallo Dirk,
ZitatAber das löst mein Problem nicht, da zusammengesetzte Indizes in Webtabellen auch nicht erlaubt sind.
Hm, das hört sich ja nicht so toll an. Sicher wieder so'n MS-Gefrickel  :'(
ZitatWebtabellen sind Access-Tabellen, die man in SharePoint hochladen (veröffentlichen) und anschließend mit einer Access-Applikation oder über Webformulare nutzen kann. Diese Webtabellen unterliegen dabei einigen Restriktionen.
Sorry, aber damit habe ich mich noch nicht beschäftigt; - kann ich leider nichts mehr dazu sagen  :(
Geht da was mit Datenmakros (Trigger)?
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

dexter99

Hallo Ekkehard,

genau das ist das Zauberwort: Datenmakros!!

Vor dem Abspeichern eines Records überprüft das Makro, ob die Angaben schon einmal vorkommen. Falls ja, wird der Datensatz nicht gespeichert.

Danke für die Tipps und Denkanstöße...

Gruss Dirk

[Anhang gelöscht durch Administrator]

rpojda

Hallo Dirk,
wie sieht ein solches Datenmakro aus, dass Prüft, ob der Datensatz mit den selben Angaben bereits vorkommt?

Gruß

Raphael

dexter99

Hallo Raphael,
ist schon ne Zeitlang her, dass ich mit Webtabellen was gemacht habe. Aber vielleicht hilft folgender Link weiter:

https://msdn.microsoft.com/en-us/library/41bc41de-90da-46b8-a15f-a9f63c12f192

Es müsste im Before Insert Event eine Abfrage rein, ob es die neue ID bereits gibt.

Grüße von Dirk