| Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
![]() |
| | Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
|
#1
| |||
| |||
|
Καλημέρα σας ...Απο ένα σύνθετο πλαίσιο αποδίδω τιμή σε μεταβλητή matima = combo11.Column(1) π.χ matima = "ΦΥΣΙΚΗ", matima = "ΜΑΘΗΜΑΤΙΚΑ",... Οι λέξεις ΦΥΣΙΚΗ, ΜΑΘΗΜΑΤΙΚΑ,... αποτελούν πεδία ενός πίνακα με το όνομα "ΒΑΘΜΟΙ". Σε μια θέση της εφαρμογής γράφω: .......... Dim dbsContacts As Database Dim rstTypes As DAO.Recordset Set dbsContacts = CurrentDb Set rstTypes = dbsContacts.OpenRecordset("ΒΑΘΜΟΙ") If Not rstTypes.EOF Then rstTypes.MoveFirst Do While Not rstTypes.EOF rstTypes.Edit rstTypes!matima = rstTypes!matima * 0.2 rstTypes.Update rstTypes.MoveNext Loop Σκοπός μου -όπως φαίνεται- να αλλάξω το περιεχόμενο του παραμετρικού πεδίου matima σε όλες τις εγγραφές και να περάσω απο 100βάθμια βαθμολογική κλίμακα σε 20βάθμια, πολλαπλασιάζοντας με το 0,2. Έκανα χρήση διάφορες 'φατσούλες' για την μορφή της προβληματικής εντολής, αλλά συνήθως παίρνω το μήνυμα 'Error 3265 Το στοιχείο δεν βρέθηκε σε αυτή τη συλλογή". Ευχαριστώ εκ των προτέρων για τον χρόνο σας Με εκτίμηση O meteora |
|
#2
| |||
| |||
|
Καλημέρα σε όλους! Αγαπητέ φίλε, η γνώμη μου είναι να χρησιμοποιήσεις τη μέθοδο .RunSQL ως εξής: Κώδικας: DoCmd.SetWarnings False 'Optional DoCmd.RunSQL "UPDATE Bathmoi SET Bathmoi.matima = Bathmoi.Matima*0.2;" 'Προαιρετικό ' ή με κριτήριο: DoCmd.RunSQL "UPDATE Bathmoi SET Bathmoi.matima = Bathmoi.Matima*0.2 WHERE (((Bathmoi.xPedio)=""Mathitis 1""));" ' ' ή από φόρμα: DoCmd.RunSQL "UPDATE Bathmoi SET Bathmoi.matima = Bathmoi.Matima*0.2 WHERE (((Bathmoi.xPedio)='" & Me.Combo1 & "'));" DoCmd.SetWarnings True Δεν έχεις λόγους να ορίζεις μεταβλητές όταν δεν χρειάζεται να τις καλέσεις περισσότερες φορές. Πχ.: Κώδικας: With CurrentDb.OpenRecordset("Bathmoi", 2)
.MoveFirst
Do While Not .EOF
.Edit
![matima] = ![matima] * 0.2
.Update
.MoveNext
Loop
End With
που ίσως να προκαλούν το λάθος 3265 (Μη αναγνώριση κάποιου πεδίου). |
|
#3
| |||
| |||
|
Καλημέρα Τάσο θερμά ευχαριστώ για την φροντισμένη απάντησή σου. Εργάζομαι σε κάποια εφαρμογή με τον κώδικα-Βιβλιοθήκη-μέθοδο DAO στο ζήτημα της επεξεργασίας των εγγραφών πίνακα (Move, AddΝew, Find, Update και Delete). Υπάρχουν αρκετές ρουτίνες -γραμμένες σε 'λογική' DAO και κάποιες απο αυτές με ενδιαφέρει να καταλαβαίνω... Τη μέθοδο .RunSQL φυσικά και έχω κάνει χρήση αρκετές φορές. Επειδή ο όρος matima ειναι μεταβλητή που χρεώνεται όνομα πεδίου και όχι όνομα πεδίου η ίδια δημιουργήθηκε το πρόβλημα! Στην εφαρμογή μου τώρα δουλεύει η εντολή (Η 1η απο αυτές που ανέφερες - ελαφρά προσαρμοσμένη): DoCmd.SetWarnings False DoCmd.RunSQL "UPDATE ΒΑΘΜΟΙ SET ΒΑΘΜΟΙ." & matima & " = ΒΑΘΜΟΙ." & matima & "*0.2;" DoCmd.SetWarnings False Με εντυπωσίασε η κομψότητα του κώδικα DAO που παραθέτεις. Όμως δεν μπορώ να τον βάλω να δουλέψει εκτός και άν το matima αντικατασταθεί απο υπαρκτό όνομα πεδίου. Συγχαρητήρια για την νέα σου θέση στο Forum και κάθε επιτυχία. Μπράβο σου. Με εκτίμηση Ο meteora |
|
#4
| |||
| |||
|
Καλησπέρα σε όλους! Αγαπητέ φίλε, αφού σ ευχαριστήσω για τα καλά σου λόγια, θα ήθελα να δοκιμάσεις ( αν φυσικά δεν έχεις καταλήξει) τον παρακάτω κώδικα προκειμένου να χρησιμοποιήσεις μεταβλητή σε όνομα πεδίου: Κώδικας: Option Compare Database
Option Explicit
Sub UpdateTable(VarFieldName$)
Dim xField As DAO.Field
With CurrentDb.OpenRecordset("Bathmoi", 2)
Set xField = .Fields(VarFieldName)
.MoveFirst
Do While Not .EOF
.Edit
xField = xField * 0.2
.Update
.MoveNext
Loop
End With
End Sub
Sub Call_UpdateTable()
UpdateTable "FieldName" ' όπου "FieldName" = το όνομα του επιθυμητού πεδίου.
End Sub
|
|
#5
| |||
| |||
|
Καλημέρα Τάσο δούλεψε τέλεια! Θερμά σ'ευχαριστώ. Νάσαι καλά. Η ζωή να προσφέρει σε σένα και τους άλλους ρομπέν των Forum, απλόχερα την καλή της πραμάτια. Με εκτίμηση Ο meteora |
|
#6
| |||
| |||
|
Καλησπέρα Κάνω χρήση της εντολής : SQL = "Update MATHTES " & _ "Set " & vrestmima & " = " & BATMOS & _ (1) " where ID1= " & diktis DoCmd.RunSQL SQL για να ενημερωθεί το 'παραμετρικό' πεδίο Vrestmima απο την τιμή που πληκτρολογώ στο πεδίο BATMOS. Αν πληκτρολογήσω ακέραιο τότε βαίνουν όλα καλά. Αν όμως πληκρολογήσω δεκαδικό τότε εισπράτω το Err.Number 3144. Η εντολή (1) λέει ουσιαστικά το εξής: Update ΜΑΤΗΤΕΣ Set Α142Β = 12,8 where ID1= 113 (Τμήμα Α1, Μάθημα με ID = 42 π.χ ΦΥΣΙΚΗ και Β τετράμηνο -για να εξηγήσω τη δομή του ονόματος του πεδίου που όπως προανέφερα εμφανίζει παραμετρικότητα μιας και το πεδίο δεν προυπάρχει στον πίνακα, αλλα δημιουργείται κάθε φορά που απαιτείται να διαχειριστούν βαθμοί σε κάποιο μάθημα!) Αν αλλάξω τη μορφή της (1) και τη γράψω : SQL = "Update Μαθητές Set Β158Α = Βαθμός where ID1= " & diktis (Δηλαδή αν εμφανίσω άμεσα το όνομα του πεδίου προορισμού), τότε όλα καλά! Κάτι τέτοιο όμως πρακτικά δεν μπορώ να το κάνω παρά μόμο δοκιμαστικά στο παράθυρο Imediatte Το πάλεψα... Ζητώ συγνώμη αν κάνω κατάχρηση του χρόνου σας και όχι ...μόνο. Θερμά ευχαριστώ Ο Meteora |
![]() |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
| ||||
| Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
| [ Πίνακες ] Τιμή Πεδίου ίση με πεδίο άλλου πίνακα | gaz_manos | Access - Ερωτήσεις / Απαντήσεις | 6 | 25-01-13 11:41 |
| Ενημέρωση τιμών πίνακα από πεδίο φόρμας | gath | Access - Ερωτήσεις / Απαντήσεις | 1 | 19-08-12 14:07 |
| [ Πίνακες ] Update τιμών Πεδίων ενός πίνακα μέσω Excel Import | Leader | Access - Ερωτήσεις / Απαντήσεις | 2 | 20-03-12 23:23 |
| [ Φόρμες ] Πεδίο απο άλλη φόρμα / πίνακα | crc | Access - Ερωτήσεις / Απαντήσεις | 6 | 11-01-10 20:12 |
| help πεδιο σε πινακα | sfedona85 | Access - Ερωτήσεις / Απαντήσεις | 5 | 24-02-09 07:44 |
Η ώρα είναι 19:28.


Αλλαγή σε γραμμικό τρόπο

