Κώδικας VBA - Access

Συζητήσεις για την τοπική βάση δεδομένων Access της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Meteora
Δημοσιεύσεις: 13
Εγγραφή: 21 Νοέμ 2008 19:22
Τοποθεσία: Θεσσαλονίκη

Κώδικας VBA - Access

Δημοσίευση από Meteora » 08 Δεκ 2008 19:32

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

Ασχολήθηκα με το ζήτημα της διαγραφής της τρέχουσας εγγραφής σε φόρμα και ως αποτέλεσμα σας παραδίνω δυο ομάδες εντολών-κώδικες
Ο Πρώτος Τρόπος - ΔΟΥΛΕΥΕΙ!

Private Sub Εντολή12_Click()

DoCmd.SetWarnings False ' Απενεργοποίηση του γνωστού μηνύματος της Access
If Me.NewRecord = True Then Exit Sub ' Αντίδραση ρουτίνας αν η νέα εγγραφή ειναι η τρέχουσα
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdDeleteRecord
DoCmd.SetWarnings True 'ενεργοποίηση του μηνύματος ...
End Sub

Ο Δεύτερος Τρόπος - ΔΕΝ ΔΟΥΛΕΥΕΙ !

Private Sub Εντολή13_Click()
Dim strSQL As String
Dim fla As Integer
fla = [id] ' id = το πρωτεύον κλειδί (αυτόματη αρίθμηση)
strSQL = "Delete * From t2 where [id] like fla" 't2 = πίνακας
DoCmd.RunSQL strSQL
MsgBox "Διεγράφει!", vbInformation, "Πράξη διαγραφής"
End Sub

Καθώς εκτελείται ο κώδικας, η Access ζητά την τιμή της παραμέτρου fla. Το περίεργο ειναι οτι την διαβάζει και την ...ξέρει.(παράθυρο immediate)

Παρακαλώ θερμά, όποιος φίλος (-η) έχει γνώση - διάθεση και χρόνο ας βοηθήσει. Εκ των προτέρων ευχαριστώ.

Με εκτίμηση σε όλους σας
Meteora

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Κώδικας VBA - Access

Δημοσίευση από kon73 » 08 Δεκ 2008 21:55

Κώδικας: Επιλογή όλων

       strSQL = "Delete * From t2 where  [id] like fla"                   
       DoCmd.RunSQL strSQL
Αλλάζεις το strSQL = "Delete * From t2 where [id] like fla"
με strSQL = "Delete * From t2 where "& [id] & " like fla"

Και λογικά θα σου δουλέψει. Δηλαδή για να δει το String την μεταβλητή που έχει το ID και όχι καθευτού την τιμή [ID] σπάμε το string και το προσθέτουμε πάλι με το Like Fla.

Φιλικά


kon73
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εικόνα

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Κώδικας VBA - Access

Δημοσίευση από dva_dev » 09 Δεκ 2008 01:54

Tο like δουλεύει με strings και όχι με αριθμούς.
Αφού το id (ή όποιο είναι το primary key) είναι αριθμός και η τιμή που θα έχεις είναι μόνο μία και θέλεις να σβήσεις την τρέχουσα εγγραφή η καλύτερη επιλογή είναι το =.

Δοκίμασε λοιπόν κάτι του στύλ

Κώδικας: Επιλογή όλων

strSQL = "Delete * From t2 where [id] = " & CStr(fla)
DoCmd.RunSQL strSQL

Άβαταρ μέλους
Meteora
Δημοσιεύσεις: 13
Εγγραφή: 21 Νοέμ 2008 19:22
Τοποθεσία: Θεσσαλονίκη

Κώδικας VBA - Access

Δημοσίευση από Meteora » 09 Δεκ 2008 10:01

Καλημέρα φίλοι μου

...Σας ευχαριστώ και τους δυο, για τη καταλυτική σας συμμετοχή εδώ και όχι μόνο...εδώ! (Δηλαδή ...παντού!)

Τελικά ο κώδικας δουλεύει με την παρακάτω μορφή :

Private Sub Εντολή14_Click()

DoCmd.SetWarnings False
Dim strSQL As String
Dim fla As Integer
fla = [id]
strSQL = "Delete * From t2 where [id]= " & CStr(fla)
DoCmd.RunSQL strSQL
Me.Requery
MsgBox "Διεγράφει !", vbInformation, "Πράξη διαγραφής"
DoCmd.SetWarnings True
End Sub

Όπως φαίνεται υπάρχουν οι εξής -πρόσθετες- παρατηρήσεις
(α) Απαιτείται το δίδυμο των εντολών που απενεργοποιούν και ενεργοποιούν την εξ' ορισμού προειδοποίηση της Access σε περιπτώσεις διαγραφής.
(β) Κρίνεται απαραίτητη η εντολή me.Requery, η οποία ενημερώνει την φόρμα απο την πηγή των δεδομένων της
Φυσικά πιστεύω οτι μπορούν να γίνουν και άλλες βελτιώσεις.

Θερμά ευχαριστώ τους δυο φίλους

Με εκτίμηση

Meteora

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Κώδικας VBA - Access

Δημοσίευση από kon73 » 09 Δεκ 2008 10:29

Βασικό μου λάθος

Το strSQL = "Delete * From t2 where "& [id] & " like fla"
γίνεται σε
strSQL = "Delete * From t2 where [id] like " & fla
Καθότι το fla είναι η μεταβλητή. Δικό μου λάθος.
Όσο για το Like συνηθίζεται για string όμως δουλεύει και για αριθμούς απλά για αριθμούς το Like ισοδυναμεί με =
Το Like σε string δίνει αυτό που έχει η μεταβλητή fla (Αν ήταν string) και όσα ID εμπεριέχουν το Fla αν δωθεί με "Like *" & FLA & "*" να ξεκινάει "Like *" & FLA ή να τελειώνει "Like " & FLA & "*" . Όλα αυτά για Strings.
Σε αριθμούς δίνει μόνο όσα είναι επακριβώς δηλαδή σαν το = και όχι να εμπεριέχουν το Fla.

Φιλικά

Kon73
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εικόνα

Άβαταρ μέλους
Meteora
Δημοσιεύσεις: 13
Εγγραφή: 21 Νοέμ 2008 19:22
Τοποθεσία: Θεσσαλονίκη

Κώδικας VBA - Access

Δημοσίευση από Meteora » 09 Δεκ 2008 16:38

Πράγματι Kon73! με την αλλαγή σε :

strSQL = "Delete * From t2 where [id] like " & fla , όλα ειναι εντάξει

Ευχαριστώ. Καλό απόγευμα.

Με εκτίμηση

Meteora

Απάντηση

Επιστροφή στο “MS Access”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες