Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

Îåêßíçóå áðü ôï ìÝëïò kestri. Τελευταία δημοσίευση από το μέλος kestri στις 22-01-2007, 09:00. Υπάρχουν 12 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-01-2007, 10:31 23783

    Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Να ρωτήσω ακόμα κάτι ??

    Έχω δύο πίνακες , το κλειδί και στους δύο πίνακες είναι "Κωδικό Πελάτη"

    Στον πρωτο πίνακα έχω μόνο "Κωδικό Πελάτη" και "Επωνυμία Πελάτη"  - Στον δεύτερο έχω  "Κωδικό Πελάτη" - "Τηλέφωνο"  - "Περιγραφη"

    Η εγγραφή στον πρώτο πίνακα είναι ας πούμε :

    ΕΓΓΡΑΦΗ 1

    "Κωδικό Πελάτη"  : 0001

    "Επωνυμία Πελάτη" : Ηλίας Κεστρίτσαλης

    Στον δεύτερο πίνακα οι εγγραφές είναι :

    ΕΓΓΡΑΦΗ 1

    "Κωδικό Πελάτη"  : 0001

    "Τηλέφωνο" : 2108016913

    "Περιγραφη" : τηλ χωρου

    ΕΓΓΡΑΦΗ 2

    "Κωδικό Πελάτη"  : 0001

    "Τηλέφωνο" : 2102222222

    "Περιγραφη" : ΦΑΞ ΙΔΙΟΥ

    ΕΓΓΡΑΦΗ 3

    "Κωδικό Πελάτη"  : 0001

    "Τηλέφωνο" : 2103333333

    "Περιγραφη" : ΚΙΝΗΤΟ ΙΔΙΟΥ

    Μπορώ να εισάγω στον πρώτο πίνακα τα πεδία  "Κωδικό Πελάτη" - "Τηλέφωνο"  - "Περιγραφη"  του δεύτερου πίνακα ωστε η τελική εγγραφή του πρώτου πίνακα να είναι :

    "Κωδικό Πελάτη"  : 0001

    "Επωνυμία Πελάτη" : Ηλίας Κεστρίτσαλης

    "Τηλέφωνο" : 2108016913

    "Περιγραφη" : τηλ χωρου

    "Τηλέφωνο" : 2102222222

    "Περιγραφη" : ΦΑΞ ΙΔΙΟΥ

    "Τηλέφωνο" : 2103333333

    "Περιγραφη" : ΚΙΝΗΤΟ ΙΔΙΟΥ

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

    ΕΥΧΑΡΗΣΤΩ


    Ηλίας Κεστρίτσαλης
    Μαρούσι
  •  20-01-2007, 11:17 23785 σε απάντηση της 23783

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Δεν είναι σωστό να το κάνεις. Ένας πελάτης μπορεί να έχει πολλά τηλέφωνα(δουλειάς,φαξ,κινητό,σπιτιού) οπότε θα πρέπει να βάλεις πολλές στήλες στον πίνακά σου. Άλλος όμως θα έχει μόνο κινητό και θα γεμίσει τα πεδία με null και αυτό είναι κάτι που δεν θες.

    Γενικά πρέπει να κανονικοποιείς τα δεδομένα σου. Αν δεν ξέρεις τι είναι η κανονικοποίηση χρειάζεσαι διάβασμα (αν πρέπει να ξέρεις ένα πράγμα για τη σχεδίαση βάσεων τότε αυτό είναι η κανονικοποίηση) , αν ξέρεις και το αμελείς πολύ κακώς κάνεις.

  •  20-01-2007, 11:36 23786 σε απάντηση της 23785

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Ο agmarios έχει απόλυτο δίκιο. Καλά είναι η βάση τώρα, αν την πειράξεις θα έχεις κάνει μεγάλη ζημιά. Μπορείς άνετα να πάρεις τα πεδία και των δύο πινάκων μαζί με ένα select ... from [Πίνακας 1] Π1, [Πίνακας 2] Π2 WHERE Π1.[Κωδικός Πελάτη]=Π2.[Κωδικός Πελάτη], ή ακόμα και να φτιάξεις ένα view αν κάνεις συχνά το query.

    Αυτό είναι κάτι εντελώς συνηθισμένο και δεν υπάρχει λόγος να απαιτεί ώρες ασχολίας. Μήπως κάνεις κάτι λάθος με το πρόγραμμα σου?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  20-01-2007, 12:52 23790 σε απάντηση της 23783

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Σας ευχαριστώ για τις απαντήσεις σας ..

    Αυτο που θέλω να κάνω είναι να έχω μόνο έναν πίνακα και όχι 2 .

     

    Απλά θέλω να προσθέσω τις εγγραφές του 2 πίνακα σε πεδία του πρώτου...


    Ηλίας Κεστρίτσαλης
    Μαρούσι
  •  20-01-2007, 13:03 23791 σε απάντηση της 23790

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

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

    Αν όντος υπάρχει κάποιος λόγος, γράψε τον να τον συζητήσουμε. Σκέψου όμως τι πρέπει να γίνει αν κάποια στιγμή χρειαστεί να προσθέσεις ένα ακόμη τηλ σε κάποιον πελάτη (εξοχικό,υποκατάστημα, 2ο τηλ κλπ κλπ).Θα πρέπει να προσθέσεις στήλες στον πίνακά σου. Ενώ τώρα αρκει ή προσθήκη εγγραφών στον 2ο πίνακα.

  •  20-01-2007, 13:22 23793 σε απάντηση της 23791

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Συμφωνώ απολύτως. Όπως τα περιγράφεις ως τώρα, το να ενώσεις τους δύο πίνακες σε ένα θα ήταν μεγάλο λάθος. Εκτός και φτιάχνεις εφαρμογή data warehouse, είναι λάθος να ενώνεις πληροφορίες από διάφορους πίνακες σε ένα. Αν σε δυσκολεύει η μορφή των πινάκων, κάτι άλλο κάτι λάθος και θα πρέπει να το διορθώσεις. Μπορεί π.χ. να έχεις σχεδιάσει λάθος τις φόρμες που παρουσιάζουν τα δεδομένα, ή να χρησιμοποιείς λάθος queries, ή να μην έχεις views. Αν ενώσεις τους πίνακες, το πρόβλημα που έχεις απλά θα γίνει ακόμα δυσκολότερο.

    Πριν αρχίσεις να κάνεις δραστικές αλλαγές σε μία βάση, καλό είναι να καταλάβεις γιατί είναι έτσι όπως είναι, και φυσικά να διαβάσεις για σχεδίαση βάσεων. Οι πίνακες που μας περιγράφεις είναι εντάξει και δεν θέλουν "διορθώσεις".
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  20-01-2007, 13:45 23796 σε απάντηση της 23793

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

     pkanavos wrote:
    Οι πίνακες που μας περιγράφεις είναι εντάξει και δεν θέλουν "διορθώσεις".

    ίσως να έβαζα και τρίτο πίνακα "Eίδος αριθμού".

  •  20-01-2007, 23:51 23810 σε απάντηση της 23783

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Σας ευχαριστώ για τις απαντήσεις ..

    Θέλω να κάνω έναν πίνακα διότι το πρόγραμμα που θα χρισιμοποιήσω για το pda μου το HANDBASE υποστιρίζει ένα πίνακα.

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

    "Κωδικος Πελάτη" "Επωνυμία" "Διεύθυνση" "περιγραφή χωρου" "μαρκα συναγερμου"

    Ενώ στον δεύτερο πίνακα(τηλέφωνα πελάτη)  αντί να υπάρχει μία εγραφή με όλα τα τηλέφωνα του πελάτη  π.χ. "Κωδικος Πελάτη" "Τηλέφωνο1" "Περιγραφη τηλεφωνου1" "Τηλέφωνο2" "Περιγραφη τηλεφωνου2"  "Τηλέφωνο3" "Περιγραφη τηλεφωνου3" υπάρχουν πολλές εγραφές για τον ίδιο "Κωδικό πελάτη" που η καθεμία περιέχει και ένα τηλέφωνο δηλαδή  εγγραφή 1 "Κωδικος Πελάτη" "Τηλέφωνο1" "Περιγραφη τηλεφωνου1"

                               εγγραφή 2 "Κωδικος Πελάτη" "Τηλέφωνο1" "Περιγραφη τηλεφωνου1"

                               εγγραφή 3 "Κωδικος Πελάτη" "Τηλέφωνο1" "Περιγραφη τηλεφωνου1"

    Και οι τρεις παραπάνω εγγραφές αφορούν τον ίδιο πελάτη

    Το σωστό θα ήταν ένας πίνακας που να λέγεται (Στοιχεία Πελάτη) και να περιέχει τα στοιχεία του πελάτη "Κωδικος Πελάτη" "Επωνυμία" "Διεύθυνση" "περιγραφή χωρου" "μαρκα συναγερμου" ενώ στον δεύτερο πίνακα(τηλέφωνα πελάτη) να υπάρχει μία εγγραφή με όλα τα τηλέφωνα του πελάτη

    "Κωδικος Πελάτη" "Τηλέφωνο1" "Περιγραφη τηλεφωνου1" "Τηλέφωνο2" "Περιγραφη τηλεφωνου2"  "Τηλέφωνο3" "Περιγραφη τηλεφωνου3"

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

     

    Ευχαριστώ πολύ


    Ηλίας Κεστρίτσαλης
    Μαρούσι
  •  21-01-2007, 09:32 23812 σε απάντηση της 23810

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Οι πίνακες είναι σωστά σχεδιασμένοι και δεν χρειάζονται αλλαγή. Η αλλαγή που προτείνεις, σε ένα πίνακα να χωθούν όλα τα τηλέφωνα είναι το ίδιο λάθος όπως να πάρεις όλα τα στοιχεία του πελάτη μαζί με τα τηλέφωνα και να τα χώσεις σε ένα πίνακα. Υποθέτω ότι αυτή η βάση δεν έχει φτιαχτεί για HANDBASE και θέλεις να μεταφέρεις δεδομένα από τη βάση αυτή η οποία θα βρίσκεται σε κάποιο PC στα PDA. Αυτό θα το κάνεις φτιάχνοντας ένα σωστό export/import των δεδομένων στις βάσεις των PDA. Φτιάξε ένα view όπου τα δεδομένα θα έχουν τη μορφή που θέλεις εσύ και τράβα τα από το view αυτό και πέρνα τα στην HANDBASE. Ή, αν θέλεις να έχεις synchronization μεταξύ της βάσης και των PDA, φτιάξε ενδιάμεσους πίνακες που θα έχουν τη μορφή που θέλεις εσύ, και κάνε synch με αυτούς. Μετά, μεταφέρεις τα δεδομένα στους αρχικούς πίνακες. Εγώ πάντως θα ξανακοίταζα τη HANDBASE γιατί ακούγεται λίγο περίεργο να μην υποστηρίζει joins. Αν υπάρχει τέτοιος περιορισμός, μάλλον δεν πρόκειται να τη χρησιμοποιήσω ποτέ. Όχι όταν μπορώ να έχω ολόκληρο SQL Server Compact στο PDA μου.

    Δεν έχει κανένα απολύτως νόημα να χαλάσεις την βάση που ήδη υπάρχει για να εξυπηρετήσεις τους περιορισμούς μίας άλλης εφαρμογής. Μετά θα αλλάξεις και όλες τις φόρμες της Access? Όλα τα reports και όλα τα macros?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-01-2007, 10:08 23813 σε απάντηση της 23812

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Χμμμ, ρίχνοντας μία ματιά στο site της Handbase είδα ότι υποστηρίζει relations με ... άλλες βάσεις? Προφανώς θεωρεί ότι ένας πίνακας=μία βάση. Οπότε περνάς και τους δύο πίνακες στο PDA με τα relatons τους. Δεν ξέρω όμως πως θα φαίνεται μετά η φόρμα σου. Αν η Handbase δεν μπορεί να συνδυάσει στοιχεία από πολλούς πίνακες σε μία φόρμα θα υπάρχει πρόβλημα. Γενικά φαίνεται εργαλείο για πολύ απλοϊκές εφαρμογές. Και τα χαρακτηριστικά της database μου θυμίζουν ..... dBase? Μήπως από εκεί πήρε το όνομα ????????

    Pleeease, μην χαλάσεις την Access επειδή η Handbase έχει χαρακτηριστικά βάσης 20 ετών!
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  21-01-2007, 10:26 23814 σε απάντηση της 23813

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Φίλε Παναγιωτη,

    Ευχαριστώ για την απάντηση σου.

    Αυτο που θελω έιναι απλα να έχω τα στοιχεια ΟΛΑ 140 πελατων μου στο PDA μου .. Δεν με ενδιαφέρει ουτε η αυτοματη ενημερωση ουτε οι διασυνδεσεις ουτε τιποτα.

    Απλα θέλω να ενωσω τα στοιχεια των 2 πινακων σε εναν ωστε να τα βαλω στο PDA. Το πρόωλημα με το join ειναι οτι ενωνει μεν τις εγραφες απο τους δυο πινακες αλλα επιδει έχω στον 2ο πίνακα πολλές εγραφες για τον ιδιο πελατη το τελικο αποτελεσμα είναι αντι για 140 πελατες που εχω να περνω στον τελικο πίνακα περιπου 500 εγραφες διοτι ο καθε πελατης έχει 3- 5 τηλεφωνα ... Αν μπορεις πες μου εσυ η κάποιος άλλος πως μπορώ να κάνω αυτο που ζητάω και αν γίνεται φυσικά όσο σωστό και να είναι ...

     

    Χίλια ΕΥΧΑΡΙΣΤΩ


    Ηλίας Κεστρίτσαλης
    Μαρούσι
  •  21-01-2007, 13:20 23815 σε απάντηση της 23814

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Η μία λύση είναι να μην ενώσεις τους πίνακες. Αν μπορείς να τους περάσεις στην HandBase χωρίς να έχεις προβλήματα με τις φόρμες σου, μην τους ενώνεις. Αφού η HandBase υποστηρίζει σχέσεις μεταξύ πινάκων (ακόμα και αν λέει τους πίνακες "βάσεις") δεν χρειάζεται να ενώσεις τους πίνακες. Το πρόβλημα είναι πως θα σχεδιάσεις τις φόρμες, όχι πως θα περάσεις τους πίνακες.
    Από την άλλη, ο μόνος τρόπος για να συνδέσεις δεδομένα πολλών πινάκων είναι με ένα select. Αν το join σου επιστρέφει περιττές ή επαναλαμβανόμενες εγγραφές, πρέπει να προσθέσεις τα κατάλληλα κριτήρια που θα τις αφαιρέσουν. Στην περίπτωση σου, αυτό που ζητάς είναι να μετατρέψεις τις γραμμές ενός query σε στήλες. Μπορείς να χρησιμοποιήσεις το παρακάτω query:



    select 
       C.Name, P1.PhoneNumber as HomeNumber, P2.PhoneNumber as FaxNumber, P3.PhoneNumber as AlertNumber
    from 
       Customer C, Phone P1, Phone P2, Phone P3
    where 
       C.CustomerID=P1.CustomerID and 
       C.CustomerID=P2.CustomerID and 
       C.CustomerID=P3.CustomerID and 
       P1.Description='Home Number' and
       P2.Description='Fax Number' and
       P3.Description='Alert Number'

    Το μυστικό για να δουλέψεις με SQL και βάσεις γενικά είναι να καταλάβεις ότι χειρίζεσαι πάντα σύνολα δεδομένων, όχι μεμονομένα δεδομένα. Εδώ θέλεις να δείξεις για κάθε πελάτη το τηλέφωνο σπιτιού, το fax και το συναγερμό. Πρέπει να συνδέσεις δηλαδή τα δεδομένα των πελατών, με τα τηλέφωνα σπιτιών (τα οποία είναι μοναδικά για κάθε πελάτη), με τα fax (επίσης μοναδικά για κάθε πελάτη), και τους συναγερμούς (επίσης μοναδικοί για κάθε πελάτη). Οπότε, φτιάχνεις ένα query το οποίο επαναλαμβάνει κάθε φορά τον πίνακα των τηλεφώνων με περιορισμό να περιέχει μόνο ένα τύπο τηλεφώνου κάθε φορά. Για να είναι γρήγορο αυτό το query πάντως καλό είναι να βάλεις και ένα index στην περιγραφή.

    Το είδος αυτών των queries λέγεται pivot καθώς "περιστρέφουν" τα δεδομένα του πίνακα και τα μετατρέπουν από γραμμές σε στήλες βάση του τύπου τους. Αν ψάξεις στο internet θα βρεις αρκετούς τρόπους τόσο να μετατρέψεις τις γραμμές σε στήλες όσο και το αντίθετο


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  22-01-2007, 09:00 23829 σε απάντηση της 23815

    Απ: Εισαγωγή πεδίων από ένα πίνακα σε πεδίο δεύτερου πίνακα

    Σε ευχαριστώ πάρα πολύ θα το δοκιμάσω ...

     

    Φιλικά Ηλίας


    Ηλίας Κεστρίτσαλης
    Μαρούσι
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems