Μαθήματα στην Access (Μέρος 7)

από • 08/03/2014 • Access, EducationΣχόλια (0)5478

Μάθετε την Access με Απλές Ερωτήσεις – Μέρος 7ο – Μακροεντολές

Συναρτήσεις και Υπορουτίνες

Στη VBA υπάρχουν, όπως και στις άλλες γλώσσες προγραμματισμού, δύο είδη διαδικασιών : οι Συναρτήσεις (Functions) και οι Υπορουτίνες (Subroutines). Και οι τύποι διαδικασιών μπορούν να δεχθούν παραμέτρους. Οι συναρτήσεις μπορούν να επιστρέψουν μια τιμή δεδομένων, ενώ οι υπορουτίνες όχι.

Function

Μπορούμε να χρησιμοποιήσουμε μια εντολή Function για να δηλώσουμε μια νέα συνάρτηση, τις παραμέτρους που θα δέχεται, τον τύπο μεταβλητής που θα επιστρέφει και τον κώδικα που θα εκτελεί τη διαδικασία συνάρτησης.

Θα πρέπει να δηλώσουμε τον τύπο δεδομένων όλων των ορισμάτων που μπορεί να δεχθεί η συνάρτηση στη λίστα παραμέτρων της. Αν χρησιμοποιήσουμε τη δεσμευμένη λέξη ByVal για να δηλώσουμε ένα όρισμα, τότε αυτή θα είναι κλήση με τιμή. Δηλαδή, οποιαδήποτε αλλαγή κάνουμε σ’ ένα όρισμα ByVal μέσα στη συνάρτηση, δεν θα αλλάξει την αρχική μεταβλητή.

Αν χρησιμοποιήσουμε τη δεσμευμένη λέξη ByRef για να δηλώσουμε ένα όρισμα, τότε αυτή θα είναι κλήση με αναφορά. Δηλαδή, οποιαδήποτε αλλαγή κάνουμε σ’ ένα όρισμα ByRef μέσα στη συνάρτηση, θα αλλάξει και την αρχική μεταβλητή.

Μάθετε την Access με Απλές Ερωτήσεις – Μέρος 7ο

Μπορούμε να χρησιμοποιήσουμε την εντολή Exit Function σε οποιοδήποτε σημείο της συνάρτησης, για να βγούμε από τη συνάρτηση ομαλά και να επιστρέψουμε στη διαδικασία κλήσης.

Για παράδειγμα, για να δημιουργήσουμε μια συνάρτηση με όνομα MyFunction που θα δέχεται ένα ακέραιο και ένα αλφαριθμητικό όρισμα και θα επιστρέφει μια τιμή διπλής ακρίβειας, γράφουμε :

Function MyFunction (intArg1 As Integer, strArg2 As String) As Double
    <εντολές συνάρτησης>
End Function
Sub

Μπορούμε να χρησιμοποιήσουμε μια εντολή Sub για να δηλώσουμε μια νέα υπορουτίνα, τις παραμέτρους που θα δέχεται και τον κώδικά της.

Μπορούμε να χρησιμοποιήσουμε την εντολή Exit Sub σε οποιοδήποτε σημείο της υπορουτίνας, για να βγούμε από την υπορουτίνα ομαλά και να επιστρέψουμε στη διαδικασία κλήσης.

Για παράδειγμα, για να δημιουργήσουμε μια υπορουτίνα με όνομα MySub που θα δέχεται δύο αλφαριθμητικά ορίσματα, αλλά θα μπορεί να τροποποιήσει μόνο το δεύτερο, γράφουμε :

Sub MySub (ByVal strArg1 As String, ByRef strArg2 As String)
    <εντολές υπορουτίνας>
End Sub

Έλεγχος της Ροής των Εντολών

Call

Μεταφέρει τον έλεγχο σε μια υπορουτίνα.

π.χ.

Call MySub (intMyInteger, curPrice * intQty)

Do … Loop

Εκτελεί ένα σύνολο εντολών πολλές φορές μέχρις ότου γίνει ψευδής ή αληθής μια συνθήκη. Δέχεται και τις δύο εκφράσεις While και Until, τις οποίες μπορούμε να βάλουμε στην αρχή ή στο τέλος του βρόχου.

π.χ.

Do Until rcdClubs.EOF
    <εντολές διαδικασίας>
    rcdClubs.MoveNext
Loop

For … Next

Εκτελεί ένα σύνολο εντολών συγκεκριμένες φορές.

π.χ.

For intI = 0 To 4
    Debug.Print dbEntSched.QueryDefs(intI).Name
Next intI

For Each … Next

Εκτελεί ένα σύνολο εντολών για κάθε στοιχείο μιας συλλογής ή μήτρας.

π.χ.

For Each qdf In dbEntSched.QueryDefs
    Debug.Print qdf.Name
Next qdf

GoTo

Πηγαίνει, χωρίς περιορισμό, σε κάποια άλλη εντολή.

π.χ.

GoTo SkipOver

If … Then … Else

Εκτελεί κάποιες εντολές ανάλογα με την τιμή που επιστρέφει μια συνθήκη.

π.χ.

Dim strMyString As String, strFirst As String, intVal As Integer
strFirst = Ucase$(Mid$(strMyString, 1, 1))
If strFirst >= ‘A’ And strFirst <= ‘F’ Then
    intVal = 1
ElseIf strFirst >= ‘G’ And strFirst <= ‘N’ Then
    intVal = 2
ElseIf strFirst >= ‘O’ And strFirst <= ‘Z’ Then
    intVal = 3
Else
    intVal = 0
End If

Select Case

Εκτελεί εντολές υπό συνθήκη, με βάση το αποτέλεσμα της σύγκρισης της τιμής μιας παράστασης μ’ έναν κατάλογο ή ένα εύρος τιμών.

π.χ.

Dim strMyString As String, intVal As Integer
Select Case Ucase$(Mid$(strMyString, 1, 1))
    Case ‘A’ To ‘F’
        intVal = 1
    Case ‘G’ To ‘N’
        intVal = 2
    Case ‘O’ To ‘Z’
        intVal = 3
    Case Else
        intVal = 0
End Select

Stop

Αναστέλλει προσωρινά την εκτέλεση μιας διαδικασίας.

While … Wend

Εκτελεί συνέχεια ένα σύνολο εντολών για όσο διάστημα είναι αληθής μια συνθήκη.

π.χ.

While Not rcdClubs.EOF
    <εντολές διαδικασίας>
    rcdClubs.MoveNext
Wend

With

Είναι παρόμοια με την εντολή With της Pascal.

π.χ.

Dim rst As Recordset, db As Database
Set db = CurentDb()
Set rst = db.OpenRecordset(‘MyTable’, dbOpenDynaset, dbAppendOnly)
With rst
    .Addnew
    ![FieldOne] = ‘1’
    ![FieldTwo] = ‘John’
    ![FieldThree] = ‘Viescas’
    .Update
    .Close
End With

Εκτέλεση Ενεργειών Μακροεντολών

Στη VBA μπορούμε να εκτελέσουμε τις περισσότερες από τις ενέργειες μακροεντολών. Για όσες, όμως, ενέργειες μακροεντολών δεν μπορούν να εκτελεστούν μέσα σε μια διαδικασία της VBA, υπάρχουν ισοδύναμες εντολές της VBA. Για να εκτελέσουμε μια ενέργεια μακροεντολής μέσα από τη VBA, χρησιμοποιούμε το αντικείμενο DoCmd.

DoCmd

Π.χ. για να ανοίξουμε τη φόρμα Customer στην Άποψη Φόρμας για να εισαγάγουμε δεδομένα, γράφουμε :

DoCmd.OpenForm ‘Customer’, acNormal, , ,acAdd

Για να κλείσουμε τη φόρμα Supplier, γράφουμε :

DoCmd.Close acForm, ‘Supplier’
 

Πατήστε εδώ για να διαβάσετε το 6ο μέρος

Πηγή:

ΠΛΗ.ΝΕ.Τ

 

Αν βρήκατε το άρθρο μας χρήσιμο, θέλετε να μείνετε ενημερωμένοι για όλα τα νέα στο τομέα της τεχνολογίας καθώς και σε χρηστικά άρθρα, βοηθήστε μας κάνοντας like στην σελίδα μας στο Facebook πατώντας εδώ

Σχετικά Άρθρα