Ohh
Mir fällt keine guter Titel ein sorry.
Ich habe vier Felder
Delphi-Quellcode:
ZTable1ORDER1 : TLargeintField;
ZTable1ORDER2 : TLargeintField;
ZTable1ORDER3 : TLargeintField;
ZTable1ORDER4 : TLargeintField;
und möchte das die Datenbank die vier Felder auf Unique überprüft. Also ob der eingegebene Wert schon vorhanden ist.
Also wenn ich ZTable1ORDER1.Value = 5 und ZTable1ORDER3.Value = 5 das die Datenbank dann meckert.
Bitte ein paar mehr Beispiele, damit erahnbar wird, was Du meinen könntest.
Code:
ZTable1ORDER1.Value = 5
and ZTable1ORDER2.Value = beliebiger Wert
and ZTable1ORDER3.Value = 5 -> Fehler
and ZTable1ORDER4.Value = beliebiger Wert
ZTable1ORDER1.Value = 5
and ZTable1ORDER2.Value = beliebiger Wert
and ZTable1ORDER3.Value = alles außer 5 -> ok
and ZTable1ORDER4.Value = beliebiger Wert
Will meinen: wenn ZTable1ORDER1.Value und ZTable1ORDER3.Value identische Werte aufweisen, dann ist das ein Fehler, die Werte von ZTable1ORDER2.Value und ZTable1ORDER4.Value sind bei der Prüfung irrelevant.
Dann wäre himitsus Ansatz dahingehend abzuändern:
SQL-Code:
CREATE TABLE irgendwas (
ZTable1Order1 INTEGER,
ZTable1Order2 INTEGER,
ZTable1Order3 INTEGER,
ZTable1Order4 INTEGER,
..
CONSTRAINT uk_ZTable1Order UNIQUE (ZTable1Order1, ZTable1Order3)
)
ist aber gemeint:
Code:
ZTable1ORDER1.Value = 5
and (ZTable1ORDER2.Value = 5
or ZTable1ORDER3.Value = 5
or ZTable1ORDER4.Value = 5) -> Fehler
ZTable1ORDER1.Value = 5
and (ZTable1ORDER2.Value = alles außer 5
or ZTable1ORDER3.Value = alles außer 5
or ZTable1ORDER4.Value = alles außer 5) -> ok
ZTable1ORDER1.Value = 5
and (ZTable1ORDER2.Value = alles außer 5
or ZTable1ORDER3.Value = 5
or ZTable1ORDER4.Value = 5) -> Fehler
Will meinen: Wenn eine Zahl mehr als einmal in einer beliebigen Kombination der Spalten vorkommen könnte, wäre dies ein Fehler.
ZTable1ORDER1 | ZTable1ORDER2 | ZTable1ORDER3 | ZTable1ORDER4 | Fehler |
5 | alles außer 5 | alles außer 5 | alles außer 5 | nein |
5 | 5 | alles außer 5 | alles außer 5 | ja |
5 | alles außer 5 | 5 | alles außer 5 | ja |
5 | alles außer 5 | alles außer 5 | 5 | ja |
alles außer 5 | 5 | alles außer 5 | alles außer 5 | nein |
alles außer 5 | 5 | 5 | alles außer 5 | ja |
alles außer 5 | 5 | alles außer 5 | 5 | ja |
... | ... | ... | ... | ... |
Dann wäre himitsus Ansatz dahingehend abzuändern:
SQL-Code:
CREATE TABLE irgendwas (
ZTable1Order1 INTEGER,
ZTable1Order2 INTEGER,
ZTable1Order3 INTEGER,
ZTable1Order4 INTEGER,
..
CONSTRAINT uk_ZTable1Order1 UNIQUE (ZTable1Order1, ZTable1Order2)
CONSTRAINT uk_ZTable1Order2 UNIQUE (ZTable1Order1, ZTable1Order3)
CONSTRAINT uk_ZTable1Order3 UNIQUE (ZTable1Order1, ZTable1Order4)
CONSTRAINT uk_ZTable1Order4 UNIQUE (ZTable1Order2, ZTable1Order3)
CONSTRAINT uk_ZTable1Order5 UNIQUE (ZTable1Order2, ZTable1Order4)
CONSTRAINT uk_ZTable1Order6 UNIQUE (ZTable1Order3, ZTable1Order4)
)
sofern die Datenbank mehrere Constraints auf einer Tabelle zulässt.
Ich gehe dabei davon aus, dass die Zahl 5 als Platzhalter für eine beliebige Zahl steht und nicht explizit als abzufragender Wert gemeint ist.
Ist das verständlich, was ich möchte ?
leider nein.