Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Ένωση συναρτήσεων σε ερωτημα (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/5389-enosi-synartiseon-se-erotima.html)

alex 19-11-19 22:19

Ένωση συναρτήσεων σε ερωτημα
 
1 Συνημμένο(α)
Καλησπέρα στη παρέα!
Προσπαθώ να κάνω ένα ερώτημα και θέλω να συνδέσω τα παρακάτω. Δεν ξέρω που κάνω λάθος.Από την φόρμα καλώ τις δύο συναρτήσεις που η φόρμα συνδέεται με το ερώτημα.
NewText: (SmallToCapital([textbox2])) & (ReplaceEndSigma([textbox2]))
Πως μπορώ να συνδέσω το SmallToCapital([textbox2]) με το ReplaceEndSigma([textbox2]) στο ερώτημα; Μέσα απο το Module μπορώ να τις βάλω μαζί και να δουλεύει υπάρχει ένας τρόπος αλλά μέσα στο ερώτημα πιθανόν κάποια αγκύλη κάνω λάθος δεν ξέρω.

kapetang 20-11-19 17:55

1 Συνημμένο(α)
Καλησπέρα

Θα πρέπει να αποσαφηνίσουμε το ζητούμενο:

1) Αν τελικός μας στόχος είναι η μετατροπή του κειμένου σε κεφαλαία, δεν απαιτείται να δημιουργήσουμε κάποια συνάρτηση χρήστη.

Μπορούμε να χρησιμοποιήσουμε τον τύπο: Replace(UCase([Textbox2]);"ς";"Σ").

2) Αν όμως θέλουμε, διατηρώντας την πεζή γραφή, να αλλάξουμε το τελικό «σ» σε «ς», χρειάζεται συνάρτηση χρήστη.

Μια τέτοια είναι η παρακάτω.

Κώδικας:

Public Function ReplaceEndSigma(str As Variant) As Variant
    Dim s As Variant, sF As Variant, sR As Variant, i As Long
   
    sF = Array("σ ", "σ.", "σ,", "σ:", "σ;")    '<--πρέπει να αντικατασταθούν
    sR = Array("ς ", "ς.", "ς,", "ς:", "ς;")    '<--θα αντικαταστήσουν τα παραπάνω
   
    s = str
    If Len(s) > 0 Then
        For i = 0 To UBound(sF)
            s = Replace(s, sF(i), sR(i))
        Next
    End If
       
  ReplaceEndSigma = s
 
End Function

Δες και το ερώτημα qryTest στη συνημμένη ΒΔ

alex 20-11-19 18:21

1 Συνημμένο(α)
Καλησπέρα Γιώργο!
Θέλω να βάλω τις συναρτήσεις που έχω στο module σε ένα νέο NewTextBox: στο ερώτημα που να διορθώνει το (σ) σε (ς) όταν είναι μετά από κάποιες συνθήκες πχ ακολουθεί κενό κλπ αλλά ταυτόχρονα να διορθώνει σε κεφαλαίο μετά από τελεία και κενό αν βρίσκει το πρώτο γραμμα μικρό να το διορθώνει και να το κάνει κεφαλαίο. Έχω την συνάρτηση.Κοίταξε το ερώτημα σε προβολή σχεδίασης δεν έχω καλή την σύνταξη να βάλω και τις δύο συναρτήσεις μαζί να διορθώνει ένα κείμενο και όχι ξεχωριστά
Γιώργο μέχρι πόσους χαρακτήρες χωράει "Το μεγάλο κείμενο σε ένα πίνακα;
Στο παρακάτω κώδικα ενσωμάτωσα τις δύο ρουτίνες σε μία για να μου δώσει το επιθυμητό αποτέλεσμα στο κείμενο αλλά υπάρχει πρόβλημα στη σειρά με το κόκκινο.Αν είχα τα δύο fuctions ξεχωριστά σε ένα module τότε στο ερώτημα τί τύπο θα χρησιμοποιήσω για να έχω τις διορθώσεις στο ίδιο κείμενο;
Κώδικας:

Public Function ReplaceEndSigmaSmallToCapital(str As Variant) As Variant
 
    Dim s As Variant, sF As Variant, sR As Variant, i As Long, P As Variant
   
    sF = Array("σ ", "σ.", "σ,", "σ:", "σ;")    '<--πρέπει να αντικατασταθούν
    sR = Array("ς ", "ς.", "ς,", "ς:", "ς;")    '<--θα αντικαταστήσουν τα παραπάνω
   
    s = str
    If Len(s) > 0 Then
        For i = 0 To UBound(sF)
            s = Replace(s, sF(i), sR(i))
        Next
    End If
       
   ReplaceEndSigmaSmallToCapital = s
 
'Από εδώ ξεκινά η συνάρτηση για την αντικατάσταση του πρώτου γράμματος μετά από τελεία και κενό.
      'Dim P As Variant
      'Dim i As Long

    If Nz(str, "") <> "" Then
        P = Split(Trim(str), ".")
        For i = 0 To UBound(P)
            P(i) = Trim(P(i))
            If Len(P(i)) > 1 Then
                P(i) = UCase(Left(P(i), 1)) & Mid(P(i), 2)
            Else
                P(i) = UCase(P(i))
            End If
        Next
      'SmallToCapital = Join(P, ". ")
        ReplaceEndSigmaSmallToCapital = Join(P, ". ")
       
    End If
    'End If
End Function


kapetang 21-11-19 08:22

1 Συνημμένο(α)
Καλημέρα

Αφού έχεις έτοιμες δοκιμασμένες συναρτήσεις, δε χρειάζεται να τις ενσωματώσεις σε μία.

Για την επίτευξη του ζητούμενου απαιτείται ένθεση.

Για παράδειγμα: SmallToCapital(ReplaceEndSigma(txt)).

Η εσωτερική συνάρτηση μετατρέπει στο κείμενο txt το τελικό «σ» σε «ς» και η εξωτερική, ενεργώντας στο τροποποιημένο txt, μετατρέπει στο επιθυμητό κεφαλαίο.

Δες το συνημμένο.

Σύμφωνα με τη Microsoft Το πεδίο «Long Text» παλιό «Memo» αποθηκεύει μέχρι 1 GB, αλλά τα σχετικά χειριστήρια μπορούν να εμφανίσουν μόνο τους 64.000 πρώτους χαρακτήρες.

alex 21-11-19 09:04

Ευχαριστώ πολύ Γιώργο,
μια τελευταία διόρθωση αν μπορείς στη διατύπωση του κώδικα στην ενσωμάτωση στο κώδικα(εντελώς πληροφοριακά πως πρέπει να ενσωματωθεί η ρουτίνα;) στη κόκκινη γραμμή κώδικα πώς πρέπει να γραφεί ο κώδικας για να λειτουργεί σωστά;

Κώδικας:

Public Function ReplaceEndSigmaSmallToCapital(str As Variant) As Variant
 
    Dim s As Variant, sF As Variant, sR As Variant, i As Long, P As Variant
   
    sF = Array("σ ", "σ.", "σ,", "σ:", "σ;")    '<--πρέπει να αντικατασταθούν
    sR = Array("ς ", "ς.", "ς,", "ς:", "ς;")    '<--θα αντικαταστήσουν τα παραπάνω
   
    s = str
    If Len(s) > 0 Then
        For i = 0 To UBound(sF)
            s = Replace(s, sF(i), sR(i))
        Next
    End If
       
  ReplaceEndSigmaSmallToCapital = s
 
'Από εδώ ξεκινά η συνάρτηση για την αντικατάσταση του πρώτου γράμματος μετά από τελεία και κενό.
      'Dim P As Variant
      'Dim i As Long

    If Nz(str, "") <> "" Then
        P = Split(Trim(str), ".")
        For i = 0 To UBound(P)
            P(i) = Trim(P(i))
            If Len(P(i)) > 1 Then
                P(i) = UCase(Left(P(i), 1)) & Mid(P(i), 2)
            Else
                P(i) = UCase(P(i))
            End If
        Next
      'SmallToCapital = Join(P, ". ")
        ReplaceEndSigmaSmallToCapital = Join(P, ". ")
       
    End If
    'End If
End Function


kapetang 21-11-19 10:26

Αλέξανδρε δοκίμασε τη συνάρτηση:

Κώδικας:

Public Function ReplaceEndSigmaSmallToCapital(str As Variant) As Variant
 
    Dim s As Variant, sF As Variant, sR As Variant, i As Long, P As Variant
   
    sF = Array("σ ", "σ.", "σ,", "σ:", "σ;")    '<--πρέπει να αντικατασταθούν
    sR = Array("ς ", "ς.", "ς,", "ς:", "ς;")    '<--θα αντικαταστήσουν τα παραπάνω
   
    If Len(str) > 0 Then
        s = str & " "
        For i = 0 To UBound(sF)
            s = Replace(s, sF(i), sR(i))
        Next
       
        'Από εδώ ξεκινά η συνάρτηση για την αντικατάσταση του πρώτου γράμματος μετά από τελεία και κενό.
        P = Split(Trim(s), ".")
        For i = 0 To UBound(P)
            P(i) = Trim(P(i))
            If Len(P(i)) > 1 Then
                P(i) = UCase(Left(P(i), 1)) & Mid(P(i), 2)
            Else
                P(i) = UCase(P(i))
            End If
        Next
       
    End If
       
  ReplaceEndSigmaSmallToCapital = Join(P, ". ")
 
End Function


kapetang 21-11-19 10:40

Ο παραπάνω κώδικας θα μπορούσε να συντομευτεί στον:

Κώδικας:

Public Function ReplaceEndSigmaSmallToCapital(str As Variant) As Variant
 
    Dim s As Variant, sF As Variant, sR As Variant, i As Long, P As Variant
   
    sF = Array("σ ", "σ.", "σ,", "σ:", "σ;")    '<--πρέπει να αντικατασταθούν
    sR = Array("ς ", "ς.", "ς,", "ς:", "ς;")    '<--θα αντικαταστήσουν τα παραπάνω
   
    If Len(str) > 0 Then
        s = str & " "
        For i = 0 To UBound(sF)
            s = Replace(s, sF(i), sR(i))
        Next
       
        'Από εδώ ξεκινά η συνάρτηση για την αντικατάσταση του πρώτου γράμματος μετά από τελεία και κενό.
        P = Split(Trim(s), ".")
        For i = 0 To UBound(P)
            P(i) = Trim(P(i))
            P(i) = UCase(Left(P(i), 1)) & Mid(P(i), 2)
        Next
       
    End If
       
  ReplaceEndSigmaSmallToCapital = Join(P, ". ")
 
End Function


alex 21-11-19 11:15

1 Συνημμένο(α)
Γιώργο δεν δουλεύει ουτε με την πρώτη ούτε με την δεύτερη ρουτίνα. Εκτός και αν εχω λαθος το ερώτημα Routina: ReplaceEndSigmaSmallToCapital([textbox2])ανεβάζω την βάση.

kapetang 21-11-19 12:05

Στη συνάρτηση που ανέβασες έχεις τις γραμμές κώδικα:

Κώδικας:

    sF = Array("s ", "s.", "s,", "s:", "s;")    '<--p??pe? ?a a?t??atasta????
    sR = Array("? ", "?.", "?,", "?:", "?;")    '<--?a a?t??atast?s??? ta pa?ap???

Που τις βρήκες;

Έχουν καμιά σχέση με τις:

Κώδικας:

sF = Array("σ ", "σ.", "σ,", "σ:", "σ;")    '<--πρέπει να αντικατασταθούν
sR = Array("ς ", "ς.", "ς,", "ς:", "ς;")    '<--θα αντικαταστήσουν τα παραπάνω

Όταν κάνεις copy/paste φρόντισε το πληκτρολόγιο να είναι στα ελληνικά.

alex 21-11-19 12:13

Ωχ συγνώμη Γιώργο δεν το πρόσεξα από ταχύτητα. Σε ευχαριστώ πάντως για όλα και για τις δύο εναλλαγές της ρουτίνας. Πολύτιμη η βοήθειά σου και τα χρειάζομαι για μια εργασία που κάνω σε ένα μεταπτυχιακό. Χίλια ευχαριστώ!!


Η ώρα είναι 01:26.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2