Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Κώδικας ερωτήματος update σε VBA (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1639-kodikas-erotimatos-update-se-visual-basic-applications.html)

sakis297 12-02-12 18:37

Κώδικας ερωτήματος update σε VBA
 
Γεια σας παιδιά!!!
Έχω φτιάξει το παρακάτω ερώτημα.
UPDATE Paraggelies INNER JOIN Periexomena_Paraggelias ON Paraggelies.code = Periexomena_Paraggelias.code SET Periexomena_Paraggelias.need_call = True
WHERE (((Paraggelies.code)=[Forms].[Add_Paraggelies_final].[code]) AND ((Paraggelies.need_call)=True));

Επιπλέον έχω φτιάξει μία μακροεντολή που εκτελεί το ερώτημα αυτό και η μακροεντολή εκτελείται στο after_update ενός πεδίου. Λειτουργεί μια χαρά.

Θα ήθελα λοιπόν, αντί της μακροεντολής, να γράψω κώδικα στο after_update του πεδίου.
Μπορεί λοιπόν κάποιος να με βοηθήσει στο να γράψω τον παραπάνω κώδικα SQL σε VBA;

Tasos 12-02-12 20:40

Σάκη υποθέτω ότι το πεδίο [Forms].[Add_Paraggelies_final].[code] βρίσκεται στη φόρμα που
υπάρχει και το πεδίο που θέλεις να χρησιμοποιήσεις κώδικα VBA στο συμβάν "μετά την ενημέρωση".

Έστω ότι το πεδίο εχει το όνομα myTextBox.

Μπορείς να χρησιμοποιήσεις το παρακάτω παράδειγμα:

Κώδικας:

Private Sub myTextBox_AfterUpdate()
    Dim strSQL As String
    strSQL = "UPDATE Paraggelies INNER JOIN Periexomena_Paraggelias ON Paraggelies.code =" & _
          " Periexomena_Paraggelias.code SET Periexomena_Paraggelias.need_call = True"
    strSQL = strSQL & " WHERE Paraggelies.code =" & Me.code & " AND Paraggelies.need_call = True"
    CurrentDb.Execute strSQL
End Sub

Αυτά όσον αφορά τη σύνταξη.

Το αν λειτουργήσει ή όχι εξαρτάται και από τη σχεδίαση της βάσης.

Φιλικά

Τάσος

sakis297 12-02-12 21:44

Τάσο κατ'αρχάς σε ευχαριστώ για τη βοήθειά σου.
Δυστυχώς δε δούλεψε.
Στη φόρμα Add_Paraggelies_final έχω βάλει ένα κουμπί Update το οποίο εκτελεί το σχετικό ερώτημα. Το κουμπί λειτουργεί κανονικά, όμως παρατήρησα ότι τα αποτελέσματα του ερωτήματος δε φαίνονται αμέσως στη δευτερεύουσα φόρμα. Τι εννοώ...Το ερώτημα κάνει update στο πεδίο need_call, το οποίο βρίσκεται στη δευτερεύουσα φόρμα. Τα αποτελέσματα φαίνονται, αν φύγω από την εγγραφή και ξαναγυρίσω σε αυτήν.
Το γεγονός αυτό, μαζί με το γεγονός ότι ο κώδικας που μου έδωσες δε δούλεψε, με οδήγησε στο να βάλω στο after_update του need_call (της κανονικής φόρμας και όχι της δευτερεύουσας φόρμας) τον εξής κώδικα
Private Sub need_call_AfterUpdate()
Forms.Add_Periexomena_Paraggelias_deyt.need_call = IIf(Me.need_call = True, True, False)
End Sub

Απ' ό,τι καταλαβαίνω το Forms.Add_Periexomena_Paraggelias_deyt.need_call δεν είναι ο σωστός τρόπος για να προσπελάσω το need_call της δευτερεύουσας φόρμας.
Πιθανολογώ λοιπόν, ότι αν γράψω σωστά τον παραπάνω κώδικα, θα λυθεί το πρόβλημά μου.
Εδώ είναι το παράδειγμα http://dl.dropbox.com/u/58056089/example.mdb

sakis297 12-02-12 21:47

Βασικά σε περίπτωση που το need_call == false,τότε δε θέλω να γίνεται τίποτα.
Άρα θα έπρεπε να γράψω τον κώδικα κάπως έτσι.
Forms.Add_Periexomena_Paraggelias_deyt.need_call = IIf(Me.need_call = True, True)

Tasos 13-02-12 05:09

Σάκη, ο κώδικας που σου έδωσα είναι μια μετάφραση του SQL του μηνύματος σου σε VBA.
Όπως προανέφερα, το αν λειτουργήσει ή όχι εξαρτάται και από τη σχεδίαση της βάσης.

Τώρα όμως που βλέπω τη βάση σου, δεν μπορώ να καταλάβω γιατί δεν πατάς το checkbox
κατευθείαν στην υποφόρμα;

Πες μας τι ακριβώς θέλεις να επιτύχεις.

Φιλικά

Τάσος

sakis297 13-02-12 10:19

Λογική η απορία σου.
Αυτό που θέλω είναι το εξής: Αν για παράδειγμα στην υποφόρμα έχω 20 εγγραφές και θέλω και στις 20 το need_call να είναι true, δε θέλω να κουράζομαι και να το τσεκάρω και στις 20 εγγραφές, αλλά πατώντας ένα κουμπί ή τσεκάρωντας το need_call της κανονικής φόρμας να γίνονται αυτόματα όλα τα need_call της υποφόρμας true.

Tasos 13-02-12 11:34

Στο AfterUpdate του στοιχείου 'need_call' πέρασε το παρακάτω:

Private Sub need_call_AfterUpdate()
Dim strSQL As String
strSQL = "UPDATE Periexomena_Paraggelias SET Periexomena_Paraggelias.need_call = " & _
Nz(Me.need_call) & " WHERE [code] =" & Nz(Me.code)
CurrentDb.Execute strSQL
Me.Add_Periexomena_Paraggelias_deyt.Form.Refresh
End Sub

Μπορείς ακόμα να μεταφέρεις το παραπάνω στοιχείο στην υποφόρμα στη θέση της ετικέτας 'Θέλει Υπενθύμιση' (στην κεφαλίδα της υποφόρμας) και να του αντιστοιχίσεις το παρακάτω:

Private Sub need_call_AfterUpdate()
Dim strSQL As String
strSQL = "UPDATE Periexomena_Paraggelias SET Periexomena_Paraggelias.need_call = " & _
Nz(Me.need_call) & " WHERE [code] =" & Nz(Me.code)
CurrentDb.Execute strSQL
Me.Refresh
End Sub

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

Τάσος

sakis297 13-02-12 13:22

Τάσο δουλεύει άψογα!!!
Έμαθα πολλά από τον κώδικα που μου έστειλες!!!
Σ' ευχαριστώ πολύ!!!

sakis297 13-02-12 17:40

Τάσο, συγγνώμη που επανέρχομαι και πάλι, αλλά εντόπισα ένα λάθος.
Το ερώτημα Update ήθελα να εκτελείται εφόσον το need_call = true. Αν είναι false δηλαδή, δε θα ήθελα να επηρεάζει τα need_calls της υποφόρμας.

Γι'αυτό λοιπόν έβαλα τον εξής κώδικα
Dim strSQL As String
strSQL = "UPDATE Periexomena_Paraggelias SET Periexomena_Paraggelias.need_call = " & _
Nz(Me.need_call) & " WHERE [code] =" & Nz(Me.code)
If Me.need_call = True Then
CurrentDb.Execute strSQL
End If
Me.Refresh

Ο λόγος που χρησιμοποίησα την If είναι γιατί δεν μπορούσα στο Where να βάλω δεύτερο κριτήριο.
Έγραφα λοιπόν το εξής.
Dim strSQL As String
strSQL = "UPDATE Periexomena_Paraggelias SET Periexomena_Paraggelias.need_call = " & _
Nz(Me.need_call) & " WHERE [code] =" & Nz(Me.code) and Me.need_call = true
CurrentDb.Execute strSQL
Me.Refresh
End Sub

Αυτό που ήθελα να κάνω το πέτυχα με If, αλλά θα ήθελα να ξέρω πως γράφω σωστά τον παραπάνω κώδικα.

Meteora 13-02-12 18:14

Καλησπέρα

Δοκίμασε το:

...Nz(Me.need_call) & " WHERE [code] =" & Nz(Me.code) & " and Me.need_call = true"

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

Με εκτίμηση
Νίκος Δ.

sakis297 13-02-12 18:39

Δυστυχώς δε δουλεύει.
Δεν πειράζει, δε θέλω να σας κουράζω για θέμα στο οποίο βρήκα λύση.
Ευχαριστώ και πάλι για τη βοήθεια.

Meteora 13-02-12 18:42

Πριν το χρωματισμένο and υπάρχει κενό...


Η ώρα είναι 10:01.

Ms-Office.gr - ©2000 - 2026, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2