Hallo!
[etwas OT]
Wenn eine Prozedur als Prozedur festgelegt worden ist, sollte dies auch zukünftig so bleiben.
Warum sollte man eine Sub nicht zu einer Function ändern dürfen?
Ich sehe da keinen Schnittstellenkonflikt, da sich für jene Prozeduren, die zuvor die Sub verwendeten, nichts beim Aufruf ändert. (Die Funktionalität der Prozedur muss natürlich erhalten bleiben.)
Eine Erweiterung per optionalen Parameter ist zwar auch möglich, hat aber den Nachteil, dass man dann für den Rückgabewert immer eine Hilfsvariable benötigt.
Beispiel (nur Prinzip):
Angenommen es existiert so eine Prozedur:
- Code: Alles auswählen
Private Sub UpdateData(ByVal IdWert As Long, ByVal WertVonXYZ as Variant)
strSQL = "update ...."
db.Execute strSQL, dbfailonerror
End Sub
Nun kommt jemand beim überarbeiten des Code auf die Idee, dass es vielleicht ganz praktisch wäre, wenn man als Rückgabe die Anzahl der geänderten Datensätze erhält.
- Code: Alles auswählen
Private Function UpdateData(ByVal IdWert As Long, ByVal WertVonXYZ as Variant) as Long
strSQL = "update ...."
db.Execute strSQL, dbfailonerror
UpdateData = db.RecordsAffected
End Function
Damit kann diese Function-Prozedur so verwendet werden:
- Code: Alles auswählen
if UpdateData(123, "abc") = 0 then
InsertData 123, "abc"
end if
Ein weiteres Beispiel wäre, wenn man den Erfolg einer Aktion mittels True/False als Rückgabewert mitteilen möchte.
Die Rückgabe mit Function finde ich übersichtlicher als:
- Code: Alles auswählen
Private Function UpdateData(ByVal IdWert as long, byval WertVonXYZ as variant, Optional ByRef RecordsAffected as long)
strSQL = "update ...."
db.execute strSQL, dbfailonerror
RecordsAffected = db.RecordsAffected
end Function
mit
- Code: Alles auswählen
dim lngRC as long
UpdateData 123, "abc", lngRC
if lngRC = 0 then
InsertData 123, "abc"
end if
Die letzte Variante ist natürlich ebenso möglich. Da mit der Function-Prozedur aber die Schnittstelle der Sub-Prozedur nicht verletzt wird, fällt mir kein Grund ein, warum eine Sub immer eine Sub bleiben muss.
Übersehe ich etwas?
mfg
Josef