Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια! |
| Εργαλεία Θεμάτων | Τρόποι εμφάνισης |
#1
| |||
| |||
Αποφυγή διπλοεγγραφών κατα την μεταφορά δεδομένων από πίνακα σε πίνακα
Καλησπέρα !!! στη κοινότητα. Στο παράδειγμα που επισυνάπτω μεταφέρω δεδομένα από ένα πίνακα σε άλλο με επιλογή εγγραφής από πλαίσιο καταλόγου και μεταφορά δεδομένων (insert ) από κουμπί εντολής. Αντιμετωπίζω ένα πρόβλημα με τις διπλοεγγραφές.Όσες φορές πατάω κουμπί τόσες φορές μεταφέρει τα δεδομένα.Πως θα μπορέσω να αποφύγω τις διπλοεγραφές . Φιλικά/Αλέξανδρος |
#2
| |||
| |||
Καλημέρα στη κοινότητα!! Στο παρακάτω κώδικα με κόκκινο συμπληρωμένο μας ελέγχει ότι για κάθε δηλωθέν στοιχείο που επιλέγουμε να κάνει έλεγχο εάν υπάρχει το ίδιο. Αλλά Συνεχίζει το πρόβλημα με τις διπλοεγγραφές. Έχω αφαιρέσει από την λίστα το customer_id διότι μου έκανε debug. 1.Τι κώδικα πρέπει να συμπληρώσω εάν χρειάζεται ; 2. Ή στους πίνακες μήπως θέλει κάποιο ευρετήριο να αλλάξω ή πρωτεύον κλειδί ; Κάτι δεν κάνω σωστά. Γνωρίζει κάποιο μέλος για βοήθεια; Κώδικας: Private Sub Εντολή16_Click() Dim db As Database Dim rs As Recordset Dim ctl As Control Dim varItem As Variant Set db = CurrentDb Set rs = db.OpenRecordset("client") Set ctl = Me.Lista0 For Each varItem In ctl.ItemsSelected rs.AddNew 'rs!customer_id = Me.Lista0.Column(1, varItem) rs!Etos_asfalisis = Me.Lista0.Column(1, varItem) rs!Categories = Me.Lista0.Column(2, varItem) rs!code = Me.Lista0.Column(3, varItem) rs!arsimb = Me.Lista0.Column(4, varItem) rs!arth = Me.Lista0.Column(5, varItem) rs!date = Me.Lista0.Column(6, varItem) rs!name = Me.Lista0.Column(7, varItem) rs!lastname = Me.Lista0.Column(8, varItem) rs!epagelma = Me.Lista0.Column(9, varItem) rs!afm = Me.Lista0.Column(10, varItem) rs!doy = Me.Lista0.Column(11, varItem) rs!odos1 = Me.Lista0.Column(12, varItem) rs!arithmos1 = Me.Lista0.Column(13, varItem) rs!orofos1 = Me.Lista0.Column(14, varItem) rs!poli1 = Me.Lista0.Column(15, varItem) rs!tk1 = Me.Lista0.Column(16, varItem) rs!til1 = Me.Lista0.Column(17, varItem) rs!odos2 = Me.Lista0.Column(18, varItem) rs!arithmos2 = Me.Lista0.Column(19, varItem) rs!orofos2 = Me.Lista0.Column(20, varItem) rs!poli2 = Me.Lista0.Column(21, varItem) rs!tk2 = Me.Lista0.Column(22, varItem) rs!til2 = Me.Lista0.Column(23, varItem) rs!coment = Me.Lista0.Column(24, varItem) rs!HmerGenesis = Me.Lista0.Column(25, varItem) rs!email = Me.Lista0.Column(26, varItem) rs!Hm_ekdosis_Diplomatos = Me.Lista0.Column(27, varItem) rs!Sinidioktitis = Me.Lista0.Column(28, varItem) Me.Form.Requery rs.Update '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Next varItem For Each varItem In ctl.ItemsSelected ctl.Selected(varItem) = False ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Next varItem MsgBox "ΟΚ... Τα επιλεγμένα δεδομένα καταχωρήθηκαν", vbInformation rs.Close Set rs = Nothing Set db = Nothing End Sub Αλέξανδρος |
#3
| |||
| |||
Καλημέρα Αλέξανδρε θα σου πρότεινα την παρακάτω λύση: 1) Στη φόρμα να προσθέσεις ένα κουμπί πχ cmdInsertClients και στο συμβάν κλικ να προσθέσεις τον παρακάτω κώδικα: Κώδικας: Private Sub cmdInsertClients_Click() Dim strINTO As String, strWHERE As String, strSQL As String, strIn As String On Error GoTo ErrHandler strIn = InToList If strIn = "()" Then MsgBox "Δεν έγινε επιλογή στοιχείων" Exit Sub End If strINTO = "INSERT INTO cliend ( Etos_asfalisis, Categories, code, arsimb, arth, " _ & "[date], name, lastname, epagelma, afm, doy, odos1, arithmos1, orofos1, " _ & "poli1, tk1, til1, odos2, arithmos2, orofos2, poli2, tk2, til2, coment, " _ & "HmerGenesis, email, Hm_ekdosis_Diplomatos, Sinidioktitis ) " strSQL = "SELECT Melontiki_Pelates.Etos_asfalisis, Melontiki_Pelates.Categories, " _ & "Melontiki_Pelates.code, Melontiki_Pelates.arsimb, Melontiki_Pelates.arth, " _ & "Melontiki_Pelates.date, Melontiki_Pelates.name, Melontiki_Pelates.lastname, " _ & "Melontiki_Pelates.epagelma, Melontiki_Pelates.afm, Melontiki_Pelates.doy, " _ & "Melontiki_Pelates.odos1, Melontiki_Pelates.arithmos1, Melontiki_Pelates.orofos1, " _ & "Melontiki_Pelates.poli1, Melontiki_Pelates.tk1, Melontiki_Pelates.til1, " _ & "Melontiki_Pelates.odos2, Melontiki_Pelates.arithmos2, Melontiki_Pelates.orofos2, " _ & "Melontiki_Pelates.poli2, Melontiki_Pelates.tk2, Melontiki_Pelates.til2, " _ & "Melontiki_Pelates.coment, Melontiki_Pelates.HmerGenesis, Melontiki_Pelates.email, " _ & "Melontiki_Pelates.Hm_ekdosis_Diplomatos, Melontiki_Pelates.Sinidioktitis " _ & "FROM Melontiki_Pelates LEFT JOIN cliend ON Melontiki_Pelates.afm = cliend.afm " strWHERE = "WHERE cliend.afm Is Null AND Melontiki_Pelates.afm in " & InToList strSQL = strINTO & strSQL & strWHERE CurrentDb.Execute strSQL MsgBox "Η εισαγωγή ολοκληρώθηκε" Exit Sub ErrHandler: MsgBox "Error#: " & Err.Number & vbCrLf _ & Err.Description End Sub Κώδικας: Public Function InToList() As String Dim x As Variant, str As String With Me.Lista0 For Each x In .ItemsSelected str = str & ", '" & .Column(10, x) & "'" Next x str = "(" & Mid(str, 3) & ")" End With InToList = str End Function Προσοχή, αν σε κάποια πεδία του πίνακα cliend υπάρχουν περιορισμοί (πχ δεν επιτρέπονται null) η εγγραφή του πίνακα Melontiki_Pelates που δε θα ικανοποιεί αυτά τα κριτήρια δε θα εισαχθεί. Φιλικά/Γιώργος ΥΓ Το ΑΦΜ το θεωρώ μοναδικό για κάθε πελάτη. Αν αυτό δεν ισχύει δεν ισχύει και η λύση Τελευταία επεξεργασία από το χρήστη kapetang : 22-02-13 στις 13:21. Αιτία: προσθήκη ΥΓ |
#4
| |||
| |||
Καλησπέρα Γιώργο Ευχαριστώ για την γρήγορη ανταπόκριση. Είναι μια ώραία λύση .Άλλωστε και σε προηγούμενες βοήθειές σου που χρησιμοποιώ σε πολλές βάσεις που έχω κάνει μέχρι τώρα ήταν εποικοδομητικές και πολύ προγραμματιστικές!!!!!!!!! Στη περίπτωση αυτή πιστεύω ότι ο σχεδιασμός της βάσης δεν είναι με την φιλοσοφία μοναδικότητας του ΑΦΜ. Στην αρχή το σκέφτηκα για το AFM ότι είναι το μοναδικό και συνήθως όλα τα επαγγελματικά προγράμματα χρησιμοποιούν το AFM σαν κλειδί. Εδώ όμως που βλέπω την βάση ότι για τη χρήση ασφάλισης αυτοκινήτου μπορεί ένα ΕΠΙΘΕΤΟ και ένα ΑΦΜ να έχει 3 αυτοκίνητα ασφαλισμένα οπότε σαν κλειδί θα πρέπει να βάλω τον ΑΡΙΘΜΟ ΑΥΤΟΚΙΝΗΤΟΥ(Ο οποίος περιέχεται σε δευτερεύουσα φόρμα) Στη πρωτεύοντα φόρμα cliend υπάρχει δευτερεύουσα φόρμα ηcar. EΡΩΤΗΣΗ Τώρα μπορώ να προσθέσω στο κώδικα αυτό και τα στοιχεία της δευτερεύουσας φόρμας και αντι του AFM να βάλω σαν μοναδικό κλειδί τον Αριθμό Αυτοκινήτου; Θα κάνω κάποιες τροποποιήσεις στο κώδικα και θα επανέλθω το συντομότερο.Στο συνημμένο περιέχεται και ο πίνακας car. Φιλικά/Αλέξανδρος ΥΓ¨:Για τους περιορισμούς το γνωρίζω διότι σε δοκιμαστική που έκανα και δεν είχα τα (Not is Null) πεδία συμπληρωμένα και δεν γινόνταν η μεταφορά των δεδομένων. |
#5
| |||
| |||
Καλησπέρα Αλέξανδρε δεν έχω χρόνο για να μελετήσω το σχεδιασμό της βάσης σου. Τα παρακάτω ίσως σε βοηθήσουν να την οργανώσεις καλύτερα. Κατά τη γνώμη μου η ΒΔ θα πρέπει να έχει: 1) Ένα πίνακα με τα προσωπικά δεδομένα των πελατών (πχ Clients). Ο πίνακας αυτός μπορεί να έχει πρωτεύον κλειδί ένα πεδίο αυτόματης αρίθμησης ή το ΑΦΜ (πχ ClientID). 2) Ένα πίνακα (πχ Cars) με τα στοιχεία των αυτοκινήτων χωρίς τα στοιχεία των ιδιοκτητών και των ασφαλιστηρίων. Ο πίνακας αυτός μπορεί να έχει πρωτεύον κλειδί ένα πεδίο αυτόματης αρίθμησης ή τον αριθμό του αυτοκίνητου (πχ CarID). 3) Ένα πίνακα που θα συνδέει τους πελάτες με τα αυτοκίνητα (πχ ClientsCars) . Ο πίνακας αυτός θα έχει τουλάχιστον 2 πεδία. Ένα για την καταχώρηση του ID του πελάτη (ClientID) και ένα για την καταχώρηση του ID του αυτοκινήτου (CarID). Αν ένας πελάτης έχει 5 αυτοκίνητα στον πίνακα θα έχουμε 5 εγγραφές με το ίδιο ClientID και με διαφορετικά CaraID. Αν ένα αυτοκίνητο ανήκει σε 3 πελάτες στον πίνακα θα έχουμε 3 εγγραφές με το ίδιο CaraID και με διαφορετικά ClientID. Πρωτεύον κλειδί θα μπορούσε να οριστεί ένα πεδίο αυτόματης αρίθμησης. Η ιδιοκτησία ενός αυτοκινήτου δεν είναι στατική, συνεπώς ο πίνακας πρέπει να περιέχει ένα πεδίο για την καταχώρηση της ημερομηνίας απόκτησης της ιδιοκτησίας και ένα για την καταχώρηση της ημερομηνίας απώλειας. 4) Ένα πίνακα (πχ Asfalistiria) για την καταχώρηση των ασφαλιστηρίων, στο οποίο πέραν των άλλων στοιχείων (Ημερομηνία, κλπ) θα καταχωρείται το CarID. Με βάση την ημερομηνία και το CarID οι ιδιοκτήτες θα μπορούσαν να προσδιοριστούν από τον πίνακα ClientsCars. Σχετικά με τον πίνακα Melontiki_Pelates, δεν ξέρω τι εξυπηρετεί (στον πίνακα Clients μπορούμε να έχουμε πελάτες χωρίς αυτοκίνητα) και πως προκύπτουν τα στοιχεία του. Πάντως για να μεταφερθούν τα στοιχεία του στον πίνακα Clients θα πρέπει να έχει ίδια δομή. Φιλικά/Γιώργος |
#6
| |||
| |||
Καλησπέρα Γιώργο Ευχαριστώ πάντως για το πολίτιμο σου χρόνο που διέθεσες στο θέμα αυτό.Με το πρώτο μήνυμα σου είδα τον τρόπο που προγραμματιστικά μεταφέρω τα δεδομένα αλλά και με το δεύτερο μήνυμα είσαι πολύ κατατοπιστικός και επεξηγηματικός. Έίχa κάνει κάτι παρόμοιο με την περιγραφή σου πιό παλιά.Η βάση αυτή που είχα κάνει ήταν μεγάλη και ο αδερφός μου που ασχολείται με το αντικείμενο ήθελε κάτι απλό.Έτσι έκανα μια μικρή βάση με μια φόρμα που συνδέεται με μια φόρμα cars για τα αυτοκίνητα.Την οποία δεν ανέβασα αν και τα αντικείμενα(Πίνακες)κατά λάθος ήταν κρυφά και ίσως δεν φαινόνταν ο πίνακας cars.Μετά προέκυψε το γεγονός της προσθήκης.Έτσι αλλάζει και ο σχεδιασμός της βάσης.Διότι πολλοί πελάτες τι στιγμή που τους ρωτάς για ασφάλιση σου λέει ότι το αυτοκίνητο λήγει πχ σε 3 μήνες.Τότε πρέπει να καταγράψω τα στοιχεία σε μια φόρμα που την ονόμασα Μελλοντικοί πελάτες(όπου και προκύπτει το όνομα).Μετα με ένα ερώτημα θα με ειδοποιούσε 10 ημέρες πριν ότι έφτασε η περίοδος για την ασφάλιση του αυτοκινήτου. Αφού τα στοιχεία θα προ υπήρχαν στη φόρμα Μελλοντικοί πελάτες και ο πελάτης έχει δώσει το οκ και θέλει να τ ασφαλίσει το αυτοκίνητο ο ασφαλιστής θα έχει κατεγραμμένα ολα τα στοιχεια και του πελάτη για την φόρμα cliend και του αυτοκινήτου cars. Τότε με ένα κουμπί απο τους μελλοντικοί πελάτε θα γινόνταν η μεταφορά των δεδομένω που θα ήταν ίδια με της φόρμα Cliend και της υποφόρμας Cars. Το δείγμα που ανέβασα ήταν μόνο για να δώ την μεταφορά.Στην ουσία ήταν 2 πίνακες Cliend και Car και μια φόρμα Cliend με δευτερεύουσα Car. Πάντως σε υπερευχαριστώ για το χρόνο σου και για το νέο τρόπο υπόδειξης ανακατασκευής.Με έβαλε σε μεράκι να ακολουθήσω τα βήματα της επεξηγησης. Φιλικά/Αλέξανδρος |
« Προηγούμενο Θέμα
|
Επόμενο Θέμα »
| |
Παρόμοια Θέματα | ||||
Θέμα | Δημιουργός | Forum | Απαντήσεις | Τελευταίο Μήνυμα |
Προσάρτηση δεδομενων απο πίνακα με autonumber σε πίνακα με ΙD:Number | γιώργοςΚ | Access - Ερωτήσεις / Απαντήσεις | 2 | 20-01-17 20:12 |
[Συναρτήσεις] Αυτόματη αύξηση (κωδικού) κατά 1 σε πίνακα | gfevran | Excel - Ερωτήσεις / Απαντήσεις | 27 | 02-11-15 01:59 |
Μεταφορά δεδομένων από πίνακα ή ερώτημα σε νέο πίνακα με άλλη μορφή. | dim.konst | Access - Ερωτήσεις / Απαντήσεις | 2 | 09-12-14 21:31 |
Δημιουργία πίνακα με χρήση δεδομένων από έναν άλλο πίνακα και ένα ερώτημα | nikosmin | Access - Ερωτήσεις / Απαντήσεις | 0 | 28-10-13 13:53 |
[ Πίνακες ] Ενημέρωση δεδομένων πίνακα από άλλο πίνακα | ΚΩΣΤΑΣ2 | Access - Ερωτήσεις / Απαντήσεις | 2 | 27-04-11 12:50 |
Η ώρα είναι 19:35.