2016-04-20 13 views
1

Ich habe ein Sub, das eine neue Sammlung von Access-Datenbank-Objekt verknüpft tabledef erstellt. Das Untersystem arbeitet 1/2 Mal ohne Fehler, wenn der Code nicht zurückgesetzt wird (nur F5 drücken), aber funktioniert immer, wenn zuerst zurückgesetzt wird. Wenn dieses Sub in einem anderen Modul aufgerufen wird, arbeitet es jedoch nur 1/2 der Zeit erneut. Irgendwelche Ideen, warum das nur die Hälfte der Zeit funktioniert, wenn es in einem anderen Sub aufgerufen wird?VBA - Access-Datenbank-Tabellensammlung

Public Tables As New Collection 
Sub SET_VAR() 
'############################################################## 
'# 1. CREATE PUBLIC COLLECTION OF LINKED TABLES IN DB 
'############################################################## 
On Error GoTo handlr: 
    Dim tdf As TableDef 
    Dim db As Database 
    Set db = DBEngine(0)(0) 
    For Each tdf In db.TableDefs 
     If Left(tdf.Connect, 5) = "ODBC;" Then 
     Tables.Add tdf, Chr(34) & tdf.Name & Chr(34) 
     End If 
    Next tdf 
    MsgBox "Success. Linked tables public collection created!" 
    Exit Sub 
handlr: 
    MsgBox "Error. Linked tables not added to public collection!" 
    End 
End Sub 

enter image description here

Dies ist der Fehler-Zugang gibt mir:

"457 Dieser Schlüssel bereits einem Element dieser Sammlung zugeordnet ist"

+0

"457 Dieser Schlüssel ist bereits mit einem Element dieser Sammlung verbunden" Ich habe das! – Jorge

+0

@HansUp Das hat funktioniert! Ändern der Dim-Tabellen und Setzen von Tabellen = Neue Kollektion funktioniert% 100. Vielen Dank! – Jorge

Antwort

1

Ändern Sie die erste Zeile Public Tables As Collection, dann in SET_VAR(), Set Tables = New Collection

Public Tables As Collection 
Sub SET_VAR() 
On Error GoTo handlr: 
    Dim tdf As TableDef 
    Dim db As Database 
    Set Tables = New Collection 
    Set db = DBEngine(0)(0) 
    For Each tdf In db.TableDefs 
     If Left(tdf.Connect, 5) = "ODBC;" Then 
     Tables.Add tdf, Chr(34) & tdf.Name & Chr(34) 
     End If 
    Next tdf 
    MsgBox "Success. Linked tables public collection created!" 
    Exit Sub 
handlr: 
    MsgBox "Error. Linked tables not added to public collection!" & _ 
     vbCrLf & "(error #" & err.Number & " :" & err.Description & ")" 
End Sub 

hinzufügen Da Sie dann mit einem leeren Collection jedes Mal, wenn die Prozedur ausgeführt wird, sollten diese Änderungen eliminieren das doppelte Schlüsselproblem beginnen.

Ich fügte auch die Fehlernummer und die Beschreibung dem MsgBox Text hinzu. Wenn Sie den Benutzern diese Details nicht anzeigen möchten, geben Sie sie in das Direktfenster Debug.Print ein. Wenn Ihr Code auf einen Fehler stößt, müssen Sie verstehen, warum das passiert ist.

1

Sie vermissen ein Aktualisieren:

Set db = DBEngine(0)(0) 
For Each tdf In db.TableDefs 
    If Left(tdf.Connect, 5) = "ODBC;" Then 
     Tables.Add tdf, Chr(34) & tdf.Name & Chr(34) 
    End If 
Next tdf 
db.TableDefs.Refresh