
11078
18.10.2005, aktualisiert am 19.10.2005
Standardwert eines Datenbankfeldes in Access per if-then-else Bedingung
Der Inhalt eines DB-Feldes soll automatisch (per Standardwert) eingesetzt werden - was eingesetzt wird, soll allerdings von den Inhalten eines anderen Feldes abhängig sein.
Hallo zusammen,
ich versuche gerade, in einer Tabelle einer Access-Datenbank für ein Feld einen Standardwert festzulegen, der je nach dem Inhalt eines anderen Feldes in jeder Reihe der Tabelle passend sein, also automatisch variieren soll.
Folgender Aufbau der Tabelle:
Note | ECTS
1 | (hier Standardwert)
Ein Feld beinhaltet (Schul-)Noten, die ein Feld weiter ("ECTS") automatisch in ein anderes Format (ECTS-Grading-Scale) gebracht werden sollen. Dieses andere Format lässt sich allerdings so nicht mathematisch berechnen, sondern liegt mir anhand von Beispielzahlen in einer "papiernen" Tabelle vor.
Erschwerend kommt hinzu, dass "Note" vom Datentyp her eine Zahl ist und "ECTS" ein String-Wert.
Meine Idee einer herangehensweise war folgendes: Ich lege für "ECTS" in der Entwurfsansicht der Tabelle als Standardwert eine "if-then-else"- Beziehung fest, in der ich die Zusammenhänge, wie man Noten in das ECTS-Format bringt, statisch abbilde.
Dazu habe ich folgendes in das Feld "Standardwert" bzw. über den Ausdrucksgenerator eingegeben:
if [Note] = 1 then [ECTS]="A"
if [Note] = 2 then [ECTS]="B"
if [Note] = 3 then [ECTS]="C"
if [Note] = 4 then [ECTS]="D"
if [Note] = 5 then [ECTS]="E"
if [Note] = 6 then [ECTS]="F"
(stark vereinfacht, in der Realität mussten es statt "ist gleich"- Bedingungen viele viele ">=" und "<=" werden)
Allerdings kann ich die Tabelle dann nicht abspeichern, weil es nur so kryptische Fehlermeldungen hagelt, die mich nicht auf den Fehler stoßen, so Dinge wie "sie haben möglicherweise einen Operanden aber keinen Operator eingegeben".
Was auch noch zu sagen ist: Die Tabellenfelder werden später in Word eingesetzt, um Seriendrucke der Tabellendaten zu erstellen. Deswegen war es mir wichtig, die Sache so zu lösen, dass ein ganz normales Tabellenfeld automatisch mit Inhalten gefüllt wird und nicht extra Abfragen oder komplizierteres angelegt werden müssen, die sich dann u.U. nicht so transparent in meine Word-Vorlage integrieren lassen.
Nun sind meine Access-Kenntnisse nie riesig gewesen und liegen dazu noch seit fast 3 Jahren ziemlich brach. Deshalb meine Fragen:
1. Was ist an obigem Beispiel falsch?
2. Geht es so überhaupt oder sollte ich es anders angehen?
Freue mich über jeden Tipp!
Gruß,
Tim
Hallo zusammen,
ich versuche gerade, in einer Tabelle einer Access-Datenbank für ein Feld einen Standardwert festzulegen, der je nach dem Inhalt eines anderen Feldes in jeder Reihe der Tabelle passend sein, also automatisch variieren soll.
Folgender Aufbau der Tabelle:
Note | ECTS
1 | (hier Standardwert)
Ein Feld beinhaltet (Schul-)Noten, die ein Feld weiter ("ECTS") automatisch in ein anderes Format (ECTS-Grading-Scale) gebracht werden sollen. Dieses andere Format lässt sich allerdings so nicht mathematisch berechnen, sondern liegt mir anhand von Beispielzahlen in einer "papiernen" Tabelle vor.
Erschwerend kommt hinzu, dass "Note" vom Datentyp her eine Zahl ist und "ECTS" ein String-Wert.
Meine Idee einer herangehensweise war folgendes: Ich lege für "ECTS" in der Entwurfsansicht der Tabelle als Standardwert eine "if-then-else"- Beziehung fest, in der ich die Zusammenhänge, wie man Noten in das ECTS-Format bringt, statisch abbilde.
Dazu habe ich folgendes in das Feld "Standardwert" bzw. über den Ausdrucksgenerator eingegeben:
if [Note] = 1 then [ECTS]="A"
if [Note] = 2 then [ECTS]="B"
if [Note] = 3 then [ECTS]="C"
if [Note] = 4 then [ECTS]="D"
if [Note] = 5 then [ECTS]="E"
if [Note] = 6 then [ECTS]="F"
(stark vereinfacht, in der Realität mussten es statt "ist gleich"- Bedingungen viele viele ">=" und "<=" werden)
Allerdings kann ich die Tabelle dann nicht abspeichern, weil es nur so kryptische Fehlermeldungen hagelt, die mich nicht auf den Fehler stoßen, so Dinge wie "sie haben möglicherweise einen Operanden aber keinen Operator eingegeben".
Was auch noch zu sagen ist: Die Tabellenfelder werden später in Word eingesetzt, um Seriendrucke der Tabellendaten zu erstellen. Deswegen war es mir wichtig, die Sache so zu lösen, dass ein ganz normales Tabellenfeld automatisch mit Inhalten gefüllt wird und nicht extra Abfragen oder komplizierteres angelegt werden müssen, die sich dann u.U. nicht so transparent in meine Word-Vorlage integrieren lassen.
Nun sind meine Access-Kenntnisse nie riesig gewesen und liegen dazu noch seit fast 3 Jahren ziemlich brach. Deshalb meine Fragen:
1. Was ist an obigem Beispiel falsch?
2. Geht es so überhaupt oder sollte ich es anders angehen?
Freue mich über jeden Tipp!
Gruß,
Tim
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 17995
Url: https://administrator.de/forum/standardwert-eines-datenbankfeldes-in-access-per-if-then-else-bedingung-17995.html
Ausgedruckt am: 13.05.2025 um 16:05 Uhr
16 Kommentare
Neuester Kommentar

suchst du jetz die richtige formel um access
beizubringen, in das feld ECTS A,B,C,...
zuschreiben, abhängig vom Feld NOTE, mit
den inhalten 1,2,3,....
...oder worum geht's eigentlich?
beizubringen, in das feld ECTS A,B,C,...
zuschreiben, abhängig vom Feld NOTE, mit
den inhalten 1,2,3,....
...oder worum geht's eigentlich?

abfrage - entwurfsansicht: als feld angeben
ECTS: Wenn([note]=1;"A";Wenn([note]=2;"B";Wenn([note]=3;"C";Wenn([note]=4;"D";Wenn([note]=5;"E";Wenn([note]=6;"F";""))))))
insofern du eine englische version hast, "wenn" mit "if" ersetzen.
wer is eigentlich bei microsoft auf die idee gekommen,
die befehle ins deutsch zu übersetzen - erschiessen sag ich.
ECTS: Wenn([note]=1;"A";Wenn([note]=2;"B";Wenn([note]=3;"C";Wenn([note]=4;"D";Wenn([note]=5;"E";Wenn([note]=6;"F";""))))))
insofern du eine englische version hast, "wenn" mit "if" ersetzen.
wer is eigentlich bei microsoft auf die idee gekommen,
die befehle ins deutsch zu übersetzen - erschiessen sag ich.

es is für die entwurfsansicht geschrieben.
die sql umwandlung in access is ein thema
für sich, um es kurz zumachen, zum vergessen.
habe "if [Note] = 1 then [ECTS]="A"" als
logischen denkansatz aufgefasst - mein fehler.
die problematik mit dem seriendruck verstehe
ich in der tat nich, da eigentlich keines bestehen
sollte.
ob es sinnvoll is, in access mit sql zu arbeiten,
muss wohl jeder für sich entscheiden - ich würde
es nich benützen.
die sql umwandlung in access is ein thema
für sich, um es kurz zumachen, zum vergessen.
habe "if [Note] = 1 then [ECTS]="A"" als
logischen denkansatz aufgefasst - mein fehler.
die problematik mit dem seriendruck verstehe
ich in der tat nich, da eigentlich keines bestehen
sollte.
ob es sinnvoll is, in access mit sql zu arbeiten,
muss wohl jeder für sich entscheiden - ich würde
es nich benützen.
Du musst den Typ der Abfrage auf "Aktualisierungsabfrage" setzen und diese Formel:
"Wenn([test].[note]=1;"A";Wenn([test].[note]=2;"B";Wenn([test].[note]=3;"C";Wenn([test].[note]=4;"D";Wenn([test].[note]=5;"E";"F")))))"
bei "Spalte" Schein, "Zeile" Aktualisieren einsetzen, wobei test der Tabellenname ist,
Gruß
Atti.
"Wenn([test].[note]=1;"A";Wenn([test].[note]=2;"B";Wenn([test].[note]=3;"C";Wenn([test].[note]=4;"D";Wenn([test].[note]=5;"E";"F")))))"
bei "Spalte" Schein, "Zeile" Aktualisieren einsetzen, wobei test der Tabellenname ist,
Gruß
Atti.

wie auch immer, geht doch 
@tim, @Atti,
ich hasse so komplizierte Abfragen (die überfordern mich immer).
Meine Variante der Aktualierungsabfrage wäre:
UPDATE Scheine SET ECTS=Chr(Note+64);

~~
Abgesehen davon würde ich auf das (redundante) Feld ECTS ganz verzichten, nur das Feld "Note" aus Access übernehmen und die Konvertierung "chr( Feld "Note"+64)" mit Word-Makros machen.
Frank / der Biber aus Bremen
ich hasse so komplizierte Abfragen (die überfordern mich immer).
Meine Variante der Aktualierungsabfrage wäre:
UPDATE Scheine SET ECTS=Chr(Note+64);
~~
Abgesehen davon würde ich auf das (redundante) Feld ECTS ganz verzichten, nur das Feld "Note" aus Access übernehmen und die Konvertierung "chr( Feld "Note"+64)" mit Word-Makros machen.
Frank / der Biber aus Bremen

man beachte das pluszeichen.
Och, Tim,
sollte gar kein Witz sein. Würde hier niemals Witze auch nur versuchen und bin ohnehin absolut humorlos.
Was ich meinte, war dir Fortsetzung Deiner @-Reihe
Chr(0+64)="@"
Chr(1+64)="A"
Chr(2+64)="B"
Chr(3+64)="C"
Chr(4+64)="D"
Chr(5+64)="E"
Chr(6+64)="F"
Meinte den Tipp also durchaus konstruktiv. Das UPDATE-Statement oben habe ich so in M$-Access verwendet. Und das tut, was es soll.
Schönen Tag Dir
Frank
[Edit] Hast Du ja wieder vor mir gemerkt...bin wieder zu spät...[/Edit]
sollte gar kein Witz sein. Würde hier niemals Witze auch nur versuchen und bin ohnehin absolut humorlos.
Was ich meinte, war dir Fortsetzung Deiner @-Reihe
Chr(0+64)="@"
Chr(1+64)="A"
Chr(2+64)="B"
Chr(3+64)="C"
Chr(4+64)="D"
Chr(5+64)="E"
Chr(6+64)="F"
Meinte den Tipp also durchaus konstruktiv. Das UPDATE-Statement oben habe ich so in M$-Access verwendet. Und das tut, was es soll.
Schönen Tag Dir
Frank
[Edit] Hast Du ja wieder vor mir gemerkt...bin wieder zu spät...[/Edit]

Moin,
ich habe einen anderen Lösungsansatz, der vielleicht hilfreich sein kann:
Erstelle eine Function im VBA-Editor. Hier ein Beispielcode:
Sobald diese Funktion verfügbar ist, kannst Du in einer Abfrage
alles ausgeben, auch Deine gewünschten konvertierten Noten. Du kannst diese Funktion an fast allen Stellen in Access einsetzen, leider nicht für die Berechnung eines Standardwertes in einer Tabellendefinition.
Du könntest Dir damit die Speicherung der konvertierten Werte ersparen und somit jederzeit eine aktuelle Ausgabe der Werte erhalten, auch bei Änderung der der Berechnung zugrunde liegenden Formel.
Vielleicht ist das ja ein wenig hilfreich auf dem Weg zur Lösung ...
hand
dba
ich habe einen anderen Lösungsansatz, der vielleicht hilfreich sein kann:
Erstelle eine Function im VBA-Editor. Hier ein Beispielcode:
Public Function noten(zahl As Integer) As String
Select Case zahl
Case 1
noten = "A"
Case 2
noten = "B"
Case 3
noten = "C"
Case 4
noten = "D"
Case 5
noten = "E"
Case 6
noten = "F"
End Select
End Function
select note, noten(note) from Tabelle
Du könntest Dir damit die Speicherung der konvertierten Werte ersparen und somit jederzeit eine aktuelle Ausgabe der Werte erhalten, auch bei Änderung der der Berechnung zugrunde liegenden Formel.
Vielleicht ist das ja ein wenig hilfreich auf dem Weg zur Lösung ...
hand
dba