Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Μετατροπή ελληνικών χαρακτήρων σε λατινικούς

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 13-03-11, 11:45
Όνομα: Χρήστος Φ.
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-12-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 498
Προεπιλογή Μετατροπή ελληνικών χαρακτήρων σε λατινικούς

Γεια σας..
Αναρωτιέμαι αν υπάρχει τρόπος για να γίνει το εξής:
Από ένα ΟνοματΕπώνυμο να προκύπτει ένα λατινικό username.
Ίσως με τα 5 πρώτα γράμματα του Επωνύμου + το πρώτο γράμμα του Ονόματος + έναν τυχαίο μοναδικό αριθμό.
Θα υπάρχει πρόβλεψη σύμφωνα με τα παρακάτω;

Ελλ - Λατ
====== ====== ======

Α --> Α , K --> K , Τ --> Τ
Β --> V, Λ --> L , Υ --> Y
Γ --> G, Μ --> M , Φ --> F
Δ --> D, Ν --> N , Χ --> CH
Ε --> E, Ξ --> X , Ψ --> PS
Ζ --> Z, Ο --> O , Ω --> O
Η --> I, Π --> P,
Θ --> TH , Ρ --> R,
Ι --> I , Σ --> S,

Δίφθογγοι
------------
Ελλ - Λατ
=======

AI --> AI
AY --> AV (*), AF (**)
OI --> OI
OY --> OU
EI --> EI
EY --> EV (*), EF (**)


Διπλά
-------
Ελλ - Λατ
=======

ΜΠ --> B (στην αρχή ή στο τέλος)
ΜΠ --> MP (ενδιάμεσα)
ΝΤ --> NT
ΤΣ --> TS
ΤZ --> TZ
ΓΓ --> NG
ΓΚ --> GK
ΗΥ --> IY (*), IF (**)

(*) πριν από Β, Γ, Δ, Ζ, Λ, Μ, Ν, Ρ και τα φωνήεντα
(**) πριν από Θ, Κ, Ξ, Π, Σ, Τ, Φ, Χ, Ψ και στο τέλος λέξης.
Απάντηση με παράθεση
  #2  
Παλιά 14-03-11, 00:11
Το avatar του χρήστη editolis
Super Moderator
Όνομα: Τολης
Έκδοση λογισμικού Office: Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 02-01-2010
Περιοχή: ATHENS-GREECE
Μηνύματα: 180
Arrow

Δες και ενα αλλο παραδειγμα που νομιζω οτι κανει την δουλεια σου...

Καλη συνεχεια...
Συνημμένα Αρχεία
Τύπος Αρχείου: mdb AccdbReplace.mdb (352,0 KB, 132 εμφανίσεις)
Απάντηση με παράθεση
  #3  
Παλιά 14-03-11, 00:22
Όνομα: Χρήστος Φ.
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-12-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 498
Προεπιλογή

Σ' ευχαριστώ για την ανταπόκριση.
Θα δοκιμάσω.
Απάντηση με παράθεση
  #4  
Παλιά 14-03-11, 00:30
Όνομα: Χρήστος Φ.
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-12-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 498
Προεπιλογή

Δεν ξέρω πως να το προσαρμόσω ώστε η μεττροπή να γίνεται σε ερώτημα.
Τρέχοντας δηλαδή το ερώτημα σ' ένα υπολογιζόμενο πεδίο να βγαίνει το λατινικό username.
Απάντηση με παράθεση
  #5  
Παλιά 16-03-11, 09:23
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.030
Προεπιλογή

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

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

Τελικά, μετά από αρκετές διορθώσεις (πάντα με τη βοήθεια σου) έχω να προτείνω το
παρακάτω:

Συνάρτηση σε πεδίο Ερωτήματος ή φόρμας:

Transliterate(Nz([Πεδίο];"");Πληθος Χαρακτήρων;"Διαχωριστικός Χαρακτήρας")

Η συνάρτηση VBA:

Κώδικας:
Option Explicit

Public Const EVChars = "914,915,916,918,924,925,929,913,917,919,921,927,933,937"
Public Const EFChars = "920,922,926,928,931,932,934,935"
Public Const DummyChar = "?"

'Autor: Tassos Filoxenidis - www.ms-office.gr/forum

Public Function Transliterate(ByRef strChars As String, _
                              Optional ByVal strCharslength As Integer, _
                              Optional ByRef AutoCompleteChar As String) As String

    Dim i As Integer, strChar As String, OldCharsLen As Integer, _
        strCharsLen As Integer, SecChar As Integer
        
    If Trim(AutoCompleteChar) = vbNullString Then AutoCompleteChar = DummyChar
    strChars = ReplaceTones(strChars)
    
    OldCharsLen = Len(strChars)

    If strCharslength = 0 Then strCharslength = OldCharsLen
    
    If Len(strChars) < strCharslength Then
        strChars = strChars & String(strCharslength - Len(strChars), AutoCompleteChar)
    End If
    strCharsLen = Len(strChars)

    For i = 1 To strCharsLen
        Select Case AscW(Mid(strChars, i, 1))

        Case 913    'Alpha
            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 933 Then
                    If i + 2 > OldCharsLen Then
                        SecChar = 0
                    Else
                        SecChar = AscW(Mid(strChars, i + 2, 1))
                    End If
                    If InStr(1, EVChars, SecChar) > 0 Then
                        strChar = strChar & "AV"
                        i = i + 1
                    ElseIf InStr(1, EFChars, SecChar) > 0 Or Right(strChars, 1) = SecChar Then
                        strChar = strChar & "AF"
                        i = i + 1
                    Else
                        strChar = strChar & "A"
                    End If
                Else
                    strChar = strChar & "A"
                End If
            Else
                strChar = strChar & "A"
            End If

        Case 914    'Beta
            strChar = strChar & "B"

        Case 915    'Gama
            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 915 Then
                    strChar = strChar & "NG"
                    i = i + 1
                ElseIf AscW(Mid(strChars, i + 1, 1)) = 922 Then
                    strChar = strChar & "GK"
                    i = i + 1
                Else
                    strChar = strChar & "G"
                End If
            Else
                strChar = strChar & "G"
            End If

        Case 916    'Delta
            strChar = strChar & "D"

        Case 917    'Epsilon

            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 933 Then
                    If i + 2 > OldCharsLen Then
                        SecChar = 0
                    Else
                        SecChar = AscW(Mid(strChars, i + 2, 1))
                    End If
                    If InStr(1, EVChars, SecChar) > 0 Then
                        strChar = strChar & "EV"
                        i = i + 1
                    ElseIf InStr(1, EFChars, SecChar) > 0 Or Right(strChars, 1) = SecChar Then
                        strChar = strChar & "EF"
                        i = i + 1
                    Else
                        strChar = strChar & "E"
                    End If

                Else
                    strChar = strChar & "E"
                End If
            Else
                strChar = strChar & "E"
            End If

        Case 918    'Zeta
            strChar = strChar & "Z"

        Case 919    'Eta

            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 933 Then
                    If i + 2 > OldCharsLen Then
                        SecChar = 0
                    Else
                        SecChar = AscW(Mid(strChars, i + 2, 1))
                    End If
                    If InStr(1, EVChars, SecChar) > 0 Then
                        strChar = strChar & "IY"
                        i = i + 1
                    ElseIf InStr(1, EFChars, SecChar) > 0 Or Right(strChars, 1) = SecChar Then
                        strChar = strChar & "IF"
                        i = i + 1
                    Else
                        strChar = strChar & "I"
                    End If
                Else
                    strChar = strChar & "I"
                End If
            Else
                strChar = strChar & "I"
            End If

        Case 920    'Theta
            strChar = strChar & "TH"

        Case 921    'Iota
            strChar = strChar & "I"

        Case 922    'Kappa
            strChar = strChar & "K"

        Case 923    'Lambda
            strChar = strChar & "L"

        Case 924    'Mu
            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 928 Then
                    If i > 1 And i + 1 < OldCharsLen Then
                        strChar = strChar & "MP"
                        i = i + 1

                    Else
                        strChar = strChar & "B"
                        i = i + 1
                    End If
                Else
                    strChar = strChar & "M"
                End If
            Else
                strChar = strChar & "Ì"
            End If

        Case 925    'Nu
            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 932 Then
                    strChar = strChar & "NT"
                    i = i + 1
                Else
                    strChar = strChar & "N"
                End If
            Else
                strChar = strChar & "Í"
            End If

        Case 926    'Xi
            strChar = strChar & "X"

        Case 927    'Omicron
            If i < strCharslength Then
                If AscW(Mid(strChars, i + 1, 1)) = 933 Then
                    strChar = strChar & "OU"
                    i = i + 1
                Else
                    strChar = strChar & "O"
                End If
            Else
                strChar = strChar & "O"
            End If

        Case 928    'Pi
            strChar = strChar & "P"

        Case 929    'Rho
            strChar = strChar & "R"

        Case 931    'Sigma
            strChar = strChar & "S"

        Case 932    'Tau
            strChar = strChar & "T"

        Case 933    'Upsilon
            strChar = strChar & "Y"

        Case 934    'Phi
            strChar = strChar & "F"

        Case 935    'Chi
            strChar = strChar & "CH"
            If Len(strChar) >= strCharslength Then strCharslength = strCharslength + 1
        Case 936    'Psi
            strChar = strChar & "PS"
            If Len(strChar) >= strCharslength Then strCharslength = strCharslength + 1
        Case 937    'Omega
            strChar = strChar & "O"

        Case Else
            strChar = strChar & Mid(strChars, i, 1)
        End Select
        If Len(strChar) >= strCharslength Then
            '            strCharslength = strInitialLength
            Exit For
        End If
    Next
    If AutoCompleteChar <> DummyChar Then
        If Len(strChar) < strCharslength Then
            strChar = strChar & String(strCharslength - Len(strChar), AutoCompleteChar)
        End If
    Else
        strChar = Replace(strChar, DummyChar, vbNullString)
    End If
    Transliterate = strChar
End Function

Function ReplaceTones(strChar As String) As String
    ReplaceTones = UCase$(strChar)
    ReplaceTones = Replace(ReplaceTones, ChrW$(902), ChrW$(913))
    ReplaceTones = Replace(ReplaceTones, ChrW$(904), ChrW$(917))
    ReplaceTones = Replace(ReplaceTones, ChrW$(906), ChrW$(921))
    ReplaceTones = Replace(ReplaceTones, ChrW$(938), ChrW$(921))
    ReplaceTones = Replace(ReplaceTones, ChrW$(905), ChrW$(919))
    ReplaceTones = Replace(ReplaceTones, ChrW$(910), ChrW$(933))
    ReplaceTones = Replace(ReplaceTones, ChrW$(939), ChrW$(933))
    ReplaceTones = Replace(ReplaceTones, ChrW$(908), ChrW$(927))
    ReplaceTones = Replace(ReplaceTones, ChrW$(911), ChrW$(937))
    ReplaceTones = Replace(ReplaceTones, ChrW$(962), ChrW$(931))
End Function
Έτσι θα μπορείς να χρησιμοποιήσεις τη συνάρτηση αυτή για να συγχωνεύσεις ένα ή περισσότερα πεδία δίνοντας τα ορίσματα: Πλήθος Χαρακτήρων και "Διαχωριστικός Χαρακτήρας". Μπορείς και να τα παραλείψεις αν χρειαστεί.

Παράδειγμα σε Πεδίο Ερωτήματος:

UsrName: Transliterate(Nz([sName];"");1) & Transliterate(Nz([Surname];"");5) & "-" & [ID]

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


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

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #6  
Παλιά 17-03-11, 15:27
Όνομα: Χρήστος Φ.
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-12-2010
Περιοχή: Θεσσαλονίκη
Μηνύματα: 498
Προεπιλογή

Σ' ευχαριστώ πολύ Τάσο, για την απλόχερη βοήθεια.
Τα λέμε... :)
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[Excel07] Αναζήτηση χαρακτήρων George R Excel - Ερωτήσεις / Απαντήσεις 8 15-06-16 10:25
[Συναρτήσεις] Εύρεση μη Ελληνικών χαρακτήρων σε κελί Οδυσσέας Excel - Ερωτήσεις / Απαντήσεις 5 15-04-13 16:35
[Συναρτήσεις] Μετατροπή ελληνικών γραμμάτων σε αντίστοιχους αριθμούς comsup Excel - Ερωτήσεις / Απαντήσεις 17 14-03-13 21:07
Μεταγραφή Ελληνικών λέξεων με Λατινικούς χαρακτήρες. ΚΩΣΤΑΣ Access - Ερωτήσεις / Απαντήσεις 0 07-06-11 18:32
Αντικατάσταση Χαρακτήρων Σπύρος Access - Ερωτήσεις / Απαντήσεις 2 21-07-10 22:40


Η ώρα είναι 04:41.