VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Συζητήσεις για τις γλώσσες του dot Net και για του Visual Studio της Microsoft

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

Απάντηση
Άβαταρ μέλους
astral_cyborg
Δημοσιεύσεις: 8
Εγγραφή: 01 Μάιος 2006 16:20
Τοποθεσία: Πετρούπολη

VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Δημοσίευση από astral_cyborg » 23 Νοέμ 2010 10:33

Καλημέρα.

Είμαι σχετικά αρχάριος ακόμα και προσπαθώ να φτιάξω εφαρμογή με χρήση βάσης δεδομένων σε VB.NET.

Σε γενικές γραμμές η βάση είναι φτιαγμένη σε Access και αποτελείται από έναν κύριο πίνακα (πχ. "ΑρχικόςΠίνακας") με στήλη "Ονοματεπώνυμο" ως PK και με 2-3 δευτερεύοντες πίνακες ("ΔευτερεύωνΠίνακας1",..2,..3 κτλ), συνδεδεμένους ως One-to-Many με τον αρχικό και με "ID" ως PK και "Ονοματεπώνυμο" ως FK.

Στο περιβάλλον της Access, η βάση λειτουργεί χωρίς να έχω εντοπίσει κάποιο πρόβλημα, ενώ μέσω της εφαρμογής, όταν κάνω αλλαγή σε κάποια τιμή από τον "ΑρχικόΠίνακα" κι επιλέξω να την αποθηκεύσω, μου πετάει exception με το μήνυμα:

"Δεν είναι δυνατή η διαγραφή ή η αλλαγή της εγγραφής γιατί ο πίνακας 'ΔευτερεύωνΠίνακας2' περιέχει σχετιζόμενες εγγραφές."

Οι λειτουργίες και τα ερωτήματα έχουν επεξεργαστεί μέσω του Query Builder του Visual Studio, ενώ και η συσχέτιση των πινάκων έχει ελεγχθεί όπως ήταν και στο περιβάλλον της Access.

Σε σχετική αναζήτηση από msdn forums κτλ, λένε ότι το πρόβλημα οφείλεται στο γεγονός ότι η εφαρμογή προσπαθεί να αποθηκεύσει όλους τους πίνακες μαζικά κι εκεί μπλοκάρει αν η βάση δεδομένων είναι σχεσιακή, ενώ θα πρέπει να τροποποιήσει ο χρήστης τον κώδικα ώστε να αποθηκεύονται οι πίνακες ξεχωριστά.

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

Παρακάτω, παραθέτω τον κώδικα που δημιουργήθηκε αυτόματα με την προσθήκη του BindingNavigator, καθώς και σε σχόλιο αυτά που δοκίμασα εγώ, αλλά τελικά να παραμένει το ίδιο πρόβλημα (διάφορες μεταβλητές τις έχω αλλάξει εδώ για να είναι πιο ευανάγνωστο, ενώ και το όνομα της φόρμας το έβαλα να είναι ίδιο με τον αρχικό πίνακα, αφού κάθε φόρμα έχω επιλέξει να εμφανίζει κι από έναν πίνακα της βάσης):

Private Sub ΑrxikosPinakasBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ΑrxikosPinakasBindingNavigatorSaveItem.Click

'Αποθήκευση αλλαγών στη βάση
Me.Validate()
Me.ΑrxikosPinakasBindingSource.EndEdit()

'Στην παρακάτω γραμμή είναι που δημιουργείται το σφάλμα
Me.TableAdapterManager.UpdateAll(Me.MyDataSet)

'Τα παραπάνω είναι ο αυτόματος κώδικας από την προσθήκη κουμπιού αποθήκευσης στην μπάρα BindingNavigator

'Παρακάτω δίνω τις εναλλακτικές προσπάθειές μου αντί του UpdateAll, που δώθηκε αρχικά
Me.ΑrxikosPinakasTableAdapter.Update(Me.MyDataSet.ΑrxikosPinakas)

Me.ΑrxikosPinakasTableAdapter.Update(Me.DataDataSet.Tables("ΑrxikosPinakas"))
frmDefterevonPinakas.DefterevonPinakasTableAdapter.Update(Me.MyDataSet.Tables("ArithmosFakelou"))

End Sub


Δυστυχώς, την όλη σύνδεση της βάσης με την εφαρμογή και τα σχετικά, τα έχω κάνει μέσω των σχετικών ημι-αυτοματοποιημένων διαδικασιών που προσφέρει το Visual Studio κι όχι από καθαρό κώδικα.

Παρακαλώ, προτείνετέ μου κάποια λύση γενικά στο παραπάνω πρόβλημα.

Ευχαριστώ.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Δημοσίευση από virxen75 » 23 Νοέμ 2010 15:04

στείλε σε ένα zip την βάση σου και το solution της vb να το κοιτάξω

athlon
Δημοσιεύσεις: 30
Εγγραφή: 02 Οκτ 2008 01:53
Τοποθεσία: pola kai diafora........

VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Δημοσίευση από athlon » 29 Νοέμ 2010 23:45

To Provlima sou pithanotata eine stis sxesis ton pinakon sou kai sta protevon klidia..............

Άβαταρ μέλους
astral_cyborg
Δημοσιεύσεις: 8
Εγγραφή: 01 Μάιος 2006 16:20
Τοποθεσία: Πετρούπολη

VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Δημοσίευση από astral_cyborg » 30 Νοέμ 2010 17:43

Όχι, το βρήκα τι έφταιγε, αλλά ξέχασα να απαντήσω...

Δοκίμασα να φτιάξω παρόμοια εφαρμογή σαν παράδειγμα, με 2-3 στήλες τον κάθε πίνακα για να είναι πιο εύκολη στη δοκιμή.

Τελικά, για κάποιο λόγο με βάση σε Access και σχέσεις φτιαγμένες από VB Query Builder, πετάει σφάλμα.

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

Δεν έχω καταλάβει πού μπορεί να οφείλεται αυτό. Θα δοκιμάσω όμως κάποια στιγμή αν βρω όρεξη, να το δοκιμάσω το ίδιο παράδειγμα, χωρίς χρήση του Query Builder, αλλά με κώδικα από την αρχή, να δω αν θα έχει διαφορά.

Ευχαριστώ πάντως.

athlon
Δημοσιεύσεις: 30
Εγγραφή: 02 Οκτ 2008 01:53
Τοποθεσία: pola kai diafora........

VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Δημοσίευση από athlon » 01 Δεκ 2010 01:04

Otan orizis sxesei ena pros pola ta prepi na kseris oti gia na epeksergastis engafes apo ton deftero pinaka ta prepi na orisis kai stous dio pinakes protevon klidia!!

Άβαταρ μέλους
astral_cyborg
Δημοσιεύσεις: 8
Εγγραφή: 01 Μάιος 2006 16:20
Τοποθεσία: Πετρούπολη

VB.NET: Σφάλμα αποθήκευσης σε σχεσιακή βάση δεδομένων

Δημοσίευση από astral_cyborg » 01 Δεκ 2010 20:49

Ναι, το είχα κάνει κι αυτό.

Ακόμα δεν έχω βρει τι μπορεί να το πειράζει :/

Απάντηση

Επιστροφή στο “dot Net και Visual Studio”

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

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