HINWEIS
BEISPIEL
BEISPIEL
Basic-Funktionen in SQL-Anweisungen
Eine der wohl leistungsfähigsten Erweiterungen von Access-SQL sind die nutzerdefinierten Funktionen in-
nerhalb von SQL-Anweisungen. Was sich so trivial anhört, hat eine nicht zu unterschätzende Bedeutung
für den Programmierer. Neben der freien Verwendung fast aller Visual Basic-Funktionen können Sie auch
die von Ihnen selbst geschriebenen Funktionen direkt in den SQL-String einfügen.
Arbeiten Sie mit einem SQL Server, sollten Sie auf die Verwendung von Visual Basic-Funktionen verzichten, da
in diesem Fall keine Bearbeitung durch den SQL Serverglich ist. Die Daten müssen erst umständlich auf den Client
heruntergeladen werden, um sie dann mit der Jet-Engine zu verarbeiten.
Für die Ausgabe des Gehalts möchten Sie ein eigenes Format verwenden:
SELECT
Nachname,
Format(Gehalt,'Currency') AS Verdienst
FROM
Personen
Abbildung 8.99 Abfrageergebnis
Eine Bank muss neue Kontonummern vergeben. Dazu wird neben einer neuen Kennziffer auch eine Prüf-
ziffer an die bisherigen Nummern angehängt. Während das Anfügen der neuen Kennziffer kein Problem
darstellt (Stringaddition im SQL-String), ist die Berechnung der Prüfziffer mit SQL-Mitteln nicht machbar.
Der Ausweg ist eine Visual Basic-Funktion:
Function Prüfziffer(ktonr As Variant, bereich As Variant) As String
Dim summe As Long, rest As Long, i As Integer, prüf As Long
ktonr = ktonr & bereich
For i = 1 To 9
summe = summe + Choose(i,3,9,8,7,6,5,4,3,2) * CLng(Mid(ktonr, i, 1))
Next
rest = summe Mod 11
prüf = 11 - rest
If prüf > 9 Then prüf = 0
Prüfziffer = CStr(prüf)
End Function
499
SQL in der Access-Praxis
BEISPIEL
Kapitel 8: SQL in Theorie und Praxis
Auf den eigentlichen Algorithmus wollen wir hier nicht näher eingehen. Im Wesentlichen geht es darum, eine
gewichtete einstellige Prüfsumme zu erhalten. Die Wichtungsfaktoren liefert uns die
Choose
-Funktion.
Aus der Ausgangstabelle
Kontonummern
soll eine Tabelle
NeuKto
erzeugt werden. Die Ausgangstabelle ent-
hält neben der Kontonummer (
kto
) die Bereichskennziffer (
bereich
).
Mit:
SELECT
kto,
kto + bereich + Prüfziffer(kto, bereich) AS ktoneu
INTO
neuKto
FROM
Kontonummern
erhalten Sie das folgende Ergebnis:
Abbildung 8.100 Ergebnistabelle NeuKto
Sie möchten alle Mitarbeiter ausgeben, die im nächsten Monat Geburtstag haben und die 50 Jahre und älter
sind:
SELECT
Nachname, Geburtstag
FROM
Personen
WHERE
Month(Geburtstag) = Month(Now)+1 AND DateDiff('yyyy',Geburtstag,Now) >= 50
Abbildung 8.101 Abfrageergebnis
500

Get Microsoft Office Access 2007-Programmierung - Das Handbuch now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.