PDA

Επιστροφή στο Forum : Parameter query με drop down



stako
05-11-04, 11:52
Καλημέρα σε όλους!

Δεν ξέρω αν αυτό είναι το καταλληλότερο μέρος για αυτό το post αλλά έχω απελπιστεί!

Γνωρίζει κανείς πως μπορώ να φτιάξω σε Access ένα parameter query το οποίο όταν θα εμφανίζει το dialog για να βάλει τα στοιχεία που θέλει ο χρήστης, να εμφανίζει τις διαθέσιμες επιλογές με ένα drop down?

Δηλαδή έστω πχ ένας πίνακας με CustomerID, Name, Surname, Address. Έστω υπάρχουν 4 πελάτες, aaa, bbb, ccc, ddd. Έχουμε ένα query που έχει παράμετρο μόνο στο Name του πίνακα. Κανονικά ο χρήστης θα έπρεπε να γράψει στο dialog μόλις τρέξει το query ένα από τα ονόματα (aaa, bbb κτλ) για να του βγάλει αποτέλεσμα. Υπάρχει τρόπος αντί να γράψει να του βγάλει όλες τις διαθέσιμες επιλογές μέσω ενός drop down?

Ευχαριστώ!

yiapap
05-11-04, 13:17
Όχι, δεν υπάρχει τρόπος.
Η μόνη λύση είναι να κάνεις μια μικρή φόρμα με ένα drop-down και να αλλάξεις το query από parameter σε κανονικό με reference στο combo (υπάρχει και τρόπος να προωθήσεις την παράμετρο αλλά είναι πιο σύνθετη).

Έστω Form1 η φόρμα, Combo1 το Combo
Έστω Table1 ο πίνακας

Στο Combo1 βάζεις Rowsource= "SELECT Name From Table1 ORDER BY Name"
Στο query προσθέτεις ένα WHERE δλδ
SELECT * FROM Table1 WHERE Name=Forms!Form1!Combo1

kubiak
05-11-04, 13:36
Η λύση πρέπει να είναι μόνο με φόρμα όπως είπε ο yiapap...

stako
08-11-04, 13:37
Ok, ευχαριστώ για τις απαντήσεις, νομίζω το κατάφερα αυτο! :)

Μια άλλη ερώτηση, γίνεται όταν πατάω ένα button σε μια φόρμα και ανοίγει μια άλλη φόρμα να κλείνει αυτόματα η προηγούμενη???

yiapap
08-11-04, 13:42
DoCmd.OpenForm "Form2"
DoCmd.Close acForm, Me.Name

(αν θυμάμαι καλά)

Επίσης πολύ χρήσιμη ρουτίνα είναι η ρουτίνα ελέγχου για το αν κάποια φόρμα είναι ήδη ανοιχτή:

Function IsLoaded(ByVal strObjectName As String, Optional strType As Integer = acForm) As Boolean
' Pre: strObjectName = Name of object to check
' strType = type of object (acForm,acQuery,acReport) OPTIONAL Default=acForm
' Post:True if object is open/loaded

Const conObjStateClosed = 0

If SysCmd(acSysCmdGetObjectState, strType, strObjectName) <> conObjStateClosed Then
IsLoaded = True
End If

End Function

παράδειγμα χρήσης:
If IsLoaded("Form1") Then DoCmd.Close acForm,"Form1"
If IsLoaded("Query1",acQuery) Then DoCmd.Close acQuery,"Query1"

@ ADSLgr.com All rights reserved.