|
|
Vergleichendes Code-Beispiel (Small Business-Projekt)
Sie wollen allen Einkäufern Ihrer Kunden
einen Bonus zuweisen, bei denen aktuelle Aufträge mit mehr als 3
Bestellpositionen vorliegen. Ein SQL-Programmierer formuliert das in einem
Satz:
UPDATE Personen SET Bonus='J'
WHERE Abteilung='Einkauf'
AND BeiFirma IN
(SELECT KundeNr FROM Auftraege WHERE Datum >=
Today
AND 3<
(SELECT COUNT(*) FROM
AuftraegePos AP
WHERE AP.AuftragNr
= Auftraege.AuftragNr
AND
AP.StornoKZ='N'))
Das schreibt sich schnell, aber wie lange brauchen
Sie, bis der Fehler in diesem verschachtelten SQL-Statement gefunden ist?
Nun zu Visual-Basic: Das Recordset-Objekt ist ja auch ein Objekt. Aber
wie man in folgendem Code-Stück sieht, wird der Gesamtüberblick
damit nicht unbedingt verbessert. Insbesondere wenn ein anderer Programmierer
oder man selbst nach einiger Zeit das Ganze wieder verstehen möchte:
Dim RS As Recordset
Dim PosRS As Recordset
Set RS = DB.OpenRecordset("SELECT * FROM Auftraege WHERE Datum >= ' "
& Today & " ' ")
RS.MoveFirst
While Not RS.EOF
Set PosRS = DB.OpenRecordset("SELECT COUNT(*) FROM AuftraegePos
WHERE AuftragNr= " _
& RS.Fields("AuftragNr")
& " AND StornoKZ='N'")
If PosRS.Fields(0) > 3 Then
DB.Execute "UPDATE Personen SET Bonus='J' WHERE
Abteilung='Einkauf' AND BeiFirma= "
& RS.Fields("KundeNr")
End If
RS.MoveNext
Wend
Das Ganze nun mit Visual-Basic beim Einsatz von
TypeLift:
For Each Auftrag in Auftraege.Auswahl(AbDatum:=Today)
If Auftrag.Positionen.Count > 3 Then
Auftrag.Kunde.Einkaeufer.Bonus = True
End If
Next
Sie können, aber Sie müssen dieses Code-Stück
nicht dokumentieren, weil es fast der natürlichen Sprache entspricht.
Wenn Sie hier nach Wochen eine weitere Bedingung einfügen, dann geht
das mit geringem Fehlerrisiko! Auch die Sprache SQL brauchen Sie fortan
nicht mehr zu bemühen. Das macht TypeLift für Sie!
|
|
|