Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Ερωτήματα ] Εντοπισμός λέξης βάσει συγκεκριμένου μήκους

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 21-02-20, 16:26
Όνομα: Γρηγόρης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-03-2013
Μηνύματα: 131
Προεπιλογή Εντοπισμός λέξης βάσει συγκεκριμένου μήκους

Καλησπέρα σε όλη την ομάδα!

Θα ήθελα την βοήθειά σας για το εξής θέμα.

Μέσω ενός ερωτήματος θέλω να απομονώνω μία λέξη με 36 χαρακτήρες (γραμμάτων και αριθμών) που περιέχεται σε ένα πεδίο Text με format "Υπόμνημα" και να εμφανίζεται αυτή η λέξη σε ένα διαφορετικό πεδίο.

Ουσιαστικά πρόκειται για ένα ID που μπορεί να έχει καταχωρηθεί, στην αρχή, στο τέλος του ή σε οποιοδήποτε σημείο κειμένου.

Επειδή δεν υπάρχουν άλλες λέξεις με 36 χαρακτήρες, ο εντοπισμός το κάνει πιο εύκολο.

Υπάρχει κάποιος που θα μπορούσε να με βοηθήσει;

Ευχαριστώ εκ των προτέρων

Γρηγόρης
Απάντηση με παράθεση
  #2  
Παλιά 24-02-20, 11:52
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

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

Έχουμε έναν πίνακα με το όνομα "tbl1" με τα πεδία:

ID (αναγνωριστικό)

και

MemoString (Μεγάλο κείμενο)

Ο κώδικας SQL σε ερώτημα που θα σου επιστρέψει όσες εγγραφές περιέχουν λέξεις μήκους 36 χαρακτήρων μπορεί να είναι ο εξής:

Κώδικας:
SELECT tbl1.ID, ' ' & [MemoString] & ' ' AS MyText
FROM tbl1
WHERE (((' ' & [MemoString] & ' ') Like "* " & String$(36,"?") & " *"));
Τα κριτήρια μπορούν να χρησιμοποιηθούν και σε άλλες συναρτήσεις (DLOOKUP() κλπ.)

Για να εμφανίσουμε μόνο το τμήμα των 36 χαρακτήρων τροποποιούμε τον κώδικα του ερωτήματος έτσι:

Κώδικας:
SELECT tbl1.ID, GetWordFromLengtn([MemoString],36) AS TheWord
FROM tbl1
WHERE (((' ' & [MemoString] & ' ') Like "* " & String$(36,"?") & " *"));
όπου η GetWordFromLengtn() είναι η συνάρτηση VBA που μας επιστρέφει τη λέξη των 36 χαρακτήρων και πρέπει να περαστεί σε μια λειτουργική μονάδα (Module)

Ο κώδικας της συνάρτησης:
Κώδικας:
Public Function GetWordFromLengtn(strWord As String, iLen As Integer) As String
    Dim VarArray() As String
    Dim i As Integer
    strWord = Replace(strWord, "  ", " ")
    VarArray = Split(strWord)
    For i = 0 To UBound(VarArray)
        If Len(Trim(VarArray(i))) = iLen Then
            GetWordFromLengtn = Trim(VarArray(i))
            Exit Function
        End If
    Next
End Function
Ελπίζω να βοήθησα.

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

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 24-02-20 στις 16:43. Αιτία: Διόρθωση κώδικα
Απάντηση με παράθεση
  #3  
Παλιά 24-02-20, 16:09
Όνομα: Γρηγόρης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-03-2013
Μηνύματα: 131
Προεπιλογή

Τάσο θα το δοκιμάσω και εάν έχω κάποιο πρόβλημα θα σε ενημερώσω

Σε ευχαριστώ θερμά!

Γρηγόρης
Απάντηση με παράθεση
  #4  
Παλιά 24-02-20, 16:47
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Να είσαι καλά Γρηγόρη!

Δες τον (τροποποιημένο) κώδικα VBA ξανά αν θέλεις.

Έπρεπε να διορθώσω κάποια λάθη που περιείχε.

Με εκτίμηση

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών
Απάντηση με παράθεση
  #5  
Παλιά 25-02-20, 09:22
Όνομα: Γρηγόρης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-03-2013
Μηνύματα: 131
Προεπιλογή

Τάσο καλημέρα,

Λειτουργεί μία χαρά!

Ευχαριστώ πολύ

Γρηγόρης
Απάντηση με παράθεση
  #6  
Παλιά 26-02-20, 10:15
Όνομα: Γρηγόρης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-03-2013
Μηνύματα: 131
Προεπιλογή

Τάσο καλημέρα,

Σε αρχείο mdb που τρέχει με Access 2003 λειτουργεί σωστά.
Σε αρχείο mdb ή accdb που τρέχει με Access 2013, o κώδικας λειτουργεί σωστά εάν οι λέξεις μήκους 36 χαρακτήρων βρίσκονται στους πρώτους 255 χαρακτήρες.

Εάν το MemoString περιέχει περισσότερους χαρακτήρες δεν μου εντοπίζει την λέξη αυτή,

Θα μπορούσες να το ξαναδείς;

Ευχαριστώ εκ των προτέρων

Γρηγόρης
Απάντηση με παράθεση
  #7  
Παλιά 26-02-20, 11:15
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλημέρα Γρηγόρη!

Θα σου πω τι σκέφτομαι με την ελπίδα ότι θα βοηθήσω.

1. Δεν μπόρεσα να αναπαραγάγω το πρόβλημα σου

2. Με τον κώδικα VBA που χρησιμοποιείται δεν υπάρχει διαφορά στη συμπεριφορά του
προγράμματος ανάμεσα σε εκδόσεις Access 2000 έως και 2019. Να είσαι σίγουρος γι' αυτό.

3. Για να εντοπιστεί το κείμενο των 36 χαρακτήρων, προϋποθέτει διαστήματα στην αρχή και στο τέλος του.

4. Η συνάρτηση λειτουργεί κανονικά ακόμα και σε κείμενο με πάρα πολλές χιλιάδες χαρακτήρες.
Τι συνάρτηση ή τι ερώτημα χρησιμοποιείς που σου επιστρέφει μόνο τους πρώτους 255 χαρακτήρες από το πεδίο μεγάλου κειμένου που τους στέλνεις στη συνέχεια στη συνάρτηση στο όρισμα MemoString;

Σου επισυνάπτω ένα παραδειγματικό αρχείο σε *.accdb.

Αφού το κατεβάσεις άνοιξε το ερώτημα Qry1.

Θα δεις ότι η εγγραφή με το ID 2
που περιέχει 1441 χαρακτήρες εμφανίζεται κανονικά.

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

Τάσος
Συνημμένα Αρχεία
Τύπος Αρχείου: accdb FindLenOfString.accdb (400,0 KB, 12 εμφανίσεις)
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 26-02-20 στις 11:46.
Απάντηση με παράθεση
  #8  
Παλιά 26-02-20, 13:08
Όνομα: Γρηγόρης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2013
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 20-03-2013
Μηνύματα: 131
Προεπιλογή

Τάσο καλησπέρα,

Τελικά το πρόβλημα οφείλεται σε ένα συνδεδεμένο excel σε μορφή xls που μου φέρνει μόνο τους πρώτους 255 χαρακτήρες.

Θα το έλεγξω σε αυτό το σημείο και λογικά δεν θα έχω πρόβλημα.

Ευχαριστώ

Γρηγόρης
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
ΕΥΡΕΣΗ ΔΕΔΟΜΕΝΩΝ ΣΕ ΕΡΩΤΗΜΑ ΣΥΓΚΕΚΡΙΜΕΝΟΥ ΔΙΑΣΤΗΜΑΤΟΣ smasak Access - Ερωτήσεις / Απαντήσεις 1 26-09-18 18:12
Μετατροπή αριθμού σε κείμενο σταθερού μήκους dimgks Access - Ερωτήσεις / Απαντήσεις 2 29-03-18 10:37
[ Ασφάλεια] κλειδωμα συγκεκριμενου πεδιου σε 2ουσα φορμα pakos Access - Ερωτήσεις / Απαντήσεις 1 23-07-17 11:45
Ενημέρωση Συγκεκριμένου Πεδίου σε πίνακα pctechdr Access - Ερωτήσεις / Απαντήσεις 6 18-11-13 20:10
Άνοιγμα συγκεκριμένου αρχείου Pdf Free_Ghost Access - Ερωτήσεις / Απαντήσεις 11 25-09-13 20:29


Η ώρα είναι 14:51.