ms-office.gr > Forum > Microsoft Access > Access - Ερωτήσεις / Απαντήσεις > [ Ερωτήματα ] Αντιστοίχιση πεδίων και τσεκάρισμα

Access - Ερωτήσεις / Απαντήσεις Access + VBA... Εδώ δεν υπάρχουν όρια!

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 08-10-15, 19:55
Όνομα: Βασίλης
Έκδοση λογισμικού Office: Ms-Office 2002
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 05-10-2015
Μηνύματα: 10
Προεπιλογή Αντιστοίχιση πεδίων και τσεκάρισμα

Γεια σε όλους τους λάτρεις της Access

Θέλω να αντιστοιχίσω 2 στήλες σε 2 διαφορετικούς πίνακες και να γίνει update σε μια τρίτη στήλη.
Πρώτα θέλω να βρει τα VoucherId και αφού κάνει την αντιστοίχιση να τσεκάρει αν είναι ίδια τα ποσά στα Deposit των 2 πινάκων. Τέλος να πάει να τσεκάρει (UPDATE) αν είναι σωστό να βάλει check αλλιώς να μην το πειράξει.

Αναλυτικά έχω Table1 και Table 2. Οι στήλες (Table1.VoucherId, Table2.VoucherId, Table1.Deposit, Table1.Deposit) έχουν το ίδιο όνομα, εκτός από την στήλη που θα γίνει το τσεκάρισμα. Έτσι λοιπόν έγραψα το ακόλουθο, αλλά κάπου υπάρχει σφάλμα. Ζητώ την βοήθειά σας λοιπόν διότι έχω "κολλήσει". Τα πεδία των VoucherId τα έχω θέσει ως πρωτεύοντα κλειδιά. Το Table1.Status το έχω δηλώσει ως Ναι/Όχι (μήπως δεν μπορεί να δουλέψει έτσι το Trus=False?)

UPDATE Table1
SET Table1.Status = True,
Table1.DateUpdated = Date()
FROM Table1
INNER JOIN Table2 ON Table1.VoucherID = Table2.VoucherID
WHERE Table2.Date>= #06/10/2015# and Table2.Date<=#07/10/2015#
AND Table2.Deposit = Table1.Deposit
AND Table1.Status = False
Απάντηση με παράθεση
  #2  
Παλιά 09-10-15, 09:00
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Καλημέρα

Βασίλη, δοκίμασε (σε προβολή SQL) το ερώτημα:

Κώδικας:
UPDATE Table1 INNER JOIN Table2 ON (Table1.Deposit = Table2.Deposit) AND 
(Table1.VoucherID = Table2.VoucherID) SET Table1.Status = -1, Table1.DateUpdated = Date()
WHERE (((Table2.fDate) Between #10/6/2015# And #10/7/2015#) AND ((Table1.Status)=False));
Πρέπει επίσης να δεις και τη σχεδίαση της ΒΔ.

Αν ο πίνακας Table1 συνδέεται με τον Table2 με σχέση 1 προς πολλά το πεδίο VoucherID, στο δεύτερο πίνακα, δεν πρέπει να είναι πρωτεύον κλειδί, αλλά ξένο (εξωτερικό).

Επίσης αν η σχέση είναι 1 προς 1, γιατί δε συγχωνεύεις τους πίνακες σε ένα;

Φιλικά/Γιώργος

Τελευταία επεξεργασία από το χρήστη kapetang : 09-10-15 στις 09:23.
Απάντηση με παράθεση
  #3  
Παλιά 09-10-15, 18:06
Όνομα: Βασίλης
Έκδοση λογισμικού Office: Ms-Office 2002
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 05-10-2015
Μηνύματα: 10
Προεπιλογή

Γιώργο σε ευχαριστώ πολύ που ασχολήθηκες. Ήμουν μακρυά πολύ από αυτό που έγραψες. Πού θα μου πάει, θα τα καταφέρω.

Γιώργο ο τύπος σχέσης που έχω ανάμεσα στους πίνακες είναι ένα προς ένα. Ο πίνακας 2 (table2) είναι σε μορφή excel και λαμβάνω το αρχείο καθημερινά. Δεν μπορώ να το συγχωνεύσω καθώς οι στήλες είναι τελείως διαφορετικές. Γι αυτό και το κρατάω χώρια.

Ο κώδικας ενημερώνει τον πρώτο πίνακα.Αυτό που παρατήρησα είναι πως ενώ κάνει σωστά την αντιστοίχιση των VoucherΙd δεν τσεκάρει την νομισματική μονάδα. π.χ. στο ποσό του πίνακα 2, άλλαξα το ποσό που αντιστοιχεί στο ίδιο voucher και το έκανε update ως True (μου τσέκαρε τον πίνακα ενώ δεν θα έπρεπε). Τί γίνεται στην περίπτωση που θα έχω αναντιστοιχία στα ποσά;

Δεν κατάλαβα απόλυτα την fDate! Γιατί θα πρέπει να δίνω ημερομηνία; Δεν φτάνει το BETWEEN; Μπορείς να με διαφωτίσεις σε αυτό. Κάτι έχεις σκεφτεί, είμαι σίγουρος.

Τί λες;

Βασίλης
Απάντηση με παράθεση
  #4  
Παλιά 09-10-15, 19:25
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Βασίλη, το ερώτημα ψάχνει για κάθε εγγραφή του πίνακα Table1 να βρει μια εγγραφή του πίνακα Table2, που να έχει ίδια τιμή στα αντίστοιχα πεδία VoucherID και Deposit.

Εφόσον βρεθεί τέτοια η εγγραφή στο πίνακα Table2, αν η ημερομηνία (Table2.fDate) στην εγγραφή είναι μεταξύ των ημερομηνιών που θέλουμε και το πεδίο Table2.Status έχει τιμή False, γίνεται η ενημέρωση.

Αυτό ήταν το ζητούμενο.

Επειδή το πεδίο Date έχει όνομα ίδιο με τη συνάρτηση Date ενδέχεται να υπάρξει πρόβλημα γι’ αυτό το άλλαξα σε fDate.

Θα πρέπει να αλλάξεις στον πίνακα Table2 το όνομα του πεδίου από Date σε fDate
Απάντηση με παράθεση
  #5  
Παλιά 10-10-15, 00:05
Όνομα: Βασίλης
Έκδοση λογισμικού Office: Ms-Office 2002
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 05-10-2015
Μηνύματα: 10
Προεπιλογή

Γιώργο σε ευχαριστώ για τις διευκρινίσεις.

Κατά τα τεσταρίσματα παρατήρησα τα εξής. Στο table2 εάν προσπαθήσω να εισάγω ένα voucher που δεν υπάρχει στο table1, δεν με αφήνει να το εισάγω, επειδή δεν υπάρχει αντιστοίχιση στο table1.

Στην περίπτωση που δεν έχει καταχωρηθεί στο table1 το συγκεκριμένο voucher αλλά υπάρχει στο table2 υπάρχει πρόβλημα. Τί θα γίνει σε περίπτωση που ξεχαστεί να περαστεί κάποιο voucher στο table1 αλλά η κούριερ μου το περιλαμβάνει στο table2? Τί κάνω εκεί ρε Γιώργο;

Ο κώδικας είναι σούπερ. Τα σπάει.
Απάντηση με παράθεση
  #6  
Παλιά 10-10-15, 08:57
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Αυτή η συμπεριφορά οφείλεται στη σχεδίαση της ΒΔ.

Θα σε συμβούλευα να μελετήσεις το παρακάτω άρθρο:

https://support.office.com/el-gr/art...4-bd4f9c9ca1f5

και να ξαναδείς τη σχεδίαση.
Απάντηση με παράθεση
  #7  
Παλιά 10-10-15, 10:12
Όνομα: Βασίλης
Έκδοση λογισμικού Office: Ms-Office 2002
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 05-10-2015
Μηνύματα: 10
Προεπιλογή

Ευχαριστώ Γιώργο.

Θα το μελετήσω αμέσως.
Απάντηση με παράθεση
  #8  
Παλιά 16-10-15, 08:53
Όνομα: Βασίλης
Έκδοση λογισμικού Office: Ms-Office 2002
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 05-10-2015
Μηνύματα: 10
Προεπιλογή

Καλημέρα

Λαμβάνω το ακόλουθο μήνυμα...

"Δεν είναι δυνατή η προσθήκη ή η αλλαγή εγγραφής γιατί απαιτείται σχετική εγγραφή στον πίνακα Table1"

Προσπαθώ να περάσεω τις νέες εγγραφές στον Table2 αλλά δεν με αφήνει. Προσπαθώ να καταλάβω γιατί. Καμιά ιδέα;
Απάντηση με παράθεση
  #9  
Παλιά 16-10-15, 11:26
Όνομα: Γιώργος
Έκδοση λογισμικού Office: Ms-Office 2010
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 18-06-2010
Μηνύματα: 3.737
Προεπιλογή

Καλημέρα

Η σχέση που υπάρχει ανάμεσα στους πίνακες, δεν επιτρέπει να δημιουργήσουμε στο πίνακα Table2 κάποια εγγραφή, εάν δεν υπάρχει εγγραφή στον πίνακα Table1, με την ίδια τιμή στο πεδίο σύνδεσης.

Η σωστή σχεδίαση της ΒΔ είναι βασική εργασία και δεν μπορεί να γίνει χωρίς κάποια υποδομή γνώσεων.

Για το λόγο αυτό, στο προηγούμενο μήνυμα, σου πρότεινα να μελετήσεις το σχετικό άρθρο.

Φιλικά/Γιώργος
Απάντηση με παράθεση
  #10  
Παλιά 16-10-15, 20:08
Όνομα: Βασίλης
Έκδοση λογισμικού Office: Ms-Office 2002
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 05-10-2015
Μηνύματα: 10
Προεπιλογή

Γιώργο απόλυτα κατανοητό αυτό που αναφέρεις.

Διάβασα πολύ προσεκτικά το άρθρο για το σχεδιασμό της ΒΔ.
Οι εγγραφές στον πίνακα 1 δεν ακολουθούν τις εγγραφές στον πίνακα 2 ή και το αντίθετο, διότι οι εγγραφές στον πίνακα 1 τηρούνται κανονικά. Αυτό δεν σημαίνει πως γίνεται και στον πίνακα 2, καθώς έχει να κάνει με εξωτερικό παράγοντα. Γι αυτό και θέλω να κάνω την αντιστοίχιση ώστε να τσεκάρω ποιές εγγραφές από τον πίνακα 1 δεν έχουν γίνει από τον πελάτη.

Ο πίνακας 1 αντιπροσωπεύει την καταχώρηση των αποστολών μου. Ο πίνακας 2 αντιπροσωπεύει την πληρωμή των αποστολών μου. Οι εγγραφές στον πίνακα 2 γίνονται πολλές μέρες αργότερα λόγω καθυστέρησης των πληρωμών. Εισάγω τις πληρωμές από το excel στο access για να γίνει το τσεκάρισμα αυτόματα. Ειδάλλως θα πρέπει ημερησίως να κάνω εκατοντάδες εγγραφές τσεκάρισμα μια-μια.

Πως μπορώ πλέον να λύσω αυτό το πρόβλημα Γιώργο; θα μπορούσα να καταργήσω τα πρωτεύοντα κλειδιά; εκεί δεν δημιουργείται πρόβλημα; η σχέση που έχουν τώρα οι 2 πίνακες είναι id=id. Πως θα μπορούσα να συνεχίσω το τσεκάρισμα;

Σε ευχαριστώ εκ των προτέρων.

Βασίλης
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
Αντιστοίχιση επιλογης συνθ. πλαισιου με κειμενο αλλου πινακα iliast Access - Ερωτήσεις / Απαντήσεις 13 13-02-16 18:25
[ Φόρμες ] Αυτόματη ημερομηνία ή τσεκάρισμα σε κουμπί Νιόνιος Access - Ερωτήσεις / Απαντήσεις 0 29-05-13 12:46
[Excel07] Αντιστοίχιση ημερομηνιών με ημέρες Celicamomo Excel - Ερωτήσεις / Απαντήσεις 5 09-01-12 00:02
[Συναρτήσεις] Αντιστοίχιση περιγραφής με κωδικό. gr8styl Excel - Ερωτήσεις / Απαντήσεις 7 16-07-11 21:27
[Γενικά] Αντιστοίχιση κελιών Iceland Excel - Ερωτήσεις / Απαντήσεις 4 22-08-10 17:26


Η ώρα είναι 09:48.