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

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

kapetang 21-11-19 12:34

Αλέξανδρε ουδείς αλάνθαστος.

Να είσαι καλά και καλή συνέχεια.

alex 25-11-19 23:16

Καλησπέρα Γιώργο!!
Κώδικας:

Private Sub Text2_AfterUpdate()
'Κώδικας για να κάνει ανανέωση το πλαίσιο κειμένου για την αντικατάσταση του (σ) σε (ς) τελικό
    Dim s As String, EndChars As Variant, i As Long, P As Variant
    If Nz(Me.Text2, "") <> "" Then
        s = Trim(Me.Text2) & ""
        'Χαρακτήρες μετά από μία λέξη
        EndChars = Array(",", ".", ";", ":", "·", " ")
        For i = 0 To UBound(EndChars)
            s = Replace(s, "σ" & EndChars(i), "s" & EndChars(i))
        Next
        Me.Text2 = s
    End If
 
    If Nz(Me.Text2, "") <> "" Then
        P = Split(Trim(Me.Text2), ".")
        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
        Me.Text2 = Join(P, ". ")
        'SmallToCapital = Join(P, ". ")
        ''Replace(UCase([Textbox2]);"ς";"Σ")
    End If
End Sub

Στη παραπάνω συνάρτηση πως μπορεί να εφαρμοστεί(να ενσωματωθεί στη ρουτίνα και όχι στο ερώτημα) ο τύπος συνάρτησης του ερωτήματος ώστε να μετατρέπονται σε κεφαλαία.Ο τύπος συνάρτησης ήταν: AllCapital: Αντικατάσταση(UCase([Text2]);"ς";"Σ")

kapetang 26-11-19 11:13

Καλημέρα.

Δε μπορώ να καταλάβω τη λογική της ενσωμάτωσης.

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

Γιατί να προηγηθούν άλλες άχρηστες μετατροπές;

alex 26-11-19 15:37

Σωστά έχεις δίκαιο γιατί να κάνει αυτά τα προηγούμενα.Οπότε για τα κεφαλαία τι κώδικα θα χρησιμοποιήσω;Ο λόγος που θέλω να κάνω αυτό είναι ότι σε μια μετατροπή κειμένου να κάνει αντικατάσταση το πρώτο γράμμα μετά από τελεία και κενό που χρησιμοποιώ σε μεταγλώττιση braille με τον προηγούμενο κώδικα το κάνει αλλά όταν υπάρχουν ονόματα ενδιάμεσα δεν θα το αντικαταστήσει.ΠΧ Αγγέλης Αλέξανδρος του Κωνσταντίνου. Το Α του Αλέξανδρος δεν το μεταφράζει ούτε το Κωνσταντίνος. Οπότε καταφεύγω όλα σε κεφαλαία και λύνεται το ζητούμενο. Επίσης στο κ.λ.π όπως μου είχες πει παλιά το πρώτο θα είναι κ.Λ.Π πάλι θα υπάρχει πρόβλημα.Μόνο εάν υπάρχει συνθήκη που αρχικά εξετάζει την περίπτωση που βρει το (κ.λ.π) να το κάνει Κ.Λ.Π.

kapetang 26-11-19 17:30

Στον κώδικά σου άφησα μόνο μία γραμμή:

Κώδικας:

Private Sub Text2_AfterUpdate()
    Me.Text2=Replace(UCase(Me.Text2),"ς","Σ")
End Sub


alex 26-11-19 18:53

Οπότε μένει η ίδια συνάρτηση. Ευχαριστώ και πολύ Γιώργο.

Tasos 26-11-19 19:14

Καλησπέρα σε όλους!

Αν δεν επηρεάζονται κάποιες δυνατότητες του έργου μπορεί κανείς με απλή μορφοποίηση του πεδίου να αλλάξει τη μορφή του πεδίου ώστε να εμφανίζει κεφαλαία.

Πως;
Στις ιδιότητες του πεδίου και στην καρτέλα "μορφή" επιλέγουμε "μορφή" και δίνουμε την τιμή ">" χωρίς εισαγωγικά.

Καλή συνέχεια!

Τάσος

alex 26-11-19 21:42

Ευχαριστώ Τάσο, δεν επηρεάζεται το έργο είτε με τη συνάρτηση είτε με τις ιδιότητες του πεδίου.Δουλεύει άψογα. Να είσαι καλά με τις παράξενες λύσεις σου.Αλλά και ο Γιώργος για τις γνώσεις και τις λύσεις που δίνει.
Χαιρτετίσματα Τάσο!!

kapetang 26-11-19 22:44

Να είσαι καλά Αλέξανδρε και καλή συνέχεια.

Τάσο μας έλειψες.

Tasos 27-11-19 11:28

Γεια σου Γιώργο μου , γεια σου Αλέξη μου, καλημέρα σε όλους!

Να είστε καλά!

Θα προσπαθήσω να επανενταχτώ στην ομάδα μας και να προσφέρω κι εγώ με τη σειρά μου όσο μπορώ.

Καλή συνέχεια σε όλους!
Με εκτίμηση

Τάσος


Η ώρα είναι 10:09.

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


Search Engine Optimization by vBSEO 3.3.2