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

 

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

Γέμισμα πίνακα στον SQL Server από excel files

Îåêßíçóå áðü ôï ìÝëïò klelia. Τελευταία δημοσίευση από το μέλος klelia στις 01-10-2007, 11:43. Υπάρχουν 25 απαντήσεις.
Σελίδα 1 από 2 (26 εγγραφές)   1 2 >
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  11-09-2007, 22:50 34941

    Γέμισμα πίνακα στον SQL Server από excel files

    Καλησπέρα,

    Θα μπορούσε κάποιος να με βοηθήσει περιγράφοντάς μου πως μπορώ να γεμίσω ένα πίνακα στον SQL Server τραβώντας τα δεδομένα μου από πολλά excel files τα οποία περιέχουν τις ίδιες στήλες (πεδία) και τα οποιά απλά θέλω να βάλω στον πίνακα το ένα κάτω από το άλλο.

    Από ότι έχω καταλαβεί πρέπει να χρησιμοποιήσω κάποιο SSIS package αλλά από ότι φαίνεται κάπου χάνομαι στην πορεία. Μήπως θα μπορούσατε να μου περιγράψετε τα βήματα ή να με παραπέμψετε σε συγκεκριμένο tutorial?

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

     

  •  12-09-2007, 09:01 34942 σε απάντηση της 34941

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Μπορείς να το κάνεις χρησιμοποιώντας DTS import από τόν SQL.


    Ιωάννης Μανουσάκης
  •  12-09-2007, 09:16 34945 σε απάντηση της 34942

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Αν κρίνω από την αναφορά στο SSIS ο server είναι ο SQL Server 2005, όπου το DTS έχει αντικατασταθεί από το SSIS. Όπως και να έχει, το θέμα είναι μάλλον πως να διαβάσει κανείς πολλά αρχεία σε ένα SSIS package.

    Καταρχήν, το Management Studio του SQL Server 2005 περιλαμβάνει ένα SSIS wizard κρυμμένο πίσω από το μενού Import/Export. Αυτός ουσιαστικά φτιάχνει ένα SSIS package για να κάνει import ή export ένα συγκεκριμμένο πίνακα σε ένα συγκεκριμμένο αρχείο. Αυτό το package μπορείς να το εκτελέσεις άμεσα ή να το αποθηκεύσεις για αργότερα και να δεις πως δουλεύει. Από εκεί και πέρα, αν τα αρχεία είναι λίγα και συγκεκριμμένα, μπορείς απλά να αντιγράψεις τα transformations που υπάρχουν μέσα στο package όσες φορές χρειάζεται. Διαφορετικά, θα πρέπει να δημιουργήσεις ένα loop το θα εκτελεί ένα transform για κάθε excel. Μέσα στο loop μπορείς να περιλάβεις κώδικα ο οποίος θα τροποποιεί τις ιδιότητες του transform, έτσι ώστε κάθε φορά να αλλάζει το όνομα του αρχείου excel.

    Τα πράγματα είναι λιγάκι δύσκολα αν πολλά αρχεία απευθύνονται σε πολλούς πίνακες. Εκεί χρειάζεσαι διαφορετικό transform για κάθε πίνακα, καθώς τα πεδία από πίνακα σε πίνακα διαφέρουν.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  12-09-2007, 10:16 34948 σε απάντηση της 34945

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Καταρχήν να πω ότι όντως μιλάμε για τον SQL Server 2005. Τα αρχεία μου είναι πολλά, στη συγκεκριμένη περίπτωση γύρω στα 170 και έχω να γεμίσω και ακόμα έναν πίνακα με πολλά περισσότερα αρχεία. Θα προσπαθήσω αρχικά να φτιάξω loop για πολλά αρχεία που θα μπουν σε ένα πίνακα. Θα με βοηθούσε πολύ αν μπορούσατε να μου δείξετε ένα κομμάτι του κώδικα για τα transformations...καθώς και που ακριβώς το εισάγω.

    Ευχαριστώ.

  •  12-09-2007, 11:50 34951 σε απάντηση της 34941

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Συνημμένα: importSheet.rar

    Σου στέλνω συννημένα ένα excel που μπορεί να σου κανει την δουλειά που θέλεις.

    Αρκεί νά δηλώσεις την διαδρομή τών αρχείων excel


    Ιωάννης Μανουσάκης
  •  12-09-2007, 22:05 34969 σε απάντηση της 34951

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Καλησπέρα,

    Ευχαριστώ πολύ για το αρχείο, προσπαθώ να το χρησιμοποιήσω και μου βγάζει "Λάθος σύνδεσης". Έχω συμπληρώσει σωστά τις παραμέτρους του συστήματος, μόνο δεν ξέρω αν παίζει ρόλο ότι εγώ δεν έχω κάποιο username, password για να συνδεθώ στη βάση μου στο πεδίο Authentication είναι επιλεγμένο το Windows Authentication. Μήπως πρέπει να εισάγω κάτι άλλο στα πεδία User, Password (δοκίμασα με το sa και κενό password και με το username που μου βγάζει στη βάση αφού συνδεθώ και κενό password αλλά κανένα δε δουλεύει)...Και κάτι άλλο μήπως παίζει ρόλο αν είναι ανοιχτή η βάση ή όχι? Αν και δε νομίζω δοκίμασα και με τα 2...

    Geeked thanks for helping me out!

  •  13-09-2007, 08:25 34975 σε απάντηση της 34969

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Αφού έχεις Windows Authentication μπές στόν SQL Manager και δημιούργησε στό security ένα χρήστη μέ username και password δώστου access στην βάση που θέλεις καθώς και πλήρη δικαιώματα στόν πίνακα που θέλεις να εισάγεις τα δεδομένα.

    Μπορείς βέβαια μέσα από τον Enterprise Manager να τροποποιήσεις το password του sa και να μήν χρειάστεί να δημιουργήσεις νέο user .


    Ιωάννης Μανουσάκης
  •  13-09-2007, 08:39 34976 σε απάντηση της 34969

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Και κάτι που ξέχασα να σου πώ τά excel αρχεία που έχεις πρέπει το sheet που υπάρχουν τα δεδομένα πού έχεις νά έχει την ονομασία TransferData αν θέλεις να έχει κάποια άλλη μπές στον κώδικα και στό σημείο πού λέει shtName = "TransferData" άλλαξε το TransferData μέ αυτό που εσύ θέλεις.

     


    Ιωάννης Μανουσάκης
  •  13-09-2007, 22:12 34999 σε απάντηση της 34976

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Επειδή όπως έχεις καταλάβει είμαι καινούρια στον SQL Server μήπως μπορείς να μου πεις πως θα αλλάξω το password του sa? Χρησιμοποιώ τον developer's και έτσι δεν έχω enterprise manager, ό,τι δοκίμασα μέχρι στιγμής απέτυχε . Επίσης μια άλλη λύση θα ήταν να μου πεις ποιο κομμάτι του κώδικα του excel μπορώ να αλλάξω έτσι ώστε να μη ζητάει password για να γίνει το connection...ή μήπως είναι απαραίτητο?

    Σ'ευχαριστώ για ακόμα μια φορά!

  •  14-09-2007, 08:40 35002 σε απάντηση της 34999

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Αν έχεις την Developer Edition δέν υπάρχει περίπτωση να μήν έχεις εγκαταστήσει τον Enterprise Manager γία SQL2000 άν εχεις SQL2005 το αντίστοιχο εργαλείο είναι ο SQL Server Management Studio.

    Τώρα στό φάκελλο Security επιλέγεις logins βλέπεις τόν user sa και μέ διπλό κλικ ανοίγεις το παράθυρο Login Properties στό σημείο πού λέει το paswword βάζεις αυτό πού εσύ θέλεις.

    Στό excel που σου έστειλα και στην function OpenConnection μπορείς στό σημείο που σού γράφω

          With cn

                .ConnectionString="PROVIDER=SQLOLEDB;DRIVER={SQL SERVER};SERVER=" & Sheets("MyTansSheet").Cells(2, 4) & ";Database=" & Sheets("MyTansSheet").Cells(3, 4) & ";uid=" & Sheets("MyTansSheet").Cells(4, 4) & ";pwd=" & Sheets("MyTansSheet").Cells(5, 4)

       να το αλλάξεις μέ

               .ConnectionString="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=" & Sheets("MyTansSheet").Cells(3 4) & ";Data Source=" & Sheets("MyTansSheet").Cells(2, 4)

    έτσι ώστε να μήν σου ζητάει paswword για Login με SQL Server Authentication αλλά να κάνει login με Windows Authentication στα σημεία όμως του Excel πρέπει να βάλεις τά στοιχεία του Server και της Database καθώς και τον πίνακα που θέλεις να γίνει η εισαγωγή.

       Προσοχή όπως σου έχω και προηγουμένως αναφέρει τά Sheet των Excel αρχείων πού θέλεις να μεταφέρεις νά έχουν την ονομασία TransferData ή αλλοιώς όπως σου σε προηγούμενο post να αλλάξεις στόν Κώδικα αυτή την ονομασία μέ αυτή πού εσύ θέλεις.

      Ελπίζω τα παραπάνω να σέ βοηθήσουν.

     


    Ιωάννης Μανουσάκης
  •  17-09-2007, 21:31 35084 σε απάντηση της 35002

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

     Τελικά από ότι φαίνεται δεν θα τα καταφέρω με αυτό το excel! Confused

    Άλλαξα το κομμάτι του κώδικα που μου είπες (με κάποιες μικρο-διορθώσεις κόμματα και το όνομα του sheet που το έχω αλλάξει και αυτό...) και τώρα ενώ φαίνεται το connection να γίνεται κανονικά (σημειώνω ότι άλλαξα τα ονόματα των TransferSheets...), ωστόσο αυτό που γίνεται τώρα είναι ότι το excel τρέχει τον κώδικα για πολύ ώρα έως ότου κολλάει και φυσικά τίποτα δεν περνιέται στη βάση. Δεν ξέρω τι μπορεί να φταίει! Μήπως έχεις καμιά ιδέα;

    Ευχαριστώ που ασχολείσαι ακόμα μαζί μου............Sad

  •  18-09-2007, 22:40 35111 σε απάντηση της 35084

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Όσες φορές προσπάθησα να κάνω debug τον κώδικα είδα ότι κόλλησε στα σημεία που σημειώνω παρακάτω. Άρα έχω ξεπεράσει το connection και κάτι δεν πάει καλά στο γέμισμα....


        shtName = "TransferData"
       Do While Not EOF
        rs.AddNew
        For x = 1 To rs.Fields.Count
          If Not rs(x - 1).Properties("ISAUTOINCREMENT").Value Then
            rs(x - 1) = wbWorld.Sheets(shtName).Cells(r, x)
          End If
        Next
        r = r + 1
        'Εάν δέν βρεί στοιχείο στην επόμενη γραμμή του sheet τότε τέλος του loop
        If wbWorld.Sheets(shtName).Cells(r, 1) = "" Then
           EOF = True
        End If
       Loop

    Υπάρχει περίπτωση να κολλάει λόγω ασυμφωνίας των τύπων δεδομένων στο excel και στη βάση ή λόγω κάποιων restrictions που μπορεί να προέρχονται από τα foreign keys κτλ.??

     

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

     

  •  20-09-2007, 08:54 35167 σε απάντηση της 35111

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

      Το πιό προφανές είναι ότι μπαίνει σέ ένα ατέρμονο loop με αποτέλεσμα να κρεμμάει .

    Δοκίμασε μια διόρθωση στό παρακάτω σημείο

        'Εάν δέν βρεί στοιχείο στην επόμενη γραμμή του sheet τότε τέλος του loop
        If wbWorld.Sheets(shtName).Cells(r, 1) = "" Then
           EOF = True
        End If

     

        'Εάν δέν βρεί στοιχείο στην επόμενη γραμμή του sheet τότε τέλος του loop
        If (trim(wbWorld.Sheets(shtName).Cells(r, 1)) = "" or isEmpty(wbWorld.Sheets(shtName).Cells(r, 1)) or IsNull(wbWorld.Sheets(shtName).Cells(r, 1))) Then
           EOF = True
        End If

       Εάν η πρώτη στήλη στό Excel σου είναι σέ format Αριθμός τότε πρέπει να γίνει τό παρακάτω.

        'Εάν δέν βρεί στοιχείο στην επόμενη γραμμή του sheet τότε τέλος του loop
        If wbWorld.Sheets(shtName).Cells(r, 1) = 0 Then
           EOF = True
        End If

     


    Ιωάννης Μανουσάκης
  •  20-09-2007, 21:48 35192 σε απάντηση της 35167

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Άλλαξα το σημείο που μου είπες αλλά πάλι δεν παίζει. Όντως η πρώτη στήλη μου είναι αριθμός έτσι λοιπόν έβαλα το 2ο κομμάτι του κώδικα που μου έδωσες. Η συμπεριφορά του τώρα είναι διαφορετική. Δεν πέφτει σε ατέρμονο βρόγχο, αντιθέτως τρέχει τόσο γρήγορα που δεν προλαβαίνω να κάνω debug. Δοκίμασα λοιπόν βάζοντας ένα Msgbox να δω μέχρι που φτάνει..στο σημείο που σημειώνω με κίτρινο δεν φτάνει ποτέ, πράγμα που μου φαίνεται περίεργο γιατί τον έλεγχο του if τον περνάει(το Msg μου εμφανίζεται όταν το βάζω αμέσως κάτω από το if)...Μήπως καταλαβαίνεις το γιατί;

    'όνομα του sheet από όπου θα αντληθούν τα δεδομένα

        shtName = "TransferData"

    Do While Not EOF
        rs.AddNew
        For x = 1 To rs.Fields.Count
           If Not rs(x - 1).Properties("ISAUTOINCREMENT").Value Then           
            rs(x - 1) = wbWorld.Sheets(shtName).Cells(r, x)
            MsgBox ("hello")
          End If
        Next

    Ευχαριστώ!

     

  •  20-09-2007, 23:18 35201 σε απάντηση της 35192

    Απ: Γέμισμα πίνακα στον SQL Server από excel files

    Αγνόησε την παραπάνω δημοσίευση μου...βρήκα τι έφταιγε εκεί.

    Τώρα έχω φτάσει στο σημείο που α)γίνεται το connection σωστά β) διαβάζει τα δεδομένα από το αρχείο που θέλω σωστά - άρα γίνεται το load του xls αρχείου κανονικά αλλά δεν κάνει το UpdateBatch. Από όσο διάβασα το updateBatch επηρεάζει τα recordsets για τα οποία δεν ισχύει κάποιο φίλτρο, στα δικά μου δεν υπάρχει φίλτρο....παρόλα αυτά το τελευταίο Msgbox που εμφανίζεται είναι το κιτρινισμένο και μετά ο κώδικας προσπαθεί για λίγο κάτι να κάνει (δεν τα καταφέρνει προφανώς) και τελειώνει η διαδικασία.....Any suggestions?

     Loop
       MsgBox ("ok")
        rs.UpdateBatch adAffectAll
        
       MsgBox ("ok2")
        CleanUp
       MsgBox ("ok3")
        Next
       MsgBox (i)

    Exit Sub

    Thanks again!

     

Σελίδα 1 από 2 (26 εγγραφές)   1 2 >
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems