Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > Βοήθεια για την εντολή SELECT

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

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

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 06-09-10, 23:03
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 04-07-2010
Μηνύματα: 16
Προεπιλογή Βοήθεια για την εντολή SELECT

Καλησπέρα σε όλους!
Μια απορία:
Σε ερώτημα sql χρησιμοποιώ την εντολή:

SELECT *
FROM myTable

για να εμφανίσω όλα τα πεδία του πίνακα.

Υπάρχει δυνατότητα να εμφανίσω μόνο τα πεδία που το όνομά τους (όχι το περιεχόμενο) αρχίζει από "a"?
Δηλαδή μια εντολή του τύπου

SELECT a* , SELECT a% ;
Απάντηση με παράθεση
  #2  
Παλιά 07-09-10, 10:34
Super Moderator
Όνομα: Αγγελος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 29-04-2010
Μηνύματα: 111
Προεπιλογή

SELECT * FROM MYTABLE WHERE ((onomapediou1.MYTABLE) LIKE *a) and ((onomapediou2.MYTABLE) LIKE *b) klp klp klp
Απάντηση με παράθεση
  #3  
Παλιά 07-09-10, 16:55
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 04-07-2010
Μηνύματα: 16
Προεπιλογή

Ευχαριστώ για την απάντηση!

Δεν την πολυκατάλαβα όμως... Μάλλον δεν είναι αυτό που ζητάω:
Ο πίνακας MYTABLE έχει τα πεδία a1, a2, a3, a4, e1,e2,e3,e4.
Πως θα γίνει το ερώτημα με τη select για να εμφανισθούν μόνο τα πεδια a1,a2,a3,a4?

ΥΓ: Δεν το κάνω ως απλό ερώτημα γιατί τα πεδία του πίνακα σίγουρα ξεκινούν απο "a" αλλά δεν είναι σίγουρα τα υπόλοιπα ψηφία. Μπορεί να είναι πχ a24...
( Τα πεδία του πίνακα μεταβάλλονται από το χρήστη αλλά σίγουρα ξεκινάνε από "a")
Απάντηση με παράθεση
  #4  
Παλιά 07-09-10, 17:24
Super Moderator
Όνομα: Αγγελος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 29-04-2010
Μηνύματα: 111
Προεπιλογή

select mytable.a1, mytable.a2, mytable.a3, mytable.a4,from mytable where ((a2.mytable) like b*)


Το παραπάνω θα σου επιστρέψει τα πεδία a1,a2,a3,a4 ως στήλες εαν το περιεχόμενο του a2 ξεκινάει απο b

Φιλικά, Άγγελος
Απάντηση με παράθεση
  #5  
Παλιά 07-09-10, 18:22
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 04-07-2010
Μηνύματα: 16
Προεπιλογή

Δεν είναι αυτό που ζητάω Άγγελε!
Μάλλον πάλι δεν έκανα σωστά την ερώτηση:

Δεν με ενδιαφέρει το περιεχόμενο αλλά το όνομα των πεδίων
Με τη select mytable.a1, mytable.a2, mytable.a3, mytable.a4 θα πάρω σωστά αποτελέσματα αλλά δεν ξέρω το ακριβές όνομα των πεδίων για το προκαθορίσω! Ξέρω μόνο ότι ξεκινάνε από a!!!
χρειάζομαι κάτι σαν select mytable.a* για να "πιάσω" όλες τα δυνατά ονόματα: a1,a2,a20 κλπ
Απάντηση με παράθεση
  #6  
Παλιά 07-09-10, 19:53
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Γιάννη καλησπέρα!

Δεν μπορείς μέσω SQL να προσθαφαιρείς πεδία σε ερώτημα επιλογής και μάλιστα με κριτήρια.

Ίσως χρειαστεί να επανασχεδιάσεις τη δομή των πινάκων σου έτσι που να μη χρειάζεται
να μεταβάλλονται τα ονόματα πεδίων από το χρήστη(!!!)

Αν δεν υπάρχει κάποια διαφορετική προσέγγιση από μέρους σου, προτείνω τον παρακάτω κώδικα VBA που δημιουργεί το ερώτημα εκ νέου σε κάθε του εκτέλεση:

Κώδικας:
Function Create_Query(TableName As String, QueryName As String, SearchLetters As String)
    WizHook.Key = 51488399
    Dim MyFields, strSQL As String, i As Integer, tbl As String, _
            DynQry As QueryDef, x As String
    MyFields = WizHook.GetColumns(TableName)
    TableName = "[" & TableName & "]"
    MyFields = Split(MyFields, ";")

    For i = 0 To UBound(MyFields) - 1
        If MyFields(i) Like SearchLetters Then strSQL = strSQL & TableName & ".[" & MyFields(i) & "], "
    Next

    If InStr(1, strSQL, "]") Then
        strSQL = Left(strSQL, Len(strSQL) - 2)
        strSQL = "SELECT " & strSQL & " FROM " & TableName
        On Error Resume Next
        x = CurrentDb.QueryDefs(QueryName).Name
        If Err <> 0 Then Err.Clear
        If x <> vbNullString Then DoCmd.DeleteObject acQuery, QueryName
        If Err = "2008" Then
            Err.Clear
            DoCmd.Close acQuery, QueryName, acSaveNo
            DoCmd.DeleteObject acQuery, QueryName
        End If
        On Error GoTo ErrH
        Set DynQry = CurrentDb.CreateQueryDef(QueryName, strSQL)
    'DoCmd.OpenQuery QueryName
    Else
ErrH:
        MsgBox "Can not create the Query!" & IIf(Err <> 0, vbLf & "Error number: " & Err & _
                vbLf & "Error Description : " & Err.Description, vbNullString), vbExclamation
    End If
End Function

Sub test()
    Create_Query "Table1", "Query1", "a*"
End Sub 
Αν χρειαστείς κάτι, ...εδώ είμαστε!


"Table1" = Το όνομα του πίνακα με τα πεδία α1,α2 κτλ.
"Query1" = Το όνομα του ερωτήματος που θα δημιουργηθεί.
"a*" = Το γράμμα ή τα γραμματα που αποτελούν το κριτήριο. (
"*ast" , "*a*" , "a*" κτλ.)

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

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

Τελευταία επεξεργασία από το χρήστη Tasos : 09-09-10 στις 10:37.
Απάντηση με παράθεση
  #7  
Παλιά 07-09-10, 20:04
Super Moderator
Όνομα: Αγγελος
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 29-04-2010
Μηνύματα: 111
Προεπιλογή

Μάλλον λάθος κατάλαβα εγώ...

Η λύση που σου πρότεινε ο Τάσος ίσως σε καλύψει... Προσωπικά δεν μπορώ να σε βοηθήσω, αν και είμαι περίεργος γιατί χρειάζεσαι κάτι τέτοιο...
Πως γίνεται να μην ξέρεις τα πεδία του πίνακά σου? Μήπως η σχεδίασή σου, όπως είπε και ο Τάσος δεν είναι σωστή?

Φιλικά, Άγγελος
Απάντηση με παράθεση
  #8  
Παλιά 07-09-10, 20:52
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 04-07-2010
Μηνύματα: 16
Προεπιλογή

Καλησπέρα Τάσο!
Αν και "ζαλίστηκα" προσπαθώντας να "ερμηνεύσω" τον κώδικά σου, θα κοιτάξω να τον υλοποιήσω!

Φίλε Άγγελε,
Ο πίνακας θα δημιουργείται από διαφορετικά excel και γι αυτό δεν είναι σταθερό το όνομα των πεδίων... προσπαθώ να είναι όσο το δυνατόν παραμετροποιημένη η δημιουργία του!

Ευχαριστώ για τη βοήθεια!!!
Απάντηση με παράθεση
  #9  
Παλιά 07-09-10, 21:12
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική
 
Εγγραφή: 04-07-2010
Μηνύματα: 16
Προεπιλογή

Τάσος THE Best!

Δουλεύει άψογα!


Κάτι τέτοιο είχα στο μυαλό μου!!!!

Ελπίζω να καταφέρω και τα υπόλοιπα που έχω στο μυαλό μου!

Ευχαριστώ και πάλι!!
Απάντηση με παράθεση
  #10  
Παλιά 09-09-10, 03:47
Το avatar του χρήστη nisgia
Super Moderator
Όνομα: Γιάννης
Έκδοση λογισμικού Office: Ms-Office 2007
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 12-10-2009
Περιοχή: Ηγουμενίτσα
Μηνύματα: 161
Προεπιλογή

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

Το ίδιο "τραγούδι" αλλά σε λίγο διαφορετική εκτέλεση:

Κώδικας:
Function GetFlexQuery(TableName As String, _
        Optional QueryName As String, _
        Optional Pattern As String) As Recordset
        
    Dim strSQL As String
    Dim fld As Field
    Dim flds As Fields

    On Error Resume Next
    Set flds = CurrentDb.TableDefs(TableName).OpenRecordset.Fields
    
    If Not flds Is Nothing Then
        strSQL = strSQL & "SELECT [" & flds(0).Name & "]"

        If Len(Pattern) Then
            For Each fld In flds
                If fld.Name Like Pattern Then
                    strSQL = strSQL & ", [" & fld.Name & "]"
                End If
            Next fld
        End If

        strSQL = strSQL & " FROM [" & TableName & "]"
        Debug.Print strSQL

        If Len(QueryName) Then
            With DoCmd
                .Close acQuery, QueryName, acSaveNo
                .DeleteObject acQuery, QueryName
                CurrentDb.CreateQueryDef QueryName, strSQL
                Debug.Print "QueryDef """ & QueryName & """ created!"
                Application.RefreshDatabaseWindow
                '.OpenQuery QueryName
            End With
        End If

        Set GetFlexQuery = CurrentDb.OpenRecordset(strSQL)
    End If
End Function

Sub TestFlexQuery()
    GetFlexQuery "Table1", "Query1", "a*"
    Debug.Print GetFlexQuery("Table1", , "b*").Fields.Count
End Sub
Φίλε συνονόματε, ελπίζω τα ονόματα των πεδίων να μην είναι διευθύνσεις κελιών του EXCEL...!

Τα λέμε!
Γιάννης
__________________
Αν δεν το ρωτούσες, δεν θα το μαθαίναμε ποτέ...!
-----------------------------------------------
Τελικά η γνώση, αντίθετα με ό,τι μέχρι σήμερα πίστευα, είναι η φυλακή της σκέψης.
Όταν η αφετηρία είναι η ελεύθερη σκέψη, δεν χρειάζεται πλέον να φτάσεις πουθενά!
Απάντηση με παράθεση
Απάντηση στο θέμα


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

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


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

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
DelayTime σε εντολή γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 7 05-07-16 21:44
Εντολή Select All γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 5 23-03-16 16:25
Πρόβλημα με κώδικα Select Case Yes/No γιώργοςΚ Access - Ερωτήσεις / Απαντήσεις 3 15-01-15 13:05
[ Ερωτήματα ] Βοήθεια σε ερώτημα SQL (SELECT , WHERE) parara Access - Ερωτήσεις / Απαντήσεις 3 31-01-14 00:11


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