Μηδένισμα τιμών πρωτεύοντων κλειδιών

Συζητήσεις για την τοπική βάση δεδομένων Access της Microsoft

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

Μηδένισμα τιμών πρωτεύοντων κλειδιών

Δημοσίευση από majuranus » 28 Νοέμ 2008 21:19

Υπάρχει τρόπος να μηδενίσω τις τιμές από τα πρωτεύοντα κλειδιά σε μία βάση??
και να αδειάσει γενικά η βάση
Κάτι σαν αρχικοποίγση εννοώ??

(αν γίνεται χωρίς να χρειαστεί όμως να σβήσω σχέσεις και τα πεδία κλειδιών και να τα ξαναδημιουργώ)

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Μηδένισμα τιμών πρωτεύοντων κλειδιών

Δημοσίευση από kon73 » 03 Δεκ 2008 13:03

Ο κώδικας VBA για διαγραφή όλων των εγγραφών ενός πίνακα είναι ο

Docmd.RunSQL("Delete * From TblName")

Όμως πρέπει πρώτα σε πίνακες που έχουν σχέση Ένα προς Πολλά να διαγράψεις τους πίνακες που έχουν την σχέση πολλά και μετά να σβήσεις τις εγγραφές που έχουν την σχέση Ένα.

Υπάρχει και ένας κώδικας τον οποίο έφτιαξα και ελέγχει σε όλους του πίνακες ποια είναι τα PrimaryKey (Με την προϋπόθεση ότι δεν έχεις κάποια σχέση που προϋποθέτει την παραπάνω σειρά που ανέφερεα) και εφόσον εξάγει ποια πεδία είναι primarykey τα ενημερώνει με τον αριθμό 0.

Κώδικας: Επιλογή όλων

Public Function InitialPrimaryKey()
Dim db As Database
Dim td As TableDef
Dim idxLoop As Index
Dim StrIndex As String

Set db = CurrentDb

For i = 0 To db.TableDefs.count - 1
                Set td = db.TableDefs(i)
                For Each idxLoop In td.Indexes
                    If idxLoop.Primary = True Then
                        StrIndex = Mid(idxLoop.Fields, 2)
                        If StrIndex <> "" Then
                            If Left&#40;db.TableDefs&#40;i&#41;.Name, 4&#41; <> "MSys" Then
                                DoCmd.RunSQL &#40;"UPDATE " & db.TableDefs&#40;i&#41;.Name & " Set " & StrIndex & "=0"&#41;
                            End If
                        End If
                        Exit For
                    End If
                Next idxLoop
                
Next
    db.Close
    Set db = Nothing
End Function
Φιλικά

kon73
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εικόνα

Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

Μηδένισμα τιμών πρωτεύοντων κλειδιών

Δημοσίευση από majuranus » 03 Δεκ 2008 13:26

Όμως πρέπει πρώτα σε πίνακες που έχουν σχέση Ένα προς Πολλά να διαγράψεις τους πίνακες που έχουν την σχέση πολλά και μετά να σβήσεις τις εγγραφές που έχουν την σχέση Ένα.
Επειδή νομίζω ότι δεν κατάλαβα καλά...

1α) την εντολή docmd.runsql("Delete * From *") αν την πληκτρολογήσω θα δουλέψει η πρέπει ένα-ένα?
1β) Που την γράφω αυτή την εντολή?

Να διαγράψω τους πίνακες που έχουν την σχέση πολλά? μετά πρέπει να τους ξανακάνω? η εννοείς ότι πρέπει να διαγράψω τα κλειδιά από τους πίνακες? η να διαγράψω τις εγγραφές από τους πίνακες που έχουν τη σχέση πολλά?

δεν κατάλαβα καλά????
:roll: :roll: :roll: :roll:

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Μηδένισμα τιμών πρωτεύοντων κλειδιών

Δημοσίευση από kon73 » 03 Δεκ 2008 14:17

Σε μία σχέση μεταξύ δύο πινάκων υπάρχει ο γονέας ας πούμε το (ΕΝΑ) και ο πίνακας (ΠΟΛΛΑ) που είναι ο δεύτερος πίνακας. ΤΗΝ ΣΧΕΣΗ δεν την πειράζεις (ΔΕΝ ΔΙΑΓΡΑΦΕΙΣ ΤΙΣ ΣΧΕΣΕΙΣ) αλλά δεν μπορείς με SQL να διαγράψεις τον πίνακα γονέα αν δεν έχεις σβήσει τις εγγραφές από τον πίνακα ΠΟΛΛΑ.

Την εντολή SQL (DELETE ...) για τις διαγραφές των εγγραφών του πίνακα μπορείς όπου θέλεις να την εισάγεις. Σε Event της φόρμας σε ένα κουμπί στο κλικ του, σε module σε μία συνάρτηση που να την καλείς με κάποιο πλήκτρο F5 πχ. ουσιαστικά το SQL Delete θα είναι ο κώδικας που θα διαγράφει τις εγγραφές σου για κάθε πίνακα όμως θα επαναλαμβάνετε το SQL String.

Φιλικά

Kon73
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εικόνα

Άβαταρ μέλους
majuranus
Δημοσιεύσεις: 404
Εγγραφή: 01 Μαρ 2006 19:47
Τοποθεσία: Veria
Επικοινωνία:

Μηδένισμα τιμών πρωτεύοντων κλειδιών

Δημοσίευση από majuranus » 03 Δεκ 2008 14:36

Έσβησα όλες τις εγγραφές από όλους τους πίνακες και μου έβγαλε αυτό...
Συνημμένα
this.JPG

Άβαταρ μέλους
kon73
Script Master
Δημοσιεύσεις: 224
Εγγραφή: 13 Απρ 2008 23:47
Επικοινωνία:

Μηδένισμα τιμών πρωτεύοντων κλειδιών

Δημοσίευση από kon73 » 03 Δεκ 2008 15:04

O Κώδικας που σου έγραψα δεν είναι πλήρες. Κάνει Update μόνο αν οι πίνακες δεν έχουν σχέσεις μεταξύ τους όπως ήδη έχω αναφέρεις. Εδώ προφανώς έχεις σχέσεις και γι'αυτό και σου εμφανίζει αυτό το μήνυμα.

Φιλικά

kon73
My New Site http://www.MsAccess.gr
Free Access (VBA Code,Tutorials, Mdbs, Eclass, Eshop)
Εικόνα


Απάντηση

Επιστροφή στο “MS Access”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες