Hallo zusammen,
ich habe eine Frage zur Deklaration von Functionen. wenn ich folgende Deklaration schreibe
Public Function xyUngelöst ( zahl1,zahl2,zahl3 As Long )
sind dann alle Variablen zahl1-3 als Long deklariert oder nur zahl3 und die Anderen sind Varianten und wie ist das mit byrev und byval was sollte man hier beachten.
Danke und gruß Dieter
Hallo,
Nur Zahl3 ist Long, die anderen sind Variant.
So ist es richtig.
Public Function xyUngelöst ( zahl1 As Long, zahl2 As Long, zahl3 As Long ) As Long
Eine Funktion gibt auch in der Regel einen Wert zurück, der auch deklariert werden sollte.
Dim X, Y, Z As String wäre in obigem Sinn auch falsch.
Zu byval musst Du mal selbst recherchieren, meine Erkläreungen sind da nicht so sattelfest.
Die Access Hilfe ist zunächst mal eine gute Anlaufstelle.
Nachtrag: In der Hilfe ist auch nichts gescheites zu finden.
hallo MzKlMu,
richtig in der Hilfe habe ich auch nicht genaues gefunden.Also muss man jede Variable einzeln deklarieren außer man arbeitet grundsätzlich mit Varianten.
ByVal / ByRev blicke ich noch nicht so richtig durch. Die eine soll irgendwie nur auf die Adresse in Speicher verweisen wärend die Andere eine Kopie der Variable erstellt und mit dieser weiterarbeitet, aber wann nimmt man was?
Gruß Dieter
HAllo,
ByVal (by Value): Übergabe nur des Wertes (als "Kopie")
ByRef (by Reference): Übergabe des Pointers auf ein Variable (oder Objekt)
ByVal schließt aus, dass die Funktion/Sub den Originalwert ändern kann.
ByVal ist bei Object-Übergabe nicht möglich.
(Hast Du ja schon ähnlich gesagt)
"wann nimmt man was"
das mußt Du wissen, was die Prozedur machen soll, Du schreibst die Funktion/Sub...
Hallo,
Zitatwann nimmt man was
Wenn der
Originalwert nicht verändert werden darf
keinesfalls ByRefzur näheren Erklärung siehe u.a. hier http://www.vbarchiv.net/faq/faq_strings_byval.html (http://www.vbarchiv.net/faq/faq_strings_byval.html)
Grüße
Super erklärt von euch beiden, jetzt müst ihr mir nur noch verraten was Access als Standardwert setzt wenn ich nichts angebe und muss ich das vor jeder Variablen machen oder nur Einmal am anfang hinter der Klammer.
Gruß Dieter
Hallo!
Kurzer Hinweis:
ZitatByVal ist bei Object-Übergabe nicht möglich.
Auch für eine Referenz-Übergabe kann ByVal verwendet werden. Das kann ich empfehlen, damit man nicht irrtümlich die Referenz überschreibt.
Beispiel:
Private Sub machetwas(ByVal RecordsetReferenz As DAO.Recordset)
With RecordsetReferenz
Debug.Print .Fields(0).Name, .Fields(0).value
End With
Set RecordsetReferenz = Nothing 'ok, ist ziemlich sinnlos ;-)
End Sub
Private Sub test()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("select id from Tabelle")
machetwas rst
rst.MoveNext
machetwas rst
rst.Close
End SubZum Testen dann auch einmal Byval durch ByRef ersetzen. => Wird einen Fehler auslösen.
mfg
Josef
Hallo Josef,
und schon wieder hast Du mich einer Illusion beraubt :'( :D
Dachte, weil ein Objekt nur per Referenz ansprechbar ist, klappt ein byVal nicht.. Habe das aber auch nie so getestet.. :-[
Danke für den Hinweis :)
Huch jetzt hatte ich den Link von database glatt übersehen, vergeßt meinen letzten Beitrag, es ist alles genaustens erklärt, danke nochmals an alle.
Gruß Dieter