Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Standardwert eines Datenbankfeldes in Access per if-then-else Bedingung

Frage Microsoft Microsoft Office

Mitglied: 11078

11078 (Level 2)

18.10.2005, aktualisiert 19.10.2005, 27274 Aufrufe, 16 Kommentare

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
Mitglied: 13100
18.10.2005 um 17:51 Uhr
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?
Bitte warten ..
Mitglied: 11078
18.10.2005 um 18:07 Uhr
Hallo,

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?


Ja, darum geht es. Das Feld Note existiert bereits und jetzt soll auch noch ein Feld ECTS hinzukommen. Damit man dieses Feld über hunderte Reihen nicht manuell per Hand füllen muss, suche ich nach der Möglichkeit dies über Standardwerte zu machen. Der Vorteil: Ich müsste nur einmal Bedingungen festlegen, welche Note welchem ECTS-Wert entspricht und Access füllt auf dieser Basis das neue Feld.

Alternativ habe ich aber auch die Frage gestellt, ob jemand eine bessere Möglichkeit außer über die Standardwerte kennt, die gleichzeitig auch noch praktikabel ist, wenn ich die Felder der Tabelle zur Weiterverarbeitung in Word für Serienbriefe einsetzen will. Denn soweit ich es überblicke, kann ich in Word nur "Felder" aus Access-Datenbanken über Platzhalter einsetzen und nicht Ergebnisse von Abfragen, VBA, etc. pp.


Ciao,
Tim
Bitte warten ..
Mitglied: 13100
18.10.2005 um 18:13 Uhr
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.
Bitte warten ..
Mitglied: 11078
18.10.2005 um 19:17 Uhr
Hallo,


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";""))))))

Ich fürchte, Du hast mich nicht richtig verstanden oder ich habe mich unpräzise ausgedrückt? In der Tabelle soll ohne, dass ich viel Arbeit habe, ein neues Feld für alle bereits bestehenden Datensätze automatisch befüllt werden. Eine Abfrage würde aber doch erfordern, dass schon etwas drin steht, oder?

Wenn ich mir Deinen Tipp als SQL ansehe, kommt so etwas dabei raus:

SELECT Scheine.ECTS
FROM Scheine
WHERE (((Scheine.ECTS)=IIf([note]=1,"A",IIf([note]=2,"B",IIf([note]=3,"C",IIf([note]=4,"D",IIf([note]=5,"E",IIf([note]=6,"F",""))))))));

Aber SELECT Scheine.ECTS bringt ja gar nichts, weil in Scheine.ECTS ja noch nichts drin steht. Das soll ja erst automatisiert geschehen.

Mal ganz davon abgesehen, dass ich - wie gesagt - über die Access-Seriendruck-Funktion innerhalb von Word nur Felder ("Note", "ECTS", usw.) in die Vorlage einsetzen kann, damit Word dann für jeden einzelnen Datensatz in einem separaten Ausdruck die Platzhalter durch Werte aus der Tabelle ersetzt. Abfragen kann ich da nicht einsetzen.

Deshalb habe ich einen Kniff gesucht, wie ich ein Tabellen-Feld über alle Datensätze automatisch nach einigen Bedingungen, die von einem anderen bereits gefüllten Feld abhängen, befüllen lassen kann.

Totzdem danke für Deinen Tipp!


Gruß,
Tim
Bitte warten ..
Mitglied: 13100
18.10.2005 um 20:35 Uhr
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.
Bitte warten ..
Mitglied: 11078
18.10.2005 um 20:57 Uhr
Hallo Angeldust,


es is für die entwurfsansicht
geschrieben.

Ja, das habe ich ja verstanden

die sql umwandlung in access is ein thema
für sich, um es kurz zumachen, zum
vergessen.

Wie gesagt, ich kann nicht gut Access aber dafür gut SQL - ich schau mir deshalb die "Kriterien" der Abfrage manchmal in der Sql-Ansicht an, um besser zu verstehen, was da genau passiert.


habe "if [Note] = 1 then
[ECTS]="A"" als
logischen denkansatz aufgefasst - mein
fehler.

NEIN NEIN! Du hast es 100% richtig erfasst, und um es kurz zu machen: Dein Tipp geht nicht über den Weg einer normalen Abfrage (weil in das Feld ECTS ja erst noch etwas rein soll, bevor man es überhaupt abfragen kann). ABER: Habe festgesstellt, dass Dein Tipp prima funktioniert, wenn man statt normaler "Abfrage" in Access "Aktualisierungsabfrage" auswählt.

Dann werden die Werte durch die Abfrage nämlich nicht aus der Tabelle gelesen sondern in sie gesetzt. Wenn in die DB neue Noten kommen, muss man eben einmal die Anfügeabfrage starten, damit die passenden ECTS-Einträge ergänzt werden.

Also: Du hast mir absolut geholfen!!! Großes Dankeschön!


die problematik mit dem seriendruck
verstehe
ich in der tat nich, da eigentlich keines
bestehen
sollte.

Vielleicht reden wir da aneinander vorbei, aber die Problematik ist ja jetzt weg...

Vielen Dank nochmal und
schönen Feierabend!


Tim
Bitte warten ..
Mitglied: Atti58
18.10.2005 um 20:58 Uhr
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.
Bitte warten ..
Mitglied: Atti58
18.10.2005 um 21:01 Uhr
... na, da kam ich wohl ein Mü zu spät ...

Gruß

Atti.
Bitte warten ..
Mitglied: 13100
18.10.2005 um 21:10 Uhr
wie auch immer, geht doch
Bitte warten ..
Mitglied: 11078
18.10.2005 um 21:12 Uhr
Hi Atti,

... na, da kam ich wohl ein Mü zu
spät ...


Nein, so ist mir aufgefallen, dass es natürlich "Aktualisierungsabfrage" heißen muss und nicht "Anfügeabfrage". Habe das im obigen Beitrag von mir geändert, damit niemand was völlig falschen liest...


So, jetzt reicht es aber für heute Abend.
Feierabend!


Gruß,
Tim
Bitte warten ..
Mitglied: Biber
18.10.2005 um 21:46 Uhr
@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
Bitte warten ..
Mitglied: 11078
19.10.2005 um 09:41 Uhr
Hi Frank,

ich hasse so komplizierte Abfragen

Tja, aber ich bin gleichzeitig Student und (seit 4 Jahren) Uni-Mitarbeiter.
Der eine Teil meiner Seele sagt daher: Mach es Dir einfach, der andere sagt:
Mach es so wie alle hier - so umständlich wie nur irgend möglich...
Das Resultat liegt dann meistens in der Mitte

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.


chr(64) ist nach den mir zugänglichen ASCII-Tabellen das "@"-Symbol. Entweder habe ich den Witz dahinter nicht verstanden oder daraus ergibt sich ein Word-Feature, das mir unbekannt ist.


Gruß,
Tim
Bitte warten ..
Mitglied: 13100
19.10.2005 um 09:55 Uhr
man beachte das pluszeichen.
Bitte warten ..
Mitglied: 11078
19.10.2005 um 10:07 Uhr
Moin,

man beachte das pluszeichen.

ja, wer richtig liest ist ganz klar im Vorteil



Einen schönen Arbeitstag,
Tim
Bitte warten ..
Mitglied: Biber
19.10.2005 um 10:21 Uhr
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]
Bitte warten ..
Mitglied: 16640
19.10.2005 um 11:17 Uhr
Moin,

ich habe einen anderen Lösungsansatz, der vielleicht hilfreich sein kann:

Erstelle eine Function im VBA-Editor. Hier ein Beispielcode:
<font class=code>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</font>Sobald diese Funktion verfügbar ist, kannst Du in einer Abfrage
<font class=code>select note, noten(note) from Tabelle</font>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
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
VB for Applications
gelöst If Then Next (12)

Frage von Aximand zum Thema VB for Applications ...

Batch & Shell
gelöst Cmd If ()else(if) geht nicht (2)

Frage von Saschaaaaa zum Thema Batch & Shell ...

Batch & Shell
Batch vergleich Dateien if else (2)

Frage von zeroblue2005 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...

Exchange Server
DNS Einstellung - zwei feste IPs für Mailserver (15)

Frage von ivan0s zum Thema Exchange Server ...