Wie Sie programmgesteuert aktualisieren einer verknüpften Tabelle in Access aktualisieren von Daten-Typen auch?
Arbeite ich mit einem alten Microsoft Access-Datenbank, die wir haben vor kurzem aktualisiert, um verknüpfte Tabellen/SQL-Server-backend.
Mache ich einige änderungen an der Struktur der Daten und möchten programmgesteuert aktualisieren der verknüpften Tabelle zu verweisen.
Allerdings mit dem code, den ich verwende, nach dem tun, was ich erwarten würde wäre, aktualisieren Sie die verknüpften Tabellen bekomme ich nicht aktualisiert Datentypen für einen bestimmten Tisch. Jetzt ist der Datentyp Text, aber wenn ich Externe Daten - > Tabellenverknüpfungs-Manager, und gehen durch diesen Prozess, den Sie aktualisieren von Datum/Zeit.
(Ich hätte gerne eine Funktion, flip zwischen der Entwicklung und der Produktion, so dass ich nicht betrachten Sie die obige route, um eine option sein.)
Access/VB ist nicht meine stärkste skill mehr, aber von der MSDN-Website (diese und diese) scheint es, wie tb.Fields.Refresh
erforderlich ist, aber es nicht so funktioniert wie ich es erwarten würde.
Was mache ich falsch?
Function RefreshLinkedTables() As Boolean
Dim db As DAO.Database
Dim tb As DAO.TableDef
Dim fld As DAO.Field
Set db = CurrentDb
For Each tb In db.TableDefs
' Skip system files.
If (Mid(tb.Name, 1, 4) <> "MSys" And Mid(tb.Name, 1, 4) <> "~TMP") Then
Debug.Print tb.Name
Debug.Print tb.Connect
If (Mid(tb.Connect, 1, 5) = "ODBC;") Then
tb.RefreshLink
If (tb.Name = "Jobs") Then
Debug.Print "Refreshing fields data"
tb.Fields.Refresh
End If
End If
Debug.Print "=== === ==="
End If
db.TableDefs.Refresh
Next
Set db = Nothing
RefreshLinkedTables = True
Exit Function
End Function
- Wenn die Aktualisierung der Tabelle link funktioniert nicht zu Ihrer Zufriedenheit haben Sie versucht, löschen Sie die verknüpfte Tabelle und dann neu zu erstellen?
- Danke @GordThompson. Ich glaube, ich könnte löschen Sie die verknüpfte Tabelle, aber ich würde viel lieber die programmatische Aktualisierung funktioniert wie der standard tut. Ich bin auch nicht 100% wie die DSN auf die verwiesen wurde, wenn die verknüpften Tabellen erstellt wurden, und ich möchte die Auswirkungen auf die Benutzer so wenig wie möglich.
- Verstanden, und wenn Tabellenverknüpfungs-Manager können es tun, dann hätte ich erwartet, dass
tb.RefreshLink
wäre in der Lage, es zu tun. Haben Sie versucht, so etwas wietb.Connect = tb.Connect & ""
um die.Connect
Eigenschaft "dirty" vor dem Aufruf vontb.RefreshLink
? - Das ist keine schlechte Idee. Werde ich probieren, wenn ich wieder im Büro ist morgen, und aktualisieren Sie Sie mit, wie gut es funktionierte. Weißt du, ob der tb.Felder.Refresh bietet einen nutzen? Ich bin mir nicht 100% und ich möchte, um es zu entfernen, wenn ich kann.
- RE:
tb.Fields.Refresh
- Kann nicht sagen, ich habe noch nie in Benutzung hatte, dass diese spezielle Methode. - Leider macht der
Connect
Eigenschaft dirty hat nicht funktioniert. Zusätzlich zu versuchen, nichts zu ergänzen, ich habe auch versucht, die änderung derDescription
im Zusammenhang; weder gearbeitet 🙁 - Sehr seltsam. Ich habe nur bestätigt, dass die unter "normalen" Umständen, eine
tb.RefreshLink
alle von selbst, ausreichend ist. (Access 2010 und SQL Server 2008) - Bevor ich begann, anderen zu helfen, ich war dumping Eigenschaften; an dieser Stelle ich denke, ich werde zu aktualisieren, die durch die Verknüpften Tabellen-Manager und hoffe, dass meine Verbindungsdaten nicht furchtbar Durcheinander gebracht.
- Vielen Dank für deine Hilfe, Gord. Ich endlich herausgefunden, was die Merkwürdigkeiten waren und gepostet, eine Antwort Detaillierung. Wenn Sie möchten, fügen Sie eine Antwort mit Ihren Kommentaren haben Sie meine +1.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gab es ein paar Dinge, die dazu geführt merkwürdiges Verhalten.
Ersten, die verknüpfte Tabelle hatte zunächst die
SQL Server
Treiber, nicht dieSQL Server Native Client 10.0
ein. Also, wenn ich aktualisiert, die Tabellen habe ich das falsch ein (ich wusste, es war nicht11.0
, aber dachte, es war10.0
).Das zweite Problem ist, dass, wenn die Access-Tabellen konvertiert wurden über SQL Server-datetime-Felder wurden setup als datetime2(0) (Zugriff 2010-migration-tool verwendet wurde). Leider ist die
SQL Server
- Treiber unterstützt diese nicht.Wir möchten, dass Benutzer zu authentifizieren, die über Windows-Authentifizierung (auch legacy-app, die hoffentlich Holen Sie sich bewegt, um die web-oder ein 3rd-party-Lösung ein-Tages), und wir wissen, dass es funktioniert auf diese Weise.
Nach änderung der SQL-Server-Tabellen zu verwenden datetime anstelle von datetime2, die folgenden code hat Prima funktioniert:
Logik könnte gereinigt werden, bis ein bisschen mehr, aber es funktioniert.
Dank Gord Thompson für seine hilfreichen Kommentare.
datetime2
Problem.