Καλησπέρα!
Δημήτρη, το σωστό είναι να αποσυνδεθεί ο εν λόγω πίνακας και να επανασυδεθεί αφού γίνουν οι απαραίτητες αλλαγές στα πεδία.
Αν πρόκειται για τροποποιήσεις τύπων πεδίων σε έναν πίνακα μόνο, θα πρέπει να κάνεις τη διαδικασία χειροκίνητα.
Αν εμπλέκονται περισσότεροι πίνακες, τότε κάνε τα εξής:
Δημιουργησε ένα αντίγραφο της βάσης σου.
Η αρχική βάση και το αντίγραφο της πρέπει να βρίσκονται στον
ίδιο φάκελο.
Άνοιξε την αρχική βάση πέρασε τον παρακάτω κώδικα σε μια λειτουργική μονάδα (Module) και τρέξε τον για να διαγράψεις όλες τις σχέσεις πινάκων που υπάρχουν στη βάση:
Κώδικας:
Option Compare Database
Option Explicit
Sub DeleteRelations()
Dim dbs As DAO.Database
Dim Rel As Relation
Dim i As Integer
Dim x As Integer
Set dbs = CurrentDb
x = dbs.Relations.Count
For i = 0 To x - 1
Set Rel = dbs.Relations(0)
dbs.Relations.Delete Rel.Name
Next
MsgBox x & " relationships have been deleted"
End Sub
Τροποποίησε τα πεδία των πινάκων όπως θέλεις.
Επικόλλησε τον παρακάτω κώδικα στη λειτουργική μονάδα και τρέξε την εντολή
ImportAllRelations για να μεταφέρεις τις σχέσεις των πινάκων από το αντίγραφο της βάσης:
Κώδικας:
Sub ImportAllRelations()
Dim i As Integer
i = ImportRelations(CurrentProject.Path & "\Nordwind1.accdb") ' Άλλαξε το όνομα με αυτό του αντιγράφου της βάσης.
' Η κάθετος "\...." πρέπει να παραμείνει και το αντίγραφο πρέπει να βρίσκεται στον ίδιο φάκελο με την αρχική βάση.
MsgBox i & " relationships have been imported"
End Sub
Function ImportRelations(DbName As String) As Integer ' Πηγή: Microsoft. Έγιναν τροποποιήσεις.
Dim LocalDb As DAO.Database
Dim RemoteDb As DAO.Database
Dim LocalRel As DAO.Relation
Dim RemoteRel As DAO.Relation
Dim LocalField As Field
Dim RemoteField As Field
Dim tmpCount As Integer
Dim x As Integer
Dim i As Integer
Dim RelErr As Boolean
Set LocalDb = CurrentDb()
Set RemoteDb = DBEngine.Workspaces(0).OpenDatabase(DbName)
For i = 0 To RemoteDb.Relations.Count - 1
Set RemoteRel = RemoteDb.Relations(i)
Set LocalRel = LocalDb.CreateRelation(RemoteRel.Name, _
RemoteRel.Table, RemoteRel.ForeignTable, RemoteRel.Attributes)
RelErr = False
For x = 0 To RemoteRel.Fields.Count - 1
Set RemoteField = RemoteRel.Fields(x)
Set LocalField = LocalRel.CreateField(RemoteField.Name)
LocalField.ForeignName = RemoteField.ForeignName
On Error Resume Next
LocalRel.Fields.Append LocalField
RelErr = Err <> 0
On Error GoTo 0
Next x
If Not RelErr Then
On Error Resume Next
LocalDb.Relations.Append LocalRel
If Err <> 0 Then
Else
tmpCount = tmpCount + 1
End If
On Error GoTo 0
End If
Next i
LocalDb.Close
RemoteDb.Close
ImportRelations = tmpCount
End Function
Καλή συνέχεια!
Τάσος