Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Optiplex am November 15, 2010, 09:11:44

Titel: Wie deklariere ich eine Funktion richtig
Beitrag von: Optiplex am November 15, 2010, 09:11:44
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

Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: MzKlMu am November 15, 2010, 09:25:25
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.
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: Optiplex am November 15, 2010, 12:31:44
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
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: DF6GL am November 15, 2010, 13:06:51
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...
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: database am November 15, 2010, 13:30:00
Hallo,

Zitatwann nimmt man was

Wenn der Originalwert nicht verändert werden darf keinesfalls ByRef

zur 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
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: Optiplex am November 15, 2010, 16:36:45
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
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: Josef am November 15, 2010, 17:17:31
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 Sub

Zum Testen dann auch einmal Byval durch ByRef ersetzen. => Wird einen Fehler auslösen.

mfg
Josef
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: DF6GL am November 15, 2010, 18:33:15
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  :)
Titel: Re: Wie deklariere ich eine Funktion richtig
Beitrag von: Optiplex am November 15, 2010, 18:56:02
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